■ はじめに
Ansible には GUI 付きの Ansible Tower という製品があります。そのアップストリーム版 OSS にあたるものとして AWX があります。

この記事では、AWX から IOS と Junos の機器に対して簡単な操作(show versionの実行と表示)を試したときの手順をまとめます。
ポイントは以下のとおりです。
- コネクションプラグインとして
localではなく、IOS にはnetwork_cliを、Junos にはnetconfを利用 - Credential Type として、
Networkではなく、Machineを利用
以前は、local とコネクションプラグインと、Network Credential という、ネットワーク機器固有方法でした。最近のバージョンで、サーバーと同じように Credential Tpye に Machine が利用できるようになりました。詳細は「RED HAT ANSIBLE NETWORK AUTOMATION のアップデート情報(翻訳)」の「ネットワーク機器のための認証情報の管理」をご参照ください。
先日の Ansibleもくもく会 2018.12 ネットワーク編 (Ansible Tower 3.3.x を利用)で、Network Credential と network_cliコネクションプラグイン という組み合わせで Playbook がうまく動かなかったので、正しいと思う組み合わせで試してみたくなり、やってみました。
■ インストール
Software Design 2018年12月号 の Ansible 特集にあった AWX の章を参考にしました。
誌面では、執筆時の最新版 2.0.1 のインストールになっていますが、発売後筆者から
執筆時点の最新版であるAWX v2.0.1での記事になっていますが、オペレーションのバージョン部分を2.0.1から2.1.0に変更してもらえれば、最新のv2.1.0をインストールできます。 - Software Design 2018年12月号 #gihyojp https://t.co/1AUT96vxqk
— SAITO Hideki (@saito_hideki) 2018年11月24日
というコメントがありました。
もうちょっといけるかな、という気持ちで今回は 2.1.2 をインストールしました。
■ 準備
各種設定をしていきます。
Organizations
| 項目 | 値 |
|---|---|
| NAME | test_org |
Projects
| 項目 | 値 |
|---|---|
| NAME | network_project |
| ORGANIZATION | test_org |
| SCM TYPE | Git |
| SCM URL | https://github.com/akira6592/tower-samples.git |
(上記リポジトリは作業用に作成したため、変更、削除する可能性があります)
Inventories
DTAILS
| 項目 | 値 |
|---|---|
| NAME | network_inventory |
| Organization | test_org |
GROUPS
ios
| 項目 | 値 |
|---|---|
| NAME | ios |
| VARIABLES | (下記) |
- VARIABLES
--- ansible_network_os: ios ansible_connection: network_cli # ポイント
junos
| 項目 | 値 |
|---|---|
| NAME | junos |
| VARIABLES | (下記) |
- VARIABLES
--- ansible_network_os: junos ansible_connection: netconf # ポイント
HOSTS
ios1
| 項目 | 値 |
|---|---|
| NAME | ios1 |
| VARIABLES | (下記) |
| GROUPS | ios |
- VARIABLES
--- ansible_host: 172.16.0.2
vsrx1
| 項目 | 値 |
|---|---|
| NAME | vsrx1 |
| VARIABLES | (下記) |
| GROUPS | junos |
- VARIABLES
--- ansible_host: 172.16.0.1
Credentials
ios_credential
| 項目 | 値 | |
|---|---|---|
| NAME | ios_credential | |
| ORGANIZATION | test_org | |
| CREDENTIOAL TYPE | Machine | ポイント |
| USERNAME | iosuser | |
| PASSWORD | iospass9999 |
ユーザーに特権がなく、かつ特権が必要な操作を実行したい場合は、PRIVILEGE ESCALATION METHOD に enable を、PRIVILEGE ESCALATION PASSWORD に 機器側にenable secret で指定した特権パスワードを指定すればよさそうです。
それぞれ、変数の指定でいうと、ansible_become_method: enable と、ansible_become_pass: hogehoge のことでしょう。
junoos_credential
| 項目 | 値 | |
|---|---|---|
| NAME | ios_credential | |
| ORGANIZATION | test_org | |
| CREDENTIOAL TYPE | Machine | ポイント |
| USERNAME | junos_user | |
| PASSWORD | junospass9999 |
TEMPLATES
ios_show_version
| 項目 | 値 |
|---|---|
| NAME | ios_show_version |
| INVENTORY | network_inventory |
| PROJECT | network_project |
| PLAYBOOK | ios_command_test.yml(内容は下記) |
| CREDENTIAL | ios_credential |
- ios_command_test.yml
- hosts: ios gather_facts: no tasks: - name: show command test ios_command: commands: - show version register: result - name: debug output debug: msg: "{{ result.stdout_lines[0] }}"
Credential で指定したユーザーに特権がなく、かつ特権が必要なコマンド(show running-configなど)を実行する場合は、Enable Privilege Escalation にチェックを入れるとできそうです。変数の指定でいうと ansible_become: yes のことでしょう。
junos_show_version
| 項目 | 値 |
|---|---|
| NAME | junos_show_version |
| INVENTORY | network_inventory |
| PROJECT | network_project |
| PLAYBOOK | junos_command_test.yml (内容は下記) |
| CREDENTIAL | junos_credential |
- junos_command_test.yml
- hosts: junos gather_facts: no tasks: - name: show command test junos_command: commands: - show version register: result - name: debug output debug: msg: "{{ result.stdout_lines[0] }}"
■ 実行
IOS の show version
ジョブテンプレートを実行します。


- ログ詳細
SSH password:
PLAY [ios] *********************************************************************
TASK [show command test] *******************************************************
ok: [ios1]
TASK [debug output] ************************************************************
ok: [ios1] => {
"msg": [
"Cisco IOS XE Software, Version 16.08.01",
"Cisco IOS Software [Fuji], Virtual XE Software (X86_64_LINUX_IOSD-UNIVERSALK9-M), Version 16.8.1, RELEASE SOFTWARE (fc3)",
"Technical Support: http://www.cisco.com/techsupport",
"Copyright (c) 1986-2018 by Cisco Systems, Inc.",
"Compiled Tue 27-Mar-18 13:32 by mcpre",
"",
"",
"Cisco IOS-XE software, Copyright (c) 2005-2018 by cisco Systems, Inc.",
"All rights reserved. Certain components of Cisco IOS-XE software are",
"licensed under the GNU General Public License (\"GPL\") Version 2.0. The",
"software code licensed under GPL Version 2.0 is free software that comes",
"with ABSOLUTELY NO WARRANTY. You can redistribute and/or modify such",
"GPL code …
PLAY RECAP *********************************************************************
ios1 : ok=2 changed=0 unreachable=0 failed=0
Junos の show version
ジョブテンプレートを実行します。


- ログ詳細
SSH password:
PLAY [junos] *******************************************************************
TASK [show command test] *******************************************************
ok: [vsrx1]
TASK [debug output] ************************************************************
ok: [vsrx1] => {
"msg": [
"Hostname: vsrx1",
"Model: firefly-perimeter",
"JUNOS Software Release [12.1X47-D15.4]"
]
}
PLAY RECAP *********************************************************************
vsrx1 : ok=2 changed=0 unreachable=0 failed=0
■ まとめ
AWX で Cisco IOS と Juniper Junos の show version コマンドを実行し、画面に表示するところまでを確認できました。