はじめに
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 がはかどります。