ルーター設定の更新にAnsibleを利用します。この演習ではPlaybookは作成せずに、準備されたものを利用します。
この演習は以下を含みます。
- 既存のPlaybookを確認します。
- Playbook を
ansible-playbook
コマンドを使って実行します。 - check mode (
--check
オプション) - verbose mode (
--verbose
or-v
オプション)
network-workshop
ディレクトリを移動してください(別のディレクトリにいる場合)
[student1@ansible ~]$ cd ~/network-workshop/
[student1@ansible network-workshop]$
[student1@ansible network-workshop]$ pwd
/home/student1/network-workshop
演習用に提供される playbook.yml
を確認します。好きなエディタでこのファイルを開いてください。以下の例では cat
コマンドを利用しています。
[student1@ansible network-workshop]$ cat playbook.yml
---
- name: snmp ro/rw string configuration
hosts: cisco
gather_facts: no
tasks:
- name: ensure that the desired snmp strings are present
ios_config:
commands:
- snmp-server community ansible-public RO
- snmp-server community ansible-private RW
cat
- ファイルの内容を確認するコマンドplaybook.yml
- 演習で提供されるPlaybook
次の演習でPlaybookの詳細については確認します。ここではこのPlaybookで2つのCisco IOS-XEコマンドが実行されることが確認できれば十分です。
snmp-server community ansible-public RO
snmp-server community ansible-private RW
ansible-playbook
コマンドを使ってこのPlaybookを実行します:
[student1@ansible network-workshop]$ ansible-playbook playbook.yml
PLAY [snmp ro/rw string configuration] *****************************************
TASK [ensure that the desired snmp strings are present] ************************
changed: [rtr1]
PLAY RECAP *********************************************************************
rtr1 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
このPlaybookの動きを確認します。rtr1
へログインし、Cisco IOS-XE上で実行中のコンフィグを確認します。
[student1@ansible network-workshop]$ ssh rtr1
rtr1#show run | i snmp
snmp-server community ansible-public RO
snmp-server community ansible-private RW
ios_config
モジュールは冪等性を持ちます。つまり、コンフィグの変更がエンドホストに存在しない場合にだけ、コンフィグがデバイスにプッシュされることを意味します。
Ansible Automation の用語(冪等性のような単語)の説明が必要な場合は glossary で確認することができます。
冪等性を確認するには、Playbookを再実行します:
[student1@ansible network-workshop]$ ansible-playbook playbook.yml
PLAY [snmp ro/rw string configuration] **************************************************************************************
TASK [ensure that the desired snmp strings are present] *********************************************************************
ok: [rtr1]
PLAY RECAP ******************************************************************************************************************
rtr1 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[student1@ansible network-workshop]$
Note: PLAY RECAP の中の changed パラメーターが changed=0 であることを確認してください。
このPlaybookを複数回実行しても、結果は ok=1 change=0 と毎回同じになります。別のオペレーターやプロセスが rtr1 の設定を削除、変更をしない限り、このPlaybookはネットワークデバイス上で正しく設定が投入されていることを示す ok=1 を通知し続けます。
ここで ansible-test
というコミュニティ名を追加するようにタスクを更新します。
snmp-server community ansible-test RO
好きなテキストエディタで playbook.yml
を開いて、コマンドを追加します:
[student1@ansible network-workshop]$ nano playbook.yml
Playbookは以下のようになります:
---
- name: snmp ro/rw string configuration
hosts: cisco
gather_facts: no
tasks:
- name: ensure that the desired snmp strings are present
ios_config:
commands:
- snmp-server community ansible-public RO
- snmp-server community ansible-private RW
- snmp-server community ansible-test RO
ここでは、このPlaybookを実行してデバイスのコンフィグを更新する代わりに、--check
オプションと -v(--verbose)
の冗長出力モードを組み合わせて実行します。
[student1@ansible network-workshop]$ ansible-playbook playbook.yml --verbose --check
Using /home/student1/.ansible.cfg as config file
PLAY [snmp ro/rw string configuration] *****************************************
TASK [ensure that the desired snmp strings are present] ************************
changed: [rtr1] => changed=true
ansible_facts:
discovered_interpreter_python: /usr/bin/python
banners: {}
commands:
- snmp-server community ansible-test RO
updates:
- snmp-server community ansible-test RO
PLAY RECAP *********************************************************************
rtr1 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
--check
と --verbose
を組み合わせると、実際にデバイス対して更新を行うことなく、どのような変更が行われるのかを確認することができます。これは、実際に更新を行う前に、変更内容を検証するのに最適な方法です。
ansible-test
コミュニティが作成されていないことを確認します。rtr1
へログインして、コンフィグ内容を確認してください。
[student1@ansible network-workshop]$ ssh rtr1
rtr1#show run | i snmp
snmp-server community ansible-public RO
snmp-server community ansible-private RW
最後に、このPlaybookを -v
--check
オプションなしで再実行して、更新をプッシュします。
[student1@ansible network-workshop]$ ansible-playbook playbook.yml
PLAY [snmp ro/rw string configuration] *****************************************
TASK [ensure that the desired snmp strings are present] ************************
changed: [rtr1]
PLAY RECAP ******************************************************************************************************************
rtr1 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Playbookが設定した ansible-test
コミュニティを確認します。rtr1
へログインして、コンフィグ内容を確認してください。
[student1@ansible network-workshop]$ ssh rtr1
rtr1#sh run | i snmp
snmp-server community ansible-public RO
snmp-server community ansible-private RW
snmp-server community ansible-test RO
- *os_config (例えば ios_config) モジュールは冪等性を持ち、ステートフルです。
- check mode はリモートシステムを変更せずにPlaybookを確認できる。
- verbose mode は端末に多くの情報を表示し、そこにはどのようなコマンドが適用されるかが含まれている。
- Playbook は設定を強制するために Red Hat Ansible Tower からスケジュールすることが可能です。例えば、特定のネットワークに1日1回Playbookを実行するなどです。また check mode と組み合わせ利用すると、ネットワークの設定が変更されたり削除された場合に、それを確認したりレポートすることも可能になります。
完成したPlaybookはここから参照できます: playbook.yml.
以上で exercise 2 は終了です。
Click here to return to the Ansible Network Automation Workshop