この記事は、Ansible Advent Calendar 2021 (Adventar版) 17日目の記事です。
はじめに
ひさびさに開催された Ansible もくもく会に参加しました。
今回から新しいコンテンツ。環境は Ansible Automation Platform 2.0 Early Access (ansible-core は 2.11)。
もくもく会で Automation Controller (旧 Ansible Tower) がさわれる! pic.twitter.com/pAIPGMBkFL
— よこち (@akira6592) 2021年12月16日
無謀にもメンター枠ではいって、答えられそうなものがあれば答えつつ、新しいコンテンツに取り組もうと思いました。
途中、エラーや疑問が発生したので、やりながら調べた結果も合わせてまとめます。(冷静に調べればもっと正確かもしれません・・)
ネットワーク編に挑戦
ネットワーク編をやりました。コンテンツはこちら。新しいのはまだ英語版のみ。
コマンドライン
あたらしいコンテツらしく、ansible-navigator
による環境確認や Playbook 実行がありました。
ansible-navigator で実行環境の情報をさぐっていく。ネットワーク編の環境なので、それらしい collection が入っていますね。#ansiblejp pic.twitter.com/52D7zA3YQk
— よこち (@akira6592) 2021年12月16日
ルーター側の確認はターミナルの分割が便利! #ansiblejp pic.twitter.com/q9IEneWVDB
— よこち (@akira6592) 2021年12月16日
ansible-playbook
コマンドは使いませんでした。
ansible-navigator
のコマンドラインとして使い方は難しいものではなさそうですが、実行環境のコンテナ化とそれの運用方法などは、考えることがあるなという感覚です。
GUI
GUI は Automation Controller (旧 Ansible Tower)4.0.0 でした。
コンフィグバックアップのジョブを実行。これは前にもあった気がします。
コンフィグバックアップができたらしい#ansiblejp pic.twitter.com/CMR79qf20F
— よこち (@akira6592) 2021年12月16日
このジョブが呼び出している Playbook はこちら。
新しい発見は Survey の複数選択。項目が分かれてるのでわかりやすく感じました。ただ、ペーストしていっぺんに入力はしにくいかもです。
Survey の複数選択の入力、こうなったんだ。
— よこち (@akira6592) 2021年12月16日
区切りが改行なのかカンマなのか迷わなくてすむ。#ansiblejp pic.twitter.com/q3KCyJKyiq
バナーを設定した様子。
バナーの設定できた。#ansiblejp pic.twitter.com/QLYmPSS2S3
— よこち (@akira6592) 2021年12月16日
Junos のエラー発生と調査
ワークフローは、途中で設定ジョブを複数同時並行で実行させるものでした。ここでrtr3
(ツイートの rtr2
は間違い)の Junosでエラーが発生。
障害発生したら動かしたノードが動いたけどそれも失敗した。なんだろ。ユーザー追加のエラー、rtr2はメッセージからするとjunosかな#ansiblejp pic.twitter.com/v7R7sEPaQv
— よこち (@akira6592) 2021年12月16日
JunosとJunosモジュールの仕様上、不整合が起こらないらように排他処理がかかり、タイミングが重なるとあとからログインしたセッションが負けてエラーになってしまいます。
タイミングによるので、再現率は100%ではありませんでした。10回以上繰り返し実行しましたが再現しませんでした。
インベントリに他のOSのネットワーク機器もあるため、Junosがぶつかりにくかった状態だったようです。
ためしに、インベントリで他のネットワーク機器を無効化し、Junos のみでワークフローを再実行したら、あっさり再現しました。
ためしにインベントリを rtr3 (junos) だけにした。タイミング的に競合する確率を高くするため。そしたらやっぱすぐ再現した。#ansiblejp pic.twitter.com/hkb4bqr1vX
— よこち (@akira6592) 2021年12月16日
直列にしてあげると、安定します。
(見た目はいびつですが)2つの設定ジョブを直列にしてあげると、junosの設定セッションが喧嘩せずに安定。#ansiblejp pic.twitter.com/7pw2qFBfsi
— よこち (@akira6592) 2021年12月16日
リストアのエラー発生と調査
このワークフローはもう一エラーが。最後のジョブで設定をリストア仕様とした際に、バックアップファイルが見つからないというエラーです。
エラーメッセージ #ansiblejp pic.twitter.com/KyVqoApYP1
— よこち (@akira6592) 2021年12月16日
これは、最初のジョブで作るバックアップファイル名に、txt
がついたりつかなかったりするためのようです。リストアの処理側を正とするなら、バックアップファイルはすべて txt
をつけるのが正しいのでしょう。
リストアが失敗するのはフィアル名が見つからないというエラー。なんかファイル名に txt がついたりつかなかったりになってるな。#ansiblejp pic.twitter.com/4s3qRv3iia
— よこち (@akira6592) 2021年12月16日
バックアップのPlaybookの処理を追っていくと、OSごとにタスクファイルが別れていて、ios
向けは txt
がついて、他はつかない形になっていました。
txt
つくtxt
つかない例
※ 2021/12/20 追記
後日、txt
が付くように修正して動作確認する様子(スレッドに続きます)
もくもく会の続き。まだ環境使える!
— よこち (@akira6592) 2021年12月17日
バックアプファイルに .txt がつかないから、リストア時にエラーになるの対応。https://t.co/DGqIN8fgp2 からフォークして、修正して、プロジェクトの参照を自分のリポジトリ https://t.co/lNXNjS8Vsd に変更。#ansiblejp
リストアジョブの Survey で気になったこと(意図したコンフィグでリストアできない)
リストアのジョブで、もう一点気になったのが Servey です。ワークフローを組んでいくときに、リストアのジョブを選択すると、ロールバック対象の日時(つまり /backup
ディレクトリ配下のディレクトリ名)をどうするか選択します。Survey の設定上、必須なのでなにか選択しないといけません。
この選択肢は、バックアップジョブを実行するたびに追加されます。この段階では、前の Exercise で実行したジョブによって、1つだけ選択肢がある状態なので、それを選択しました。
しかしこれでは選択が固定され、ここで選択した日時のバックアップファイル(今回の場合、/backup/2021-12-16-10-34
配下)が無条件にリストアされてしまいます。これでは、せっかくワークフローの最初のジョブで取得した、「設定直前のバックアップコンフィグ」がリストアに使われないことになります。
ここが気になった点でした。
なお、リストアは IOS については ios_config
モジュールの src
オプションを利用しています。今回のタスクの場合、もともと「A、B、C」という設定が入っている状態で「A、C」というバックアップファイルでリストアしても変化がありません。このあたりは現象の切り分け時に意識する必要があるかなと思います。
もしこの「意図したコンフィグがリストアで使用されない」現象を解消するのであれば、
- リストアジョブの日時選択 Survey は必須でなくする
- バックアップジョブでバックアップファイルを保存したパスを
set_stats
でアーティファクトとして覚えておく - それをリストアジョブで利用する
という感じでしょうか。(未検証)
リストアジョブの Survey が画面から開けなくなってしまったのもちょっと気になっています。
まとめ
新しいコンテンツ、環境でハンズオンができてよかったです。CLI のほうで、ansible-playbook
を使わないのは新鮮でした。
コンテンツや環境、機会を用意していただいたレッドハットさん、ありがとうございました!
また近いうちに開催予定があるようです。気になった方は、Ansible ユーザー会 の connpass グループに入っておくと通知が来るので便利です。
また参加したいと思います。