てくなべ (tekunabe)

ansible / network / automation

[Ansible] つまずきながら進める Ansible 【Part3】ふりかえり

はじめに

2020/05/30 に、YouTube Live でつまずいきながら進める Ansible 【Part3】という配信をしました。 実際に作業しながらエラーと戦って進めるシリーズです。

tekunabe.connpass.com

前回までは、Ansible のインストールとインベントリファイルの作成、Cisco IOS の機器に show コマンドを実行する Playbook を作りました。

今回は、設定編として、スタティックルートを追加する Playbook を作成しました。

つまずいたエラーと原因、対処をふりかえります。

動画

www.youtube.com


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.00mask: 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 のちょっとした改善や、別の設定変更をやってみたいと思います。