expect module hangs

79 views
Skip to first unread message

Daley Okuwa

unread,
Mar 6, 2018, 12:15:13 PM3/6/18
to Ansible Project
Hello

I have a config to copy config to a tftp server
but with the expect module 
it just hangs no error 
it logs it successful with telnet( I can see it in the logs) but does not copy ( I have tested it manually with ftp)
please tell me where I am going wrong 

---
- hosts: cisco
  connection: local
  gather_facts: yes
  ignore_errors: yes
  tasks:
    - name: run show command via Telnet using the expect module
      expect:
       command: telnet 10.101.250.12
       responses:
         Username: admin
         Password: xxxxx
         POD2_C3560#:
           command: copy running-config ftp
           responses:
           Address or name of remote host []?: 10.241.11.237
           Destination filename [pod2_c3560-confg]?: pod2_c3560-confg
           command: exit

Brian Coca

unread,
Mar 6, 2018, 1:06:28 PM3/6/18
to Ansible Project
Probably due to an unexpected output? Also you might want to try the
telnet module to communicate directly.



--
----------
Brian Coca

Kai Stian Olstad

unread,
Mar 6, 2018, 2:19:42 PM3/6/18
to ansible...@googlegroups.com
It looks like you are trying with levels of responses, that is not supported.
prompt bellow is also called question as in the documentation.

- expect:
command: tel...
responses:
prompt-1: answer-1
prompt-2: answer-2
prompt-3:
- answer-3
- answer-4
prompt-4:
- anser-5

When an prompt appears more than once you need a list of answers like prompt-3 about, the first time it sees prompt-3 expect will respond with answer-3, the nest time it sees prompt-3 it will respond with answer-4.
The prompt/question is regex, so all regex special character like ()[]? need to be escaped if you have those character in that in the prompt.

It you don't get it working with this you need to provide the complete output when you do this manually.

--
Kai Stian Olstad

Daley Okuwa

unread,
Mar 7, 2018, 5:26:32 AM3/7/18
to Ansible Project
thanks

when I run this I also get error message after amending the yaml script

---
- hosts: cisco
  connection: local
  gather_facts: yes
  ignore_errors: yes
  tasks:
    - name: run show command via Telnet using the expect module
      expect:
       command: telnet 10.101.250.12
       responses:
         Username: admin
         Password: xxxxxx
       command: copy running-config ftp
         Address or name of remote host:
           -  10.241.11.237
         Destination filename pod2_c3560-confg:
           -  pod2_c3560-confg
         command: exit


Error message
ERROR! Syntax Error while loading YAML.

The error appears to have been in '/etc/ansible/backup-cisconew12-ine 14, column 40, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
       command: copy running-config ftp
         Address or name of remote host:
                                       ^ here
exception type: <class 'yaml.scanner.ScannerError'>
exception: mapping values are not allowed in this context

  in "<unicode string>", line 14, column 40

Kai Stian Olstad

unread,
Mar 7, 2018, 6:39:04 AM3/7/18
to ansible...@googlegroups.com
On 07.03.2018 11:26, 'Daley Okuwa' via Ansible Project wrote:
> thanks
>
> when I run this I also get error message after amending the yaml script
>
> ---
> - hosts: cisco
> connection: local
> gather_facts: yes
> ignore_errors: yes
> tasks:
> - name: run show command via Telnet using the expect module
> expect:
> command: telnet 10.101.250.12
> responses:
> Username: admin
> Password: xxxxxx
> command: copy running-config ftp
> Address or name of remote host:
> - 10.241.11.237
> Destination filename pod2_c3560-confg:
> - pod2_c3560-confg
> command: exit
>

You can only have one command: in expect.

If command is a prompt its not correctly indented.
And one prompt can only be listed once, the different responses is a
list to that prompt.

If you would like more help you _need_ to provide the complete output
when you do this task manually, without it this is futile.

--
Kai Stian Olstad

Daley Okuwa

unread,
Mar 7, 2018, 6:40:19 AM3/7/18
to Ansible Project
Hi,

I have just done this manually on the switch and it worked

User Access Verification
Username: admin
Password:
POD2_C3560#copy running-config ftp:

Address or name of remote host []? 10.241.11.237
Destination filename [pod2_c3560-confg]?
Writing pod2_c3560-confg !!
8063 bytes copied in 1.108 secs (7277 bytes/sec)
POD2_C3560#

Thanks




On Tuesday, March 6, 2018 at 7:19:42 PM UTC, Kai Stian Olstad wrote:

Kai Stian Olstad

unread,
Mar 7, 2018, 7:34:11 AM3/7/18
to ansible...@googlegroups.com
On 07.03.2018 12:40, 'Daley Okuwa' via Ansible Project wrote:
> Hi,
>
> I have just done this manually on the switch and it worked
>
> User Access Verification
> Username: admin
> Password:
> POD2_C3560#copy running-config ftp:
> Address or name of remote host []? 10.241.11.237
> Destination filename [pod2_c3560-confg]?
> Writing pod2_c3560-confg !!
> 8063 bytes copied in 1.108 secs (7277 bytes/sec)
> POD2_C3560#

I think you forgot the exit at the end, so I included it.

- name: run show command via Telnet using the expect module
expect:
command: telnet 10.101.250.12
responses:
Username: admin
Password: xxxxx
POD2_C3560#:
- copy running-config ftp
- exit
Address or name of remote host \[\]\?: 10.241.11.237
Destination filename \[.*\]\?: ''


The '' is the same as just pressing enter.
I have escaped []? with backslash since they are character with meaning
in regex.
Since the prompt POD2_C3560# comes up two times this is a list with the
responses.



--
Kai Stian Olstad

Daley Okuwa

unread,
Mar 7, 2018, 12:40:58 PM3/7/18
to Ansible Project
Hi,

A big thanks you it worked

Very Much appreciated 
Reply all
Reply to author
Forward
0 new messages