Ansible Expect module can't match string/regex script questions

我怕爱的太早我们不能终老 提交于 2019-12-10 23:11:31

问题



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.

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

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

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": "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": [
"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


回答1:


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


来源:https://stackoverflow.com/questions/39161979/ansible-expect-module-cant-match-string-regex-script-questions

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!