我需要运行一个交互式脚本,让应用程序客户端安装在我的服务器上使用Ansible剧本。在安装过程中,它询问IP地址、端口号、服务器名称、用户名和密码。
- name: Install application client
hosts: all
tasks: Run the script
- name: Execute the user interactive script
command: /home/ansible/install.sh下面提示您作出答复
Enter IP: **1.2.3.4**
Enter Port: **440**
Enter Server Name: **AppServerName**
Connectivity Succeeded
Enter Username: **UserName**
Enter Password: **xxxx**我想知道我们如何在剧本中预先定义这些反应,并在它提示的时候选择它?
谢谢你,让·托马斯
发布于 2020-10-06 04:11:11
加上这个作为答案。正如您试图运行的shell脚本“期望”一些响应一样,我们需要使用Linux expect提供这些响应。
假设我们有一个简单的shell脚本test.sh,如下所示。它获取IP地址和端口,然后运行nc命令:
#!/bin/bash
echo "IP address:"
read ip_addr
echo "Port:"
read port
nc -vz $ip_addr $port要使用expect从Ansible运行这个脚本,那么我们将有一个简单的剧本,如下所示:
- hosts: localhost
vars:
send_ip_addr: "1.2.3.4"
send_port: "22"
tasks:
- shell: |
spawn ./test.sh
expect "IP address:"
send -- "{{ send_ip_addr }}\n"
expect "Port:"
send -- "{{ send_port }}\n"
expect eof
args:
executable: /usr/bin/expectLinux expect本身就是一种脚本语言,上面的内容是Ansible shell任务中的一个简单的.exp脚本。我认为我们只能在一开始就设置timeout。有关所有受支持的选项,请参见命令页。
还有一个有用的autoexpect命令将为我们创建一个script.exp脚本。示例:
autoexpect test.shhttps://stackoverflow.com/questions/64148605
复制相似问题