はじめに
2020/05/30 に、YouTube Live でつまずいきながら進める Ansible 【Part3】という配信をしました。 実際に作業しながらエラーと戦って進めるシリーズです。
前回までは、Ansible のインストールとインベントリファイルの作成、Cisco IOS の機器に show コマンドを実行する Playbook を作りました。
今回は、設定編として、スタティックルートを追加する Playbook を作成しました。
つまずいたエラーと原因、対処をふりかえります。
動画
■ ios_static_route
の実行
2回目も changed
になってしまった。
1回目の実行で設定が入れば、2回目以降は、ok
となるはずのところ、 changed
になってしまった。
原因
以下のように mask: 0.0.0.00
と指定していたため
- name: set route ios_static_route: prefix: 0.0.0.0 mask: 0.0.0.00 # ここ next_hop: 192.168.1.1
これにより
ip route 0.0.0.0 0.0.0.00 192.168.1.1
が実行される。
しかし、コンフィグ上はあくまでも 0.0.0.0
となる。
ip route 0.0.0.0 0.0.0.0 192.168.1.1
そのため、再度 Playbook を実行し、
ip route 0.0.0.0 0.0.0.00 192.168.1.1
を実行するかどうかの判断の時に、文字列比較の結果「まだ無い設定だ」と判断され、再度実行される。
結局は、コンフィグとしては、
ip route 0.0.0.0 0.0.0.0 192.168.1.1
に落ち着くので、無意味で混乱を招く changed
だった。
対処
mask: 0.0.0.0.00
を mask: 0.0.0.0.0
に修正。
再実行したところ ok
になった。
「show running-config」で表示される形式に合わせるのがポイント。
- 例
- 省略しない(
shut
ではなくshutdonw
など) - 大文字小文字はあわせる(
GigabitEthernet
など) - スペースを入れすぎない
- 省略しない(
参考: Ansible Network FAQ — Ansible Documentation
実行されたコマンドがなんなのか気になって仕方がない
モジュールのオプションで指定した値が、実際にどのようなコマンドになって実行されたかが気になる。
対処
ios_static_route
モジュールの戻り値の commands
の中身を確認する。
- hosts: rt01 tasks: - name: set route ios_static_route: prefix: 0.0.0.0 mask: 0.0.0.0 next_hop: 192.168.1.1 register: result # 結果を変数 result に保存 - name: debug debug: msg: "{{ result.commands }}" # 表示
実行結果抜粋
TASK [set route] *************************************************************************************** changed: [rt01] TASK [debug] ******************************************************************************************* ok: [rt01] => { "msg": [ "ip route 0.0.0.0 0.0.0.0 192.168.1.1" ] }
ためしたところ、実行され「た」コマンドのよう。すでに設定されていて、実行する必要がなかった場合は空となる。
TASK [debug] ******************************************************************************************* ok: [rt01] => { "msg": [] }
Part 4 にむけて
次回の Part 4 では、Playbook のちょっとした改善や、別の設定変更をやってみたいと思います。