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

191 views
Skip to first unread message

Andrea Francesco Speziale

unread,
Aug 29, 2016, 10:24:57 AM8/29/16
to Ansible Project

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

Kai Stian Olstad

unread,
Aug 29, 2016, 11:05:35 AM8/29/16
to ansible...@googlegroups.com
On 26. aug. 2016 11:16, Andrea Francesco Speziale wrote:
> 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

Since responses is regex, you need to escape all the regex special
character with a backspace that you mean literally.

--
Kai Stian Olstad
Reply all
Reply to author
Forward
0 new messages