Ansible Expect 模块无法匹配字符串/正则表达式脚本问题 [英] Ansible Expect module can't match string/regex script questions

查看:35
本文介绍了Ansible Expect 模块无法匹配字符串/正则表达式脚本问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


我正在尝试通过 Ansible 在 Vagrant 机器上自动安装脚本.

我尝试了很多在网络上找到解决方案,但文档和示例非常薄弱.


I'm trying to automate a script installation through Ansible in a Vagrant machine.

I tried a lot to find a solution across the web but the documentation and the examples are very weak.

我尝试安装的脚本会提示我尝试使用 Ansible Expect 模块 以编程方式回答的问题.

That script I'm trying to install is prompting questions that I'm trying to answer programmatically with the Ansible Expect Module.

Ansible 任务:

- 名称:运行 Lisk 安装"
  变成:真
  become_user: vagrant
  期望:
     命令:bash installLisk.sh install -r {{env}}
     回复:
         '您要将应用链安装到哪里?(默认/home/vagrant)': "/home/vagrant"
         '要安装NTP吗?(y/n):': "y"
      回声:是

Ansible Task:

- name: "Running Lisk installation"
  become: True
  become_user: vagrant
  expect:
      command: bash installLisk.sh install -r {{env}}
      responses:
            'Where do you want to install Lisk to? (Default /home/vagrant)': "/home/vagrant"
            'Would like to install NTP? (y/n):': "y"
      echo: yes

它似乎无法识别问题或答案,这是我从配置中返回的错误

任务 [lisk : 运行 Lisk 安装] ********************************************

致命:[默认]:失败!=> {
改变":真,
"cmd": "bash installLisk.sh install -r test",
"delta": "0:00:30.137468",
"end": "2016-08-26 08:18:46.740017",
失败":真,
"rc": null,
开始":2016-08-26 08:18:16.602549",

It seems it can't recognize the question or the answer, this is the error I'm getting back from the provisioning

TASK [lisk : Running Lisk installation] ****************************************

fatal: [default]: FAILED! => {
"changed": true,
"cmd": "bash installLisk.sh install -r test",
"delta": "0:00:30.137468",
"end": "2016-08-26 08:18:46.740017",
"failed": true,
"rc": null,
"start": "2016-08-26 08:18:16.602549",

"stdout": "检查先决条件:\r\n
Curl 已安装.\t\t\t\t\t\u001b[32mPassed\u001b(B\u001b[m\r\n
Tar 已安装.\t\t\t\t\t\u001b[32mPassed\u001b(B\u001b[m\r\n
wget 已安装.\t\t\t\t\t\u001b[32mPassed\u001b(B\u001b[m\r\n
Sudo 已安装并通过身份验证.\t\t\t\u001b[32mPassed\u001b(B\u001b[m\r\n\
u001b[32m所有先决条件通过!\u001b(B\u001b[m\r\n
你想把 Lisk 安装到哪里?(默认/home/vagrant): ",

"stdout": "Checking prerequisites:\r\n
Curl is installed.\t\t\t\t\t\u001b[32mPassed\u001b(B\u001b[m\r\n
Tar is installed.\t\t\t\t\t\u001b[32mPassed\u001b(B\u001b[m\r\n
Wget is installed.\t\t\t\t\t\u001b[32mPassed\u001b(B\u001b[m\r\n
Sudo is installed and authenticated.\t\t\t\u001b[32mPassed\u001b(B\u001b[m\r\n\
u001b[32mAll preqrequisites passed!\u001b(B\u001b[m\r\n
Where do you want to install Lisk to? (Default /home/vagrant): ",

"stdout_lines": [
"检查先决条件:",
"Curl 已安装.\t\t\t\t\t\u001b[32mPassed\u001b(B\u001b[m",
"Tar 已安装.\t\t\t\t\t\u001b[32mPassed\u001b(B\u001b[m",
"Wget 已安装.\t\t\t\t\t\u001b[32mPassed\u001b(B\u001b[m",
"Sudo 已安装并通过身份验证.\t\t\t\u001b[32mPassed\u001b(B\u001b[m",
"\u001b[32m所有先决条件通过!\u001b(B\u001b[m",
你想把 Lisk 安装到哪里?(默认/home/vagrant):
]}

谢谢提前

"stdout_lines": [
"Checking prerequisites:",
"Curl is installed.\t\t\t\t\t\u001b[32mPassed\u001b(B\u001b[m",
"Tar is installed.\t\t\t\t\t\u001b[32mPassed\u001b(B\u001b[m",
"Wget is installed.\t\t\t\t\t\u001b[32mPassed\u001b(B\u001b[m",
"Sudo is installed and authenticated.\t\t\t\u001b[32mPassed\u001b(B\u001b[m",
"\u001b[32mAll preqrequisites passed!\u001b(B\u001b[m",
"Where do you want to install Lisk to? (Default /home/vagrant): "
]}

Thank you all guys in advance

推荐答案

expect 模块中的响应是正则表达式,所以问号有特殊含义.
您可以简单地使用:

Responses in expect module are regular expressions, so question marks have special meanings.
You can simply use:

- expect:
    command: bash installLisk.sh install -r {{env}}
    responses:
      'install Lisk to': '/home/vagrant'
      'install NTP': 'y'
    echo: yes

这篇关于Ansible Expect 模块无法匹配字符串/正则表达式脚本问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆