Ansibleでshowコマンドの結果をパースする方法が増えてきています。 この記事ではCisco IOSを対象として、標準でできるかどうか、どういう情報をパースできるかなどの観点で、4つの方法を簡単にまとめます。
■ 概要
- parse_cli_textfsm フィルター
- Ansible 2.4 から標準で利用可能。TextFSMテンプレートを利用して拡張可能。
- ansible_helpers フィルター
- サードパーティ製。TextFSMテンプレートを利用。
- ios_facts モジュール
- Ansible 2.2 から利用可能。パース可能情報は少なめ。
- napalm_get_facts モジュール
- サードパーティ製。
■ 1. parse_cli_textfsm フィルター
・タイプ
標準のフィルタープラグイン
Filters — Ansible Documentation
・利用可能バージョン
Ansible 2.4 から
・パースできる情報
- TextFSM 形式で定義すれば任意のコマンドをパース可能
- Network to Code の テンプレートがとっかかりとして便利 https://github.com/networktocode/ntc-templates/tree/master/templates
- 例
- show interfaces
- show interfaces status
- show inventory
- show ip bgp summary
- show ip int brief
- show ip ospf neighbor
- show ip route
・パース結果例
インターフェース情報
{ "DUPLEX": "auto", "NAME": "", "PORT": "Gi1/0/1", "SPEED": "auto", "STATUS": "notconnect", "TYPE": "10/100/1000BaseTX", "VLAN": "1" }, { "DUPLEX": "auto", "NAME": "", "PORT": "Gi1/0/2", "SPEED": "auto", "STATUS": "notconnect", "TYPE": "10/100/1000BaseTX", "VLAN": "1" },
・その他参考
■ 2. ansible_helpers フィルター
・タイプ
サードパーティのフィルタープラグイン github.com
・利用可能バージョン
不明。当方では Ansible 2.3 で簡単な動作確認済み。
・パースできる情報
Network to Code のリポジトリにある TextFSM 形式のテンプレートで定義されたコマンド github.com
例
- show interfaces
- show interfaces status
- show inventory
- show ip bgp summary
- show ip int brief
- show ip ospf neighbor
- show ip route
・パース結果例
インターフェース情報
{ "intf": "GigabitEthernet1", "ipaddr": "10.0.0.51", "proto": "up", "status": "up" }, { "intf": "GigabitEthernet2", "ipaddr": "10.0.2.1", "proto": "up", "status": "up" },
・その他参考
■ 3. ios_facts モジュール
・タイプ
標準のfact収集系モジュール
ios_facts - Collect facts from remote devices running Cisco IOS — Ansible Documentation
・利用可能バージョン
Ansible 2.2 から
・パースできる情報
- ハードウェア情報系、インターフェース系
・パース結果例
インターフェース情報
"ansible_net_interfaces": { "GigabitEthernet1": { "bandwidth": 1000000, "description": null, "duplex": "Full", "ipv4": { "address": "10.0.0.51", "masklen": 24 }, "lineprotocol": "up ", "macaddress": "2cc2.60xx.xxxx", "mediatype": "RJ45", "mtu": 1500, "operstatus": "up", "type": "CSR vNIC" },
・その他参考
■ 4. napalm_get_facts モジュール
・タイプ
サードパーティのfact収集系モジュール(napalm-ansible内)
・利用可能バージョン
不明。当方では Ansible 2.3 で簡単な動作確認済み。
パースできる情報
- arp_table
- bgp_neighbors
- config
- environment
- facts
- interfaces
- interfaces_counters
- interfaces_ip
- lldp_neighbors
- lldp_neighbors_detail
- mac_address_table
- ntp_servers
- ntp_stats
- optics
- snmp_information
・パース結果例
インターフェース情報
"interfaces": { "GigabitEthernet1": { "description": "N/A", "is_enabled": true, "is_up": true, "last_flapped": -1.0, "mac_address": "2C:C2:60:XX:XX:XX", "speed": 1000 },