博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
playbook与交互式
阅读量:7232 次
发布时间:2019-06-29

本文共 1270 字,大约阅读时间需要 4 分钟。

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

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

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

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

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

启动这个playbook,效果如图:

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

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

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

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

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

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

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

执行一下看效果:

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

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

转载地址:http://bivfm.baihongyu.com/

你可能感兴趣的文章
CF666E. Forensic Examination
查看>>
apue第16章笔记
查看>>
Nvidia Driver
查看>>
NIO 相关解析
查看>>
Loj #2304. 「NOI2017」泳池
查看>>
面试技巧,如何通过索引说数据库优化能力,内容来自Java web轻量级开发面试教程...
查看>>
Python实现:某个用户登录后,查看自己拥有所有权限
查看>>
iOS微信朋友圈 评论点击姓名功能
查看>>
Servlet和模本办法
查看>>
static和final修饰方法
查看>>
读《认知三部曲》
查看>>
关于SVN 目录结构
查看>>
tp5页面输出时,搜索后跳转下一页的处理
查看>>
crontab命令
查看>>
面试问题
查看>>
DeltaBlue基准测试显示 Dart2js生成的JavaScript代码优于手写代码
查看>>
cvReleaseImage()函数说明
查看>>
linux下查看某个文件属于哪个包
查看>>
Weui 文件上传完整版示例
查看>>
ubuntu上安装 MySQL 启动/停止 连接MySQL
查看>>