Quo*_*Lap 3 linux bash shell ansible
我正在使用ansible 1.9.4在服务器上运行shell bash,我遇到了麻烦.例如,我有一个名为jdk-1_5_0_22-linux-amd64.bin的jdk文件 ,我想做一些像下面的命令来安装java:
./jdk-1_5_0_22-linux-amd64.bin
Run Code Online (Sandbox Code Playgroud)
但是当我运行此命令时,屏幕显示许可协议,并询问我"按空格键或输入"滚动它,然后按"是"确认.
或者当我尝试运行包含以下内容的shell bash时:
echo "restart ntp ?[y/n]"
read check
Run Code Online (Sandbox Code Playgroud)
我已经通过shell,脚本,命令模块在ansible中尝试了它,但它没有为我运行,ansible被暂停了.看起来ansible正在等待我的中断动作.我怎样才能做到这一点?我在文档中的任何地方都找不到它.
您可以使用yes
(参见:) man yes
或expect
.而yes
不断向任何过程发送答案:
yes | install.sh
Run Code Online (Sandbox Code Playgroud)
expect
将监听期望输出,然后相应地发送回复.
(安装expect
,apt-get install expect
,yes
应该是你的Linux发行版的一部分的话)
#!/usr/bin/expect
set timeout 10
spawn ./jdk-1_5_0_22-linux-amd64.bin
expect "Input your name:"
send "Quoc Lap\r"
interact
Run Code Online (Sandbox Code Playgroud)
如果jdk安装过程要求,这个小脚本将输出你的名字"input your name:"
.请注意,名称字符串以返回字符结尾\r
interact
将确保关闭并发送正确的退出代码.
man expect
将为您提供有关如何处理更复杂流程的示例和信息.
最后
你的ansible playbook将需要调用上面的脚本
- name: Install Java JDK (automatic install)
shell: ./jdk_install.sh
args:
chdir=/path/to/your/script
Run Code Online (Sandbox Code Playgroud)
如果您不需要从特定位置运行,只需添加shell操作的路径并删除args-part.