Question about using the expect module

56 views
Skip to first unread message

Sher Chowdhury

unread,
Jun 13, 2016, 12:47:05 PM6/13/16
to Ansible Project
I have an interactive command that prompts me enter a series of letters, b, d, and y. I was wondering if it is possible to run something like this:
- expect:
    command: /path/to/custom/command
    responses:
        - b
        - d
        - y
I don't need to do any regex matching, I just need to pass these letters in.
Although I would like to do regex matching if that is possible with my version of ansible, by the way, my verion of ansible is:
$ ansible --version
ansible 2.0.2.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = Default w/o overrides
Thanks 
Sher

Matt Martz

unread,
Jun 13, 2016, 12:58:19 PM6/13/16
to ansible...@googlegroups.com
Expect works off of text to expect and a string to send.  I tend to think of them as questions and answers.

You are required to provide both.  At minimum I guess you could do something like:

- expect:
    command: /path/to/custom/command
    responses:
        ".*": 
            - b
            - d
            - y

That will answer with those letters, in order, based on any match.

--
You received this message because you are subscribed to the Google Groups "Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ansible-proje...@googlegroups.com.
To post to this group, send email to ansible...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/ab584dff-8c7a-431e-bbc5-5f637cf47323%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.



--
Matt Martz
@sivel
sivel.net

Sher Chowdhury

unread,
Jun 14, 2016, 6:13:00 AM6/14/16
to Ansible Project
Hi Matt,

That didn't work for me because I am using an older version of ansible, and I think what you described is for version 2.1+

However your suggestion made me realize that my understanding of how the expect module works was fundamentally wrong to begin with. I now figured out what I needed to do. In my case I'm doing an unattended (silent) upgrade of confluence, and I am using:


- expect:
    command: /tmp/atlassian-confluence-5.10.0-x64.bin
    responses:
      "This will install Confluence": o
      "Upgrade an existing Confluence installation": '3'
      "Existing installation directory": /opt/atlassian/confluence
      "Back up Confluence home": n
      "List of modifications made within Confluence directories.": ' '
      "Do you want to proceed": u
    timeout: 300

I now realize that "responses" operates a bit like a case statement, whereas I thought it was working as a dumb sequence of inputs.

Thank you for your help. 

Kind regards,
Sher 
Reply all
Reply to author
Forward
0 new messages