はじめに
ネットワーク機器の通常の show コマンド結果を、構造化データにパースしてくれる ntc-templates というパーステンプレート集があります。
TextFSM というパーサーに対応したテンプレートです。
例えば、Cisco IOS の 'show ip interface brief` の結果を以下のようにしてくれます。
{ "intf": "GigabitEthernet0/0", "ipaddr": "192.168.1.11", "proto": "up", "status": "up" }
ntc-templates は、様々なベンダーにの機器に対応するテンプレートがありますが、構造化データにした際のキー(interface
など)が揃っていなかったようです。
そこで、この1年くらい前?から、キー名の標準化が進んできているようです。キー名の標準化は、特定のバージョンでいっぺんに行われているわけではなく、徐々に行われています。
今回は、たまたま気付いた show ip interface brief
コマンド結果のキーの変化について Ansible 経由で検証してご紹介します。
検証環境:
- ansible-core 2.15.7
Playbook
本題からややそれますが、Playbook は以下のものを利用します。
--- - hosts: ios01 gather_facts: false tasks: - name: Run show ip interface brief ansible.utils.cli_parse: command: show ip interface brief parser: name: ansible.netcommon.ntc_templates register: result_parsed - name: Debug paresed ansible.builtin.debug: msg: "{{ result_parsed.parsed }}"
ntc-templates 3.0.0
3.0.0
で Playbook を実行すると以下のようになりあります。
TASK [Debug paresed] **************************************** ok: [ios01] => { "msg": [ { "intf": "GigabitEthernet0/0", "ipaddr": "192.168.1.11", "proto": "up", "status": "up" }, ...(略)... }
ntc-templates 4.0.0
続いて 4.0.0 での結果です。
TASK [Debug paresed] ****************************************** ok: [ios01] => { "msg": [ { "interface": "GigabitEthernet0/0", "ip_address": "192.168.1.11", "proto": "up", "status": "up" }, ...(略)...
比較
それぞれを比較すると以下の違いがあります。略さない方向になっているようです。
項目 | 3.0.0 | 4.0.0 |
---|---|---|
インターフェース | intf |
interface |
IPアドレス | ipaddr |
ip_address |
4.0.0 の Changelog には以下の記述がありました。
Standardize interface capture group by @mjbear in #1419
Standardize capture group IP_ADDRESS by @mjbear in #1439
「Breaking Changes」という扱いではないので、見落としてしまうかもしれません。。
おわりに
Changelog で確認する際は、Standardize
や normalize
といった言葉に注目するとこの手の変更が見つかりそうです。