首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Ansible Playbook运行交互式脚本并正确选择响应

问使用Ansible Playbook运行交互式脚本并正确选择响应
EN

Stack Overflow用户
提问于 2020-10-01 03:21:43
回答 1查看 2.2K关注 0票数 2

我需要运行一个交互式脚本,让应用程序客户端安装在我的服务器上使用Ansible剧本。在安装过程中,它询问IP地址、端口号、服务器名称、用户名和密码。

代码语言:javascript
复制
- name: Install application client
  hosts: all
  tasks:  Run the script
  - name: Execute the user interactive script                                                                  
    command: /home/ansible/install.sh

下面提示您作出答复

代码语言:javascript
复制
Enter IP: **1.2.3.4**
Enter Port: **440**
Enter Server Name: **AppServerName**
Connectivity Succeeded
Enter Username: **UserName**
Enter Password: **xxxx**

我想知道我们如何在剧本中预先定义这些反应,并在它提示的时候选择它?

谢谢你,让·托马斯

EN

回答 1

Stack Overflow用户

发布于 2020-10-06 04:11:11

加上这个作为答案。正如您试图运行的shell脚本“期望”一些响应一样,我们需要使用Linux expect提供这些响应。

假设我们有一个简单的shell脚本test.sh,如下所示。它获取IP地址和端口,然后运行nc命令:

代码语言:javascript
复制
#!/bin/bash

echo "IP address:"
read ip_addr

echo "Port:"
read port

nc -vz $ip_addr $port

要使用expect从Ansible运行这个脚本,那么我们将有一个简单的剧本,如下所示:

代码语言:javascript
复制
- 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/expect

Linux expect本身就是一种脚本语言,上面的内容是Ansible shell任务中的一个简单的.exp脚本。我认为我们只能在一开始就设置timeout。有关所有受支持的选项,请参见命令页。

还有一个有用的autoexpect命令将为我们创建一个script.exp脚本。示例:

代码语言:javascript
复制
autoexpect test.sh
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64148605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档