Question about using the expect module

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

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.

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