How to use regex to match a response using the expect module

1,036 views
Skip to first unread message

David Williams

unread,
Feb 27, 2017, 6:57:16 PM2/27/17
to Ansible Project
I am stumped...I have been trying to use the expect module and format the expected response as a regex that can match multiple responses.   I see posts all over where people are trying to match the response exactly and have to escape the regex special characters.  It seems nobody writes regex to match multiple responses.  Is this not possible?

Playbook

- name: Clear Permissions on /var/etc/pam.conf
  hosts: juniper_ex4200
  tasks:
    - name: Access member 0
      expect:
        command: 'request session member 0'
        responses: "^---\sJUNOS.+\n(warning.+\n){5}\{((backup)|(linecard)):((1)|(2))\}": "start shell user root"


Error

ERROR! Syntax Error while loading YAML.


The error appears to have been in '/home/dwilliams/ex4200_permissions_clear/ex4200_permissions_clear': line 8, column 25, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

        command: 'request session member 0'
        responses: "^---\sJUNOS.+\n(warning.+\n){5}\{((backup)|(linecard)):((1)|(2))\}"
                        ^ here
This one looks easy to fix.  It seems that there is a value started
with a quote, and the YAML parser is expecting to see the line ended
with the same kind of quote.  For instance:

    when: "ok" in result.stdout

Could be written as:

   when: '"ok" in result.stdout'

Or equivalently:

   when: "'ok' in result.stdout"

Matt Clay

unread,
Feb 28, 2017, 1:22:13 AM2/28/17
to Ansible Project
David,

I know this isn't what you asked, but since it looks like you're working with JUNOS I thought I'd check to see if you've already looked at Ansible's JUNOS support:

https://docs.ansible.com/ansible/list_of_network_modules.html#junos

 - Matt

David Williams

unread,
Feb 28, 2017, 7:59:38 AM2/28/17
to Ansible Project
Thank you Matt, I have looked at the modules but I'm trying to drop down into the linux shell and change some file permissions within the directory structure.  It doesn't look like the module can do that.  Thanks for trying though!  Any help is always appreciated.

Ganesh Nalawade

unread,
Mar 1, 2017, 10:00:37 AM3/1/17
to ansible...@googlegroups.com
Hi David,

Changing the yml file as below at least loads the file. As per docs the key under responses is python regex so I think it should work.
- name: Access member 0
expect:
command: 'request session member 0'
responses:
^---\sJUNOS.+\n(warning.+\n){5}\{((backup)|(linecard)):((1)|(2))\}: start shell user root

However, I am trying to understand the need to use 'expect' module to run junos operational command.
Can't it be run using 'junos_command' module? Does running this command prompts for an interactive input?

Regards,
Ganesh

--
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-project+unsubscribe@googlegroups.com.
To post to this group, send email to ansible-project@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/8953d535-057d-48ea-8908-157fd4cb2cdb%40googlegroups.com.

For more options, visit https://groups.google.com/d/optout.

Reply all
Reply to author
Forward
0 new messages