The goal of this post is to provide you with a simple way to utilize Ansible 2.x and obtain data from Cisco IOS devices by running “show” commands. Github Reference.
Ansible Installation:
Before starting, make sure you have ansible installed.
Create a working directory:
mkdir ansible_play
cd ansible_play
Create the following 4 files within the “ansible_play” directory:
ansible.cfg
hosts
secrets.yml
show_code.yml
Among the 4 files provided in this example, the “hosts” and “secrets.yml” file would have to be altered to suit your requirements. The other 2 files, “ansible.cfg” and “show_code.yml” can be used as-is.
The contents of the above files will be like this:
$ cat ansible.cfg
[defaults]
hostfile = ./hosts
host_key_checking=False
timeout = 5
For now, use the contents as provided above for the “ansible.cfg” file.
$ cat hosts
[ios]
switch1
The hosts file will have the switches/routers that you would like to use for running the ansible-playbook. In my case, I am using “switch1”. The 1st line “[ios]” is the name of the hosts that will be referenced in the ansible-playbook.
$ cat secrets.yml
---
creds:
username: cisco
password: ciscopassword
auth_pass: ciscoauth
This file contains the login information required to access the devices in the hosts file.
$ cat show_code.yml
---
- hosts: ios
gather_facts: no
connection: local
tasks:
- name: OBTAIN LOGIN CREDENTIALS
include_vars: secrets.yml
- name: DEFINE PROVIDER
set_fact:
provider:
host: "{{ inventory_hostname }}"
username: "{{ creds['username'] }}"
password: "{{ creds['password'] }}"
auth_pass: "{{ creds['auth_pass'] }}"
- name: SHOW VERSION
ios_command:
provider: "{{ provider }}"
commands:
- show version | i Version
register: write
- debug: var=write.stdout_lines
Executing the ansible playbook:
$ ansible-playbook show_code.yml
PLAY [ios] *********************************************************************
TASK [OBTAIN LOGIN CREDENTIALS] ************************************************
ok: [switch1]
TASK [DEFINE PROVIDER] *********************************************************
ok: [switch1]
TASK [SHOW VERSION] ************************************************************
ok: [switch1]
TASK [debug] *******************************************************************
ok: [switch1] => {
"write.stdout_lines": [
[
"Cisco IOS Software, Catalyst 4500 L3 Switch Software (cat4500e-ENTSERVICESK9-M), Version 15.2(2)E3, RELEASE SOFTWARE (fc3)"
]
]
}
PLAY RECAP *********************************************************************
switch1 : ok=4 changed=0 unreachable=0 failed=0