expect with duplicated responses

17 views
Skip to first unread message

John Harmon

unread,
Mar 1, 2019, 4:47:46 PM3/1/19
to Ansible Project
When using the following (first time using expect) I have many responses with the same prompt.  I took care of the first 20 of them as you can see below, however, the same prompt comes up again later during the install.  I get complaints about duplicate values and the installer fails.  How can I work around this (I wish this particular installer had a response file to configure that wasn't garbage)

Error:
 [WARNING]: While constructing a mapping from /etc/ansible/role/agent-install/tasks/main.yml, line 27, column 7, found a duplicate dict key (PRESS <ENTER> TO CONTINUE:). Using last defined value only.


Code:
- name: Execute the installer
  expect
:
    command
: "{{ directory }}/setup.bin"
    responses
:
     
'PRESS <ENTER> TO CONTINUE:':
       
- ""
       
- ""
       
- ""
       
- ""
       
- ""
       
- ""
       
- ""
       
- ""
       
- ""
       
- ""
       
- ""
       
- ""
       
- ""
       
- ""
       
- ""
       
- ""
       
- ""
       
- ""
       
- ""
       
- ""
     
# The above command being repeated should be sufficient, but adding a couple of more
     
# just in case.  Having extras in this case will not hurt
       
- ""
       
- ""
     
'DO YOU ACCEPT THE TERMS OF THIS LICENSE AGREEMENT? \(Y/N\):': "Y"
     
'ENTER AN ABSOLUTE PATH, OR PRESS <ENTER> TO ACCEPT THE DEFAULT:': ""
     
'Manager IP or hostname: :': 1.1.1.1
     
'Manager Install Port \(default 12345\) : :': ""
     
'Manager Secure Port \(default 23456\) : :': ""
     
'PRESS <ENTER> TO CONTINUE:':
       
- ""
       
- ""
     
'PRESS <ENTER> TO EXIT THE INSTALLER:': ""


John Harmon

unread,
Mar 1, 2019, 4:52:58 PM3/1/19
to Ansible Project
turns out I can't use this anyway due to the version of pexpect (booh!), but I would still like to know the answer for future use.

Kai Stian Olstad

unread,
Mar 1, 2019, 4:55:13 PM3/1/19
to ansible...@googlegroups.com
On 01.03.2019 22:47, John Harmon wrote:
> When using the following (first time using expect) I have many responses
> with the same prompt. I took care of the first 20 of them as you can see
> below, however, the same prompt comes up again later during the install. I
> get complaints about duplicate values and the installer fails. How can I
> work around this (I wish this particular installer had a response file to
> configure that wasn't garbage)
>
> Error:
> [WARNING]: While constructing a mapping from /etc/ansible/role/agent-
> install/tasks/main.yml, line 27, column 7, found a duplicate dict key (PRESS
> <ENTER> TO CONTINUE:). Using last defined value only.

As the error say, you can only have one "PRESS <ENTER> TO CONTINUE:" so all the reposes must be merged into one.
responses is a dictionary, and dict can only have unique keys.


--
Kai Stian Olstad

John Harmon

unread,
Mar 1, 2019, 4:57:02 PM3/1/19
to Ansible Project
So, is this even possible in this situation where the same key comes up later?

Kai Stian Olstad

unread,
Mar 1, 2019, 5:05:20 PM3/1/19
to ansible...@googlegroups.com
Yes, you just add all the responses under the same key.
Responses don't need to be in the order they occurs, when expect sees the string(key) it takes the next element in the list(value) of that key.


--
Kai Stian Olstad

John Harmon

unread,
Mar 1, 2019, 5:08:57 PM3/1/19
to Ansible Project
Nice!  I wasn't aware of that.  I wasn't liking how large that expect task was getting.  Thanks!

Reply all
Reply to author
Forward
0 new messages