AnsibleでCisco IOSの情報収集 - snmp_facts

#背景
[AnsibleでCisco IOSの情報収集 - ios_facts](http://qiita.com/kikuta1978/items/f38298bd357f7a315819)の続編。今回は[snmp_facts](http://docs.ansible.com/ansible/snmp_facts_module.html)の記録。Cisco用ではなく汎用モジュールなので、ベンダー意識しなくていい点と、MIB基準（？）で情報取得したい（でもsnmpgetとかしたくない）場合に使えるかも。

※ansible.cfgやinventoryの設定は省略。
※環境は[こちら](http://qiita.com/kikuta1978/items/f38298bd357f7a315819)と同じなので省略。

#Playbookサンプル - snmp_facts

```yaml:snmp_facts.yml
---
- hosts: ios
  gather_facts: False
  connection: local
  tasks:
    - name: snmp_facts
      snmp_facts:
        host: '{{ inventory_hostname }}'
        version: v2c
        community: public
      register: snmpfacts_out

    - debug: var=snmpfacts_out
```

#実行例
情報量が多くないので、debug出力のみにしたが、ファイルに保存して、ネットワークの全インターフェース調査などを（楽に）行っても良い。

```bash:snmp_facts.yml
[vagrant@localhost ansible]$ ansible-playbook snmp_facts.yml 

PLAY [ios] *********************************************************************

TASK [snmp_facts] **************************************************************
ok: [10.71.130.58]

TASK [debug] *******************************************************************
ok: [10.71.130.58] => {
    "snmpfacts_out": {
        "ansible_facts": {
            "ansible_all_ipv4_addresses": [
                "10.71.130.58"
            ], 
            "ansible_interfaces": {
                "1": {
                    "adminstatus": "up", 
                    "description": "", 
                    "ifindex": "1", 
                    "ipv4": [
                        {
                            "address": "10.71.130.58", 
                            "netmask": "255.255.248.0"
                        }
                    ], 
                    "mac": "005056a26a84", 
                    "mtu": "1500", 
                    "name": "GigabitEthernet1", 
                    "operstatus": "up", 
                    "speed": "1500"
                }, 
                "2": {
                    "adminstatus": "down", 
                    "description": "", 
                    "ifindex": "2", 
                    "mac": "005056a2aa72", 
                    "mtu": "1500", 
                    "name": "GigabitEthernet2", 
                    "operstatus": "down", 
                    "speed": "1500"
                }, 
                "3": {
                    "adminstatus": "down", 
                    "description": "", 
                    "ifindex": "3", 
                    "mac": "005056a25883", 
                    "mtu": "1500", 
                    "name": "GigabitEthernet3", 
                    "operstatus": "down", 
                    "speed": "1500"
                }, 
                "4": {
                    "adminstatus": "up", 
                    "description": "", 
                    "ifindex": "4", 
                    "mac": "", 
                    "mtu": "1500", 
                    "name": "VoIP-Null0", 
                    "operstatus": "up", 
                    "speed": "1500"
                }, 
                "5": {
                    "adminstatus": "up", 
                    "description": "", 
                    "ifindex": "5", 
                    "mac": "", 
                    "mtu": "1500", 
                    "name": "Null0", 
                    "operstatus": "up", 
                    "speed": "1500"
                }, 
                "6": {
                    "adminstatus": "up", 
                    "description": "", 
                    "ifindex": "6", 
                    "mac": "", 
                    "mtu": "1514", 
                    "name": "Loopback0", 
                    "operstatus": "up", 
                    "speed": "1514"
                }
            }, 
            "ansible_syscontact": "", 
            "ansible_sysdescr": "Cisco IOS Software [Everest], CSR1000V Software (X86_64_LINUX_IOSD-UNIVERSALK9-M), Version 16.4.1, RELEASE SOFTWARE (fc2)\r\nTechnical Support: http://www.cisco.com/techsupport\r\nCopyright (c) 1986-2016 by Cisco Systems, Inc.\r\nCompiled Sun 27-Nov-16 13:02 by", 
            "ansible_syslocation": "", 
            "ansible_sysname": "CSR-2.solse.local", 
            "ansible_sysobjectid": "1.3.6.1.4.1.9.1.1537", 
            "ansible_sysuptime": "28502267"
        }, 
        "changed": false
    }
}

PLAY RECAP *********************************************************************
10.71.130.58               : ok=2    changed=0    unreachable=0    failed=0  
```

#Playbookサンプル2 - snmp_facts

この装置のsysoidなんだっけ？（でもsnmpwalkしたくない）。

```yaml:snmp_facts_2.yml
---
- hosts: ios
  gather_facts: False
  connection: local
  tasks:
    - name: snmp_facts
      snmp_facts:
        host: '{{ inventory_hostname }}'
        version: v2c
        community: public
      register: snmpfacts_out

    - debug: var=snmpfacts_out["ansible_facts"]["ansible_sysobjectid"]
```

#実行例
```bash:snmp_facts_2.yml
[vagrant@localhost ansible]$ ansible-playbook snmp_facts_2.yml 

PLAY [ios] *********************************************************************

TASK [snmp_facts] **************************************************************
ok: [10.71.130.58]

TASK [debug] *******************************************************************
ok: [10.71.130.58] => {
    "snmpfacts_out[\"ansible_facts\"][\"ansible_sysobjectid\"]": "1.3.6.1.4.1.9.1.1537"
}

PLAY RECAP *********************************************************************
10.71.130.58               : ok=2    changed=0    unreachable=0    failed=0 
```

以上です。ちょっと出来ることは少ないかも。お粗末さまでした。