はじめに
Arista EOS のネットワーク機器向けに、主に show コマンドを実行する eos_command
というモジュールがあります。
このモジュールでは、コマンドの実行結果を JSON 形式でも取得できます。
簡単なサンプルでご紹介します。
試した限り コネクションプラグインは network_cli
でのみ有効な技でした。eAPI を利用する httpapi
ではエラーとなったのでご注意ください。
(なお、EOS で show hoge | json
のようにすると JSON で取得できることは、Network Automation Cookbook という本で偶然知りました。)
- 動作確認環境
- Ansible 2.9.10
- cEOS-Lab 4.21.10M
Playbook
show version
を実行して結果を JSON で取得して、表示する Plyabook です。
--- - hosts: eos gather_facts: false tasks: - name: showversion eos_command: commands: - command: show version output: json # ポイント register: result_version - name: debug debug: msg: "{{ result_version.stdout_lines[0] }}"
commands
オプションに command
と output: json
を指定する点がポイントです。
手動で実行する場合の show version | json
相当です。
なので、
commands: - show version output: json # NG
ではないことにご注意ください。
実行結果
このように JSON になります。
TASK [debug] ******************************************************** ok: [eos1] => { "msg": { "architecture": "i386", "bootupTimestamp": 1593489252.0, "cEosToolsVersion": "1.1", "hardwareRevision": "", "internalBuildId": "9d960dea-a6da-424b-b373-2958c07c48c3", "internalVersion": "4.21.10M-15347597.42110M", "isIntlVersion": false, "memFree": 1169184, "memTotal": 2039264, "mfgName": "", "modelName": "cEOSLab", "serialNumber": "", "systemMacAddress": "02:42:ac:2a:8f:7d", "uptime": 19298.83, "version": "4.21.10M" } }
JSON は キーをたどると値を絞れます。例えば、version
だけ欲しいときは result_version.stdout_lines[0]
を `result_version.stdout_lines[0].version
にすると
TASK [debug] ********* ok: [eos1] => { "msg": "4.21.10M" }
となります。
通常は・・
output: json
を指定しない場合は、以下のように通常の show コマンドの実行結果形式になります。
TASK [debug] **************************************************************** ok: [eos1] => { "msg": [ "cEOSLab", "Hardware version: ", "Serial number: ", "System MAC address: 0242.ac2a.8f7d", "", "Software image version: 4.21.10M", "Architecture: i386", "Internal build version: 4.21.10M-15347597.42110M", "Internal build ID: 9d960dea-a6da-424b-b373-2958c07c48c3", "", "cEOS tools version: 1.1", "", "Uptime: 0 weeks, 0 days, 5 hours and 23 minutes", "Total memory: 2039264 kB", "Free memory: 1169228 kB" ] }
おわりに
JSON のように構造化データを OS の機能で取得できるのはとても便利だと思いました。
assert
がはかどります。