playbook与交互式

简介:

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

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

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

wKiom1frs_zhXk8YAAA3c6vceAI538.png

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

1
2
3
4
5
---
- hosts: all
   tasks:
         - name: 启动 test .sh
           shell: sh  /root/test .sh

启动这个playbook,效果如图:

wKiom1frtbPSBwTtAADkh4owzRk503.jpg

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

wKiom1frthGwm9EDAAAecm6MImc271.png

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


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

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

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

wKiom1frtwCglozYAAAotpuOSuU961.png


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

1
2
3
4
5
6
7
#/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,

1
2
3
"dirk"
"mavs"
"41PF"

然后再把playbook改成这样:

1
2
3
4
5
---
- hosts: all
   tasks:
         - name: 启动 test .sh
           shell:  sh  /root/test .sh <  /root/abc .txt

执行一下看效果:

wKiom1fruk-CxNkEAAAPdog2zTE037.png


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


 本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/1857505


相关文章
Ansible之playbook剧本-1
Ansible之playbook剧本
125 0
|
5月前
|
缓存 Ubuntu 网络安全
编写 Ansible Playbooks
编写 Ansible Playbooks
46 0
|
6月前
|
搜索推荐 Shell 应用服务中间件
ansible中的剧本playback详解
ansible中的剧本playback详解
Ansible之playbook剧本-3
Ansible之playbook剧本
80 0
|
Python
Ansible之playbook剧本-2
Ansible之playbook剧本
71 0
|
Shell 网络安全 开发工具
|
XML NoSQL 关系型数据库
实现 Ansible 企业级用法 playbook| 学习笔记
快速学习实现 Ansible 企业级用法 playbook
实现 Ansible 企业级用法 playbook| 学习笔记
|
JSON 运维 关系型数据库
Ansible 自动化运维——剧本(playbook)
playbook是ansible用于配置,部署,和管理被控节点的剧本。通过playbook的详细描述,执行其中的tasks,可以让远端主机达到预期的状态。playbook是由一个或多个”play”组成的列表。 当对一台机器做环境初始化的时候往往需要不止做一件事情,这时使用playbook会更加适合。通过playbook你可以一次在多台机器执行多个指令。通过这种预先设计的配置保持了机器的配置统一,并很简单的执行日常任务。 ansible通过不同的模块实现相应的管理,管理的方式通过定义的清单文件(hosts)所管理的主机包括认证的方式连接的端口等。所有的功能都是通过调用不同的模块(modules
Ansible 自动化运维——剧本(playbook)
|
缓存 运维 负载均衡
Ansible-playbook 的编写 | 学习笔记
快速学习Ansible-playbook 的编写
Ansible-playbook 的编写 | 学习笔记
|
NoSQL Shell 应用服务中间件