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


相关文章
|
定位技术
Echarts使用geojson地理坐标地图地名label标签位置不居中调整的解决方案
Echarts使用geojson地理坐标地图地名label标签位置不居中调整的解决方案
1079 0
|
安全 jenkins 持续交付
Jenkins针对不同的项目视图对不同的用户进行权限分配
Jenkins创建用户并分配不同视图的权限 根据不同的部门分配不同的角色,角色成员只能看到自己部门视图内部的jenkins job Jenkins版本:2.249 因安装了中文包的原因,语言大多以中文的方式显示,但不影响配置使用
2854 0
Jenkins针对不同的项目视图对不同的用户进行权限分配
|
canal 存储 NoSQL
mysql进阶:canal搭建主从|集群架构
之前我们讲解过canal的各种应用,但是对于生产环境来讲,服务高可用是必须保证的。因此canal单节点是不能满足我们的需求的。就需要搭建canal集群。
2008 2
mysql进阶:canal搭建主从|集群架构
|
Web App开发 监控 JavaScript
Vue 3 的内存管理
【5月更文挑战第31天】Vue 3 的内存管理
610 2
|
新零售 安全 Linux
阿里巴巴正式开源自研容器技术Pouch
阿里巴巴正式开源了基于Apache 2.0协议的容器技术Pouch。Pouch是一款轻量级的容器技术,拥有快速高效、可移植性高、资源占用少等特性,主要帮助阿里更快的做到内部业务的交付,同时提高超大规模下数据中心的物理资源利用率。
9188 1
|
Linux Ubuntu 网络安全
Linux 命令学习之dpkg命令详解
<p>dpkg是一个Debian的一个命令行工具,它可以用来安装、删除、构建和管理Debian的软件包。<br> 下面是它的一些命令解释:<br> 1)安装软件<br> 命令行:dpkg -i &lt;.deb file name&gt;<br> 示例:dpkg -i avg71flm_r28-1_i386.deb<br> 2)安装一个目录下面所有的软件包<br> 命令行:dp
4508 0
vitepress如何配置右上角的小两侧标志,利用nav标签进行修改,右侧边栏如何设置成自动弹出水平框,让原先隐藏的框能够显示出来
vitepress如何配置右上角的小两侧标志,利用nav标签进行修改,右侧边栏如何设置成自动弹出水平框,让原先隐藏的框能够显示出来
|
存储 缓存 算法
Python缓存神器cachetools:提高程序性能的利器,一文详解其缓存算法
Python缓存神器cachetools:提高程序性能的利器,一文详解其缓存算法
Python缓存神器cachetools:提高程序性能的利器,一文详解其缓存算法
|
安全 Java 数据处理
Python多线程编程:概念、技巧及最佳实践
Python多线程编程:概念、技巧及最佳实践

热门文章

最新文章