■ はじめに
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
コマンドを実行し、画面に表示するところまでを確認できました。