playbook与交互式

假设被管理机器上有一个实验脚本,内容如下:

#/bin/bash
read -p "请输入一句话:" yahoo
echo $yahoo >> /root/123.txt

这个脚本很基础,我们先随便实验一下,如图。

现在来到ansible主机,写一个简单的yaml来看一下是否会有交互的环节,yaml如下:

---
- hosts: all
  tasks:
        - name: 启动test.sh
          shell: sh /root/test.sh

启动这个playbook,效果如图:

可见,根本就没有让我们填写“请输入一句话”的机会。而返回到被控制端,打开123.tst看见的效果是这样的:

可见ansible-playbook会默认往交互环节里输入一个回车,着尼玛就很坑了啊,因为大批量机器需要一起执行一个有交互环节的脚本是一个很常见的事儿,遇到这种问题肿么办?

答曰,提前把“那句话写好”,比如我们要输入的那句话是“快使用双截棍,哼哼哈兮”,那么把playbook改成这样:

---
- hosts: all
  tasks:
        - name: 启动test.sh
          shell: echo "快使用双截棍,哼哼哈兮" |  sh /root/test.sh

最简单粗暴的方法就是用shell的思维去解决这个问题。效果如图:

那么这是交互一次的情况,如果是交互多次的情况怎么办?比如现在是这样的一个脚本:

#/bin/bash
read -p "输入一个球员名字:" yahoo
read -p "输入他的球队:" alibaba
read -p "输入他的球衣号码以及场上位置:" youku
echo $yahoo >> /root/123.txt
echo $alibaba >> /root/123.txt
echo $youku >> /root/123.txt

这样还能一次性输入吗?很多人认为可以在playbook里输入 shell:echo "dirk\nMAVS\n41+pf" | sh /root/test.sh。其实这样是不对的,这样的输入效果只能是第一行是"dirknMAVSn41+pf",然后后两行是空的。

那么这样的情况怎么办?

要么先把东西写好,比如有一个abc.txt,

"dirk"
"mavs"
"41PF"

然后再把playbook改成这样:

---
- hosts: all
  tasks:
        - name: 启动test.sh
          shell:  sh /root/test.sh < /root/abc.txt

执行一下看效果:

要么就是shell:echo -e "dirk\nMAVS\n41+pf" | sh /root/test.sh。

时间: 2024-10-06 03:17:01

playbook与交互式的相关文章

Ansible系列(五):playbook应用和roles自动化批量安装示例

html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary { display: block } audio,canvas,progress,video { display: inline-block; vertical-align: baseline } audio:not([co

ansible中playbook使用

palybook使用 #####定义/etc/ansible/hosts 两种方式: 基于ssh密码登录 不配置免密码登录,需要在hosts文件中配置 第一种:基于ssh密码登录 参数一:inventoryansible的主要功能用于批量管理主机操作,便捷的使用部分主机,可以在inventory file中分组默认的inventory file为/etc/ansible/hosts 1.inventory文件格式同一主机归并到一个或者多个组中,主机使用非默认的22端口,也可以在主机名称后加冒号端

Ansible PlayBook语法(4)

title: Ansible PlayBook语法(4) date: 2018-12-02 10:53:24 tags: Ansible categories: Ansible copyright: true --- Ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能,ansible是基于模块工作的,本身没有批量部署的能力,真正具有批量部署

04.playbook应用和roles自动化批量安装示例

playbook是ansible实现批量自动化最重要的手段.在其中可以使用变量.引用.循环等功能,相比ad-hoc而言,其功能要强大的多. 1.1 yaml简单示例 ansible的playbook采用yaml语法.以下是一个yaml格式的文件: --- # Members in Bob's family name: Bob age: 30 gender: Male wife: name: Alice age: 27 gender: Female children: - name: Jim ag

bash嵌套expect实现交换机的交互式登录实例

1. expect实现参数传递 1.1 实现 $argv 参数数组 expect脚本可以接受从bash传递过来的参数. 可以使用[lindex $argv n]获得,n从0开始,分别表示第一个,第二个,第三个....参数 1.2 样例 cat telnet.exp #!/usr/bin/expect set host [lindex $argv 0] set passwd [lindex $argv 1] set passwden [lindex $argv 2] spawn telnet $h

2014马哥Linux0218-1字符测试与生成交互式选项表的脚本代码

0218课里,先是一个简单的小程序,注意字符测试的使用,建议所有被测试的字符都要加引号,而在字符测试匹配模式(也可以使正则表达式)的时候,需要用双中括号,题目如下: 练习:判定所有用户是否拥有可登陆shell #!/bin/bash for userName in `cut -d: -f1 /etc/passwd`;do if [[ `grep "^$userName\>" /etc/passwd | cut -d: -f7` =~ sh$ ]]; then echo "

iOS7新特性 ViewController转场切换(三) 自定义视图控制器容器的切换---非交互式

@继续前面的内容,这一章,主要介绍自定义ViewController容器上视图VC的切换.先来看看系统给我们提供的容器控制器 UINavigationController和UITabBarController 都有一个NSArray类型的属性viewControllers,很明显,存储的就是需要切换的视图VC.同理,我们定义一个ContainerViewController,是UIViewController的直接子类,用来作为容器依托,额,其他属性定义详见代码吧,这里不多说了.(PS:原先我进

ansible的playbook配置及template模板的使用

前言: 学习下ansible的playbooks的状态配置管理,说来puppet saltstack都有类似的叫法,只是ansible的叫法更犀利,我当时一看playbook还以为是花花公子的playboy.要使用ansible就要深入学习playbook配置及模板. 注:到底是playbook还是playbooks.... 先把官网的简单几个语法给说明下. #这个是你选择的主机 - hosts: webservers #这个是变量   vars:     http_port: 80     m

ansible playbook 详解

上篇文章介绍了 ansible 的安装配置及实例:http://msiyuetian.blog.51cto.com/8637744/1748143 下面这篇文章主要介绍 ansible 的 playbook 详解,playbook 就是相当于把模块或函数写入到配置文件里面,然后我们执行该配置文件来达到远程运维自动化的目的. 一.playbook的简单使用 1.创建文件实例 1)编辑配置文件 [[email protected] ~]# cd /etc/ansible/ [[email prote