Ansible network

80 views
Skip to first unread message

SK

unread,
Nov 17, 2017, 2:42:23 AM11/17/17
to Ansible Project
Hi,

I am using Ansible for the first time to test basic commands on Network devices.  When I run the playbook, I am encountering errors even though the configuration looks normal.  Below is the OS of my source machine where Ansible is installed:

CentOS Linux release 7.3.1611 (Core)

My ansible version is below:

ansible 2.3.2.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = Default w/o overrides
  python version = 2.7.5 (default, Nov  6 2016, 00:28:07) [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]

the config.yml file I am using to test is below:

---
  - name: DEPLOY SNMP CONFIGURATIONS
    hosts: mgmt
    gather_facts: False
    connection: local
    vars_files:
    - creds.yml

    tasks:

      -name: configure provider
       set_fact:
         provider:
           username: "{{username}}"
           password: "{{password}}"
           host: "{{inventory_hostname}}"

      - name: DEPLOY SNMP COMMANDS WITHIN PB
        ios_config:
          commands:
            - snmp-server community Test1ng rw

The content of creds.yml file is below:

username: xxxxx
password: xxxxx

grep inventory ansible.cfg
inventory      = /etc/ansible/inventory

The content of the inventory file is below
[mgmt]
sltnrmgmt

Error message I am noticing:

ansible-playbook -vvvv configs.yml
Using /etc/ansible/ansible.cfg as config file
ERROR! Syntax Error while loading YAML.


The error appears to have been in '/etc/ansible/configs.yml': line 12, column 16, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

      -name: configure provider
       set_fact:
               ^ here

The set_fact seems to be defined the way it should be.  Appreciate any help on this.

Other details I am yet to figure out:

How does Ansible communicate with Network devices by default in version 2.3?  Do I need to setup any SSH keys on the Cisco Network device?

Pshem Kowalczyk

unread,
Nov 17, 2017, 4:16:24 AM11/17/17
to ansible...@googlegroups.com
Hi,

You need a space between the dash '-' and 'name:' in the task list. 
I suggest you find a text editor that supports YAML validation to make your life easier.

kind regards
Pshem



--
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/a58e6bb6-4e54-4c3c-94cd-faabddad33d2%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

SK

unread,
Nov 21, 2017, 12:39:00 AM11/21/17
to Ansible Project
Thank you for the suggestion about dash before name.  I have updated that and still receive the same error.  The error is pointing towards set_fact. I will take a look into text editors for YAML.

ansible-playbook -vvvv configs.yml
Using /etc/ansible/ansible.cfg as config file
ERROR! Syntax Error while loading YAML.


The error appears to have been in '/etc/ansible/configs.yml': line 12, column 8, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

      - name: configure provider
       set_fact:
       ^ here

Pshem Kowalczyk

unread,
Nov 21, 2017, 2:31:43 AM11/21/17
to ansible...@googlegroups.com
Now the issue is caused by indentation:

- name: configure provider
   set_fact:

set_fact must start at the same position as 'name' above it.

kind regards
Pshem


SK

unread,
Nov 22, 2017, 2:58:41 AM11/22/17
to Ansible Project
Hi Pshem,

Thank you again for the assistance, the indentation problem is now solved and the playbook is running, but with errors.  I am back to the original question.  How does ansible connect to the network device?  Is it just username/password in the ansible configuration or do I need to setup any ssh keys on the Cisco network device for the Linux host running ansible to authenticate to device?

I ran the playbook command with -vvvv option as well and almost similar error in addition to "open_shell() returned 255  failed to connect to control socket"

Host#ansible-playbook  configs.yml

PLAY [DEPLOY SNMP CONFIGURATIONS] ************************************************************************************************************************************************************************************************************

TASK [configure provider] ********************************************************************************************************************************************************************************************************************
ok: [sltnrmgmt]

TASK [DEPLOY SNMP COMMANDS WITHIN PB] ********************************************************************************************************************************************************************************************************
fatal: [sltnrmgmt]: FAILED! => {"changed": false, "failed": true, "msg": "unable to open shell. Please see: https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell", "rc": 255}
        to retry, use: --limit @/etc/ansible/configs.retry

PLAY RECAP ***********************************************************************************************************************************************************************************************************************************
sltnrmgmt      : ok=1    changed=0    unreachable=0    failed=1

Pshem Kowalczyk

unread,
Nov 22, 2017, 3:35:38 AM11/22/17
to ansible...@googlegroups.com
Hi,

Try this:

- name: DEPLOY SNMP COMMANDS WITHIN PB
  delegate_to: localhost
  ios_config:
     provider: "{{ provider }}"
     commands:
       - snmp-server community Test1ng rw
   

(this is not tested)

kind regards
Pshem


SK

unread,
Nov 23, 2017, 2:12:18 AM11/23/17
to Ansible Project
Excellent!  This worked now.  What did this delegate_to command actually do?  Did the provider under ios_config call the provider variables written already?

Pshem Kowalczyk

unread,
Nov 23, 2017, 2:19:48 AM11/23/17
to ansible...@googlegroups.com
Hi,

delegate_to forces the action to be carried out on the given host (in this case localhost). AFAIK all network commands must be executed on the controller (since usually the network devices don't have a python interpreter). 
Yes, specifying provider like that refers to a variable, in this case a fact that you've set (which is a form of variable too).

kind regards
Pshem


Reply all
Reply to author
Forward
0 new messages