Ansible network

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:

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

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

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

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

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

Excellent! This worked now. What did this delegate_to command actually do? Did the provider under ios_config call the provider variables written already?

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