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标签位置不居中调整的解决方案
893 0
|
Web App开发 监控 JavaScript
Vue 3 的内存管理
【5月更文挑战第31天】Vue 3 的内存管理
495 2
|
canal 存储 NoSQL
mysql进阶:canal搭建主从|集群架构
之前我们讲解过canal的各种应用,但是对于生产环境来讲,服务高可用是必须保证的。因此canal单节点是不能满足我们的需求的。就需要搭建canal集群。
1667 2
mysql进阶:canal搭建主从|集群架构
|
运维 安全 数据安全/隐私保护
隐语(SecretFlow)联邦学习实训营第一期笔记
**摘要:** 本文探讨了数据可信流通的概念,强调了数据来源确认、使用范围界定、流程追溯和风险防范的重要性。数据流通分为内循环(安全域内)和外循环(跨域),其中外循环面临黑客攻击、内部泄露和数据滥用等风险。为建立技术信任,提出了身份验证、利益对齐、能力预期和行为审计四点要求,涉及隐私计算、可信计算等技术。隐语作为隐私计算框架,提供服务以支持数据安全流通,通过开源降低接入门槛,并具备统一架构、原生应用、开放拓展、高性能和多轮安全验证等优势。开源隐语助力解决数据权属和信任问题,促进数据要素的安全流通。
|
小程序 JavaScript Java
基于SpringBoot+Vue+uniapp微信小程序的奶茶点餐小程序的详细设计和实现
基于SpringBoot+Vue+uniapp微信小程序的奶茶点餐小程序的详细设计和实现
226 0
|
Kubernetes 数据安全/隐私保护 容器
Kubernetes-集群扩容增加node节点
  最近Kubernetes集群的负载很高,为了减轻负载压力,打算新增节点进行集群扩容,具体方法如下。 新节点准备工作参考这篇文章Kubernetes-离线部署Kubernetes 1.9.0,按照说明步骤执行到设置kubelet开机启动。
7962 0
|
Linux
CentOS 7 安装WireShark,桌面版
CentOS 7 安装WireShark,桌面版
1588 0
|
安全 Java 数据处理
Python多线程编程:概念、技巧及最佳实践
Python多线程编程:概念、技巧及最佳实践
|
Kubernetes 网络协议 容器
kubectl命令报错:Unable to connect to the server: dial tcp XXX:16443: connect: no route to host
kubectl命令报错:Unable to connect to the server: dial tcp XXX:16443: connect: no route to host
1965 0