Skip to content

Instantly share code, notes, and snippets.

@jtdub
Last active October 31, 2015 01:05
Show Gist options
  • Save jtdub/9fddec6d846585e03f00 to your computer and use it in GitHub Desktop.
Save jtdub/9fddec6d846585e03f00 to your computer and use it in GitHub Desktop.
sample playbook
---
- name: test command module as audit
hosts: netdevices
gather_facts: False
connection: local
tasks:
- name: gather facts
ntc_show_command:
connection: ssh
platform: "{{ platform }}"
username: "{{ username }}"
password: "{{ password }}"
host: "{{ inventory_hostname }}"
command: show ip interface brief
register: facts
- debug: var={{ item }}
with_items: facts.response
when: item.intf == 'Loopback0'
register: loopbacks
- debug: var="{{ loopbacks }}"
@jtdub
Copy link
Author

jtdub commented Oct 31, 2015

(ntc)jtdub-macbook:ntc-ansible jtdub$ ansible-playbook -i test-hosts cmd-test.yml 

PLAY [test command module as audit] ******************************************* 

TASK: [gather facts] ********************************************************** 
ok: [darkstar]
ok: [core1a]

TASK: [debug var={{ item }}] ************************************************** 
skipping: [darkstar] => (item={u'status': u'down', u'intf': u'Async1', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [darkstar] => (item={u'status': u'up', u'intf': u'FastEthernet0', u'ipaddr': u'70.121.134.31', u'proto': u'up'})
skipping: [core1a] => (item={u'status': u'administratively down', u'intf': u'Vlan1', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [darkstar] => (item={u'status': u'up', u'intf': u'FastEthernet1', u'ipaddr': u'172.16.0.34', u'proto': u'up'})
skipping: [core1a] => (item={u'status': u'up', u'intf': u'Vlan2', u'ipaddr': u'172.16.0.65', u'proto': u'down'})
skipping: [darkstar] => (item={u'status': u'up', u'intf': u'FastEthernet2', u'ipaddr': u'unassigned', u'proto': u'up'})
skipping: [core1a] => (item={u'status': u'up', u'intf': u'Vlan3', u'ipaddr': u'172.16.1.129', u'proto': u'up'})
skipping: [darkstar] => (item={u'status': u'up', u'intf': u'FastEthernet3', u'ipaddr': u'unassigned', u'proto': u'up'})
skipping: [core1a] => (item={u'status': u'up', u'intf': u'Vlan50', u'ipaddr': u'172.16.1.1', u'proto': u'up'})
skipping: [core1a] => (item={u'status': u'up', u'intf': u'Vlan51', u'ipaddr': u'172.16.1.65', u'proto': u'down'})
skipping: [darkstar] => (item={u'status': u'up', u'intf': u'FastEthernet4', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'up', u'intf': u'Vlan52', u'ipaddr': u'172.16.1.193', u'proto': u'down'})
skipping: [darkstar] => (item={u'status': u'up', u'intf': u'FastEthernet5', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'up', u'intf': u'FastEthernet1/0/1', u'ipaddr': u'172.16.0.33', u'proto': u'up'})
skipping: [darkstar] => (item={u'status': u'up', u'intf': u'FastEthernet6', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'up', u'intf': u'FastEthernet1/0/2', u'ipaddr': u'unassigned', u'proto': u'up'})
skipping: [darkstar] => (item={u'status': u'up', u'intf': u'FastEthernet7', u'ipaddr': u'unassigned', u'proto': u'up'})
skipping: [core1a] => (item={u'status': u'up', u'intf': u'FastEthernet1/0/3', u'ipaddr': u'unassigned', u'proto': u'up'})
skipping: [darkstar] => (item={u'status': u'up', u'intf': u'FastEthernet8', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [darkstar] => (item={u'status': u'up', u'intf': u'FastEthernet9', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'down', u'intf': u'FastEthernet1/0/4', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'up', u'intf': u'FastEthernet1/0/5', u'ipaddr': u'unassigned', u'proto': u'up'})
ok: [darkstar] => (item={u'status': u'up', u'intf': u'Loopback0', u'ipaddr': u'172.16.0.2', u'proto': u'up'}) => {
    "item": {
        "intf": "Loopback0", 
        "ipaddr": "172.16.0.2", 
        "proto": "up", 
        "status": "up"
    }, 
    "{u'status':": "{u'status':"
}
skipping: [darkstar] => (item={u'status': u'up', u'intf': u'NVI0', u'ipaddr': u'172.16.0.2', u'proto': u'up'})
skipping: [core1a] => (item={u'status': u'down', u'intf': u'FastEthernet1/0/6', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [darkstar] => (item={u'status': u'up', u'intf': u'Tunnel0', u'ipaddr': u'172.16.0.34', u'proto': u'up'})
skipping: [core1a] => (item={u'status': u'down', u'intf': u'FastEthernet1/0/7', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [darkstar] => (item={u'status': u'up', u'intf': u'Vlan1', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'down', u'intf': u'FastEthernet1/0/8', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [darkstar] => (item={u'status': u'up', u'intf': u'Vlan2', u'ipaddr': u'172.16.2.1', u'proto': u'up'})
skipping: [core1a] => (item={u'status': u'down', u'intf': u'FastEthernet1/0/9', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [darkstar] => (item={u'status': u'up', u'intf': u'Vlan3', u'ipaddr': u'172.16.2.33', u'proto': u'up'})
skipping: [core1a] => (item={u'status': u'down', u'intf': u'FastEthernet1/0/10', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [darkstar] => (item={u'status': u'up', u'intf': u'Vlan4', u'ipaddr': u'172.16.2.129', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'down', u'intf': u'FastEthernet1/0/11', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'down', u'intf': u'FastEthernet1/0/12', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'down', u'intf': u'FastEthernet1/0/13', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'down', u'intf': u'FastEthernet1/0/14', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'down', u'intf': u'FastEthernet1/0/15', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'down', u'intf': u'FastEthernet1/0/16', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'down', u'intf': u'FastEthernet1/0/17', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'down', u'intf': u'FastEthernet1/0/18', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'down', u'intf': u'FastEthernet1/0/19', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'down', u'intf': u'FastEthernet1/0/20', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'down', u'intf': u'FastEthernet1/0/21', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'down', u'intf': u'FastEthernet1/0/22', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'up', u'intf': u'FastEthernet1/0/23', u'ipaddr': u'unassigned', u'proto': u'up'})
skipping: [core1a] => (item={u'status': u'up', u'intf': u'FastEthernet1/0/24', u'ipaddr': u'unassigned', u'proto': u'up'})
skipping: [core1a] => (item={u'status': u'down', u'intf': u'GigabitEthernet1/0/1', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'down', u'intf': u'GigabitEthernet1/0/2', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'up', u'intf': u'Port-channel11', u'ipaddr': u'unassigned', u'proto': u'up'})
ok: [core1a] => (item={u'status': u'up', u'intf': u'Loopback0', u'ipaddr': u'172.16.0.1', u'proto': u'up'}) => {
    "item": {
        "intf": "Loopback0", 
        "ipaddr": "172.16.0.1", 
        "proto": "up", 
        "status": "up"
    }, 
    "{u'status':": "{u'status':"
}

PLAY RECAP ******************************************************************** 
core1a                     : ok=2    changed=0    unreachable=0    failed=0   
darkstar                   : ok=2    changed=0    unreachable=0    failed=0 

@jedelman8
Copy link


---

- name: GET STRUCTURED DATA BACK FROM CLI DEVICES
  hosts: cisco_nxos
  connection: local
  gather_facts: False

  tasks:

    - name: GET DATA
      ntc_show_command:
        connection=ssh
        platform=cisco_nxos
        command='show vlan'
        host={{ inventory_hostname }}
        username={{ username }}
        password={{ password }}
      register: facts

    - debug: var=item
      with_items: facts.response
      when: item.vlan_id == "100"
      register: vlans

    - debug: var=vlans



resulting in this...don't mind my error for now :)

PLAY [GET STRUCTURED DATA BACK FROM CLI DEVICES] ****************************** 

TASK: [GET DATA] ************************************************************** 
failed: [n9k1] => {"failed": true, "parsed": false}
SSH connection established to 68.170.147.164:22
Interactive SSH session established
Traceback (most recent call last):
  File "/home/cisco/.ansible/tmp/ansible-tmp-1446252999.77-14248881251725/ntc_show_command", line 1853, in <module>
    main()
  File "/home/cisco/.ansible/tmp/ansible-tmp-1446252999.77-14248881251725/ntc_show_command", line 219, in main
    password=password
  File "/usr/local/lib/python2.7/dist-packages/netmiko/ssh_dispatcher.py", line 54, in ConnectHandler
    return ConnectionClass(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/netmiko/base_connection.py", line 45, in __init__
    self.session_preparation()
  File "/usr/local/lib/python2.7/dist-packages/netmiko/base_connection.py", line 61, in session_preparation
    self.set_base_prompt()
  File "/usr/local/lib/python2.7/dist-packages/netmiko/base_connection.py", line 187, in set_base_prompt
    raise ValueError("Router prompt not found: {0}".format(prompt))
ValueError: Router prompt not found: 

ok: [n9k2]

TASK: [debug var=item] ******************************************************** 
skipping: [n9k2] => (item={'status': 'active', 'name': 'default', 'vlan_id': '1'})
ok: [n9k2] => (item={'status': 'active', 'name': 'test_vlan', 'vlan_id': '100'}) => {
    "item": {
        "name": "test_vlan",
        "status": "active",
        "vlan_id": "100"
    },
    "var": {
        "item": {
            "name": "test_vlan",
            "status": "active",
            "vlan_id": "100"
        }
    }
}
skipping: [n9k2] => (item={'status': 'active', 'name': 'vlan_145_demo', 'vlan_id': '145'})

TASK: [debug var=vlans] ******************************************************* 
ok: [n9k2] => {
    "var": {
        "vlans": {
            "changed": false,
            "msg": "All items completed",
            "results": [
                {
                    "changed": false,
                    "skipped": true
                },
                {
                    "invocation": {
                        "module_args": "var=item",
                        "module_name": "debug"
                    },
                    "item": {
                        "name": "test_vlan",
                        "status": "active",
                        "vlan_id": "100"
                    },
                    "var": {
                        "item": {
                            "name": "test_vlan",
                            "status": "active",
                            "vlan_id": "100"
                        }
                    },
                    "verbose_always": true
                },
                {
                    "changed": false,
                    "skipped": true
                }
            ]
        }
    }
}

PLAY RECAP ******************************************************************** 
           to retry, use: --limit @/home/cisco/je-test.retry

n9k1                       : ok=0    changed=0    unreachable=0    failed=1   
n9k2                       : ok=3    changed=0    unreachable=0    failed=0   

@jtdub
Copy link
Author

jtdub commented Oct 31, 2015


---
- name: test command module as audit
  hosts: netdevices
  gather_facts: False
  connection: local

  tasks:

  - name: gather facts
    ntc_show_command:
      connection: ssh
      platform: "{{ platform }}"
      username: "{{ username }}"
      password: "{{ password }}"
      host: "{{ inventory_hostname }}"
      command: show ip interface brief 
    register: facts

  - set_fact:
      loopbacks: "{{ item }}"
    with_items: facts.response 
    when: item.intf == 'Loopback0'

  - debug: var=loopbacks
(ntc)jtdub-macbook:ntc-ansible jtdub$ ansible-playbook -i test-hosts cmd-test.yml 

PLAY [test command module as audit] ******************************************* 

TASK: [gather facts] ********************************************************** 
ok: [darkstar]
ok: [core1a]

TASK: [set_fact ] ************************************************************* 
skipping: [darkstar] => (item={u'status': u'down', u'intf': u'Async1', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'administratively down', u'intf': u'Vlan1', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [darkstar] => (item={u'status': u'up', u'intf': u'FastEthernet0', u'ipaddr': u'70.121.134.31', u'proto': u'up'})
skipping: [core1a] => (item={u'status': u'up', u'intf': u'Vlan2', u'ipaddr': u'172.16.0.65', u'proto': u'down'})
skipping: [darkstar] => (item={u'status': u'up', u'intf': u'FastEthernet1', u'ipaddr': u'172.16.0.34', u'proto': u'up'})
skipping: [core1a] => (item={u'status': u'up', u'intf': u'Vlan3', u'ipaddr': u'172.16.1.129', u'proto': u'up'})
skipping: [darkstar] => (item={u'status': u'up', u'intf': u'FastEthernet2', u'ipaddr': u'unassigned', u'proto': u'up'})
skipping: [core1a] => (item={u'status': u'up', u'intf': u'Vlan50', u'ipaddr': u'172.16.1.1', u'proto': u'up'})
skipping: [darkstar] => (item={u'status': u'up', u'intf': u'FastEthernet3', u'ipaddr': u'unassigned', u'proto': u'up'})
skipping: [core1a] => (item={u'status': u'up', u'intf': u'Vlan51', u'ipaddr': u'172.16.1.65', u'proto': u'down'})
skipping: [darkstar] => (item={u'status': u'up', u'intf': u'FastEthernet4', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'up', u'intf': u'Vlan52', u'ipaddr': u'172.16.1.193', u'proto': u'down'})
skipping: [darkstar] => (item={u'status': u'up', u'intf': u'FastEthernet5', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [darkstar] => (item={u'status': u'up', u'intf': u'FastEthernet6', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'up', u'intf': u'FastEthernet1/0/1', u'ipaddr': u'172.16.0.33', u'proto': u'up'})
skipping: [darkstar] => (item={u'status': u'up', u'intf': u'FastEthernet7', u'ipaddr': u'unassigned', u'proto': u'up'})
skipping: [core1a] => (item={u'status': u'up', u'intf': u'FastEthernet1/0/2', u'ipaddr': u'unassigned', u'proto': u'up'})
skipping: [darkstar] => (item={u'status': u'up', u'intf': u'FastEthernet8', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'up', u'intf': u'FastEthernet1/0/3', u'ipaddr': u'unassigned', u'proto': u'up'})
skipping: [darkstar] => (item={u'status': u'up', u'intf': u'FastEthernet9', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'down', u'intf': u'FastEthernet1/0/4', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'up', u'intf': u'FastEthernet1/0/5', u'ipaddr': u'unassigned', u'proto': u'up'})
ok: [darkstar] => (item={u'status': u'up', u'intf': u'Loopback0', u'ipaddr': u'172.16.0.2', u'proto': u'up'})
skipping: [core1a] => (item={u'status': u'down', u'intf': u'FastEthernet1/0/6', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [darkstar] => (item={u'status': u'up', u'intf': u'NVI0', u'ipaddr': u'172.16.0.2', u'proto': u'up'})
skipping: [core1a] => (item={u'status': u'down', u'intf': u'FastEthernet1/0/7', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [darkstar] => (item={u'status': u'up', u'intf': u'Tunnel0', u'ipaddr': u'172.16.0.34', u'proto': u'up'})
skipping: [core1a] => (item={u'status': u'down', u'intf': u'FastEthernet1/0/8', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [darkstar] => (item={u'status': u'up', u'intf': u'Vlan1', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'down', u'intf': u'FastEthernet1/0/9', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [darkstar] => (item={u'status': u'up', u'intf': u'Vlan2', u'ipaddr': u'172.16.2.1', u'proto': u'up'})
skipping: [core1a] => (item={u'status': u'down', u'intf': u'FastEthernet1/0/10', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [darkstar] => (item={u'status': u'up', u'intf': u'Vlan3', u'ipaddr': u'172.16.2.33', u'proto': u'up'})
skipping: [core1a] => (item={u'status': u'down', u'intf': u'FastEthernet1/0/11', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [darkstar] => (item={u'status': u'up', u'intf': u'Vlan4', u'ipaddr': u'172.16.2.129', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'down', u'intf': u'FastEthernet1/0/12', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'down', u'intf': u'FastEthernet1/0/13', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'down', u'intf': u'FastEthernet1/0/14', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'down', u'intf': u'FastEthernet1/0/15', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'down', u'intf': u'FastEthernet1/0/16', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'down', u'intf': u'FastEthernet1/0/17', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'down', u'intf': u'FastEthernet1/0/18', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'down', u'intf': u'FastEthernet1/0/19', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'down', u'intf': u'FastEthernet1/0/20', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'down', u'intf': u'FastEthernet1/0/21', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'down', u'intf': u'FastEthernet1/0/22', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'up', u'intf': u'FastEthernet1/0/23', u'ipaddr': u'unassigned', u'proto': u'up'})
skipping: [core1a] => (item={u'status': u'up', u'intf': u'FastEthernet1/0/24', u'ipaddr': u'unassigned', u'proto': u'up'})
skipping: [core1a] => (item={u'status': u'down', u'intf': u'GigabitEthernet1/0/1', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'down', u'intf': u'GigabitEthernet1/0/2', u'ipaddr': u'unassigned', u'proto': u'down'})
skipping: [core1a] => (item={u'status': u'up', u'intf': u'Port-channel11', u'ipaddr': u'unassigned', u'proto': u'up'})
ok: [core1a] => (item={u'status': u'up', u'intf': u'Loopback0', u'ipaddr': u'172.16.0.1', u'proto': u'up'})

TASK: [debug var=loopbacks] *************************************************** 
ok: [darkstar] => {
    "loopbacks": {
        "intf": "Loopback0", 
        "ipaddr": "172.16.0.2", 
        "proto": "up", 
        "status": "up"
    }
}
ok: [core1a] => {
    "loopbacks": {
        "intf": "Loopback0", 
        "ipaddr": "172.16.0.1", 
        "proto": "up", 
        "status": "up"
    }
}

PLAY RECAP ******************************************************************** 
core1a                     : ok=3    changed=0    unreachable=0    failed=0   
darkstar                   : ok=3    changed=0    unreachable=0    failed=0 

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment