ansible-navigatorとは
ansible-navigator は、インベントリ、プレイブック、コレクションなどのAnsibleコンテンツを作成、確認、トラブルシューティングするためのコマンドベースのツールです。
今回は公式ドキュメントを参考に入門してみました
ansible-navigator.readthedocs.io
インストール
pip install ansible-navigator
インストールをするとansible-runner
もインストールされます、ansible実行はrunnerが行っているようです。
ansible-navigator==1.1.0 ansible-runner==2.1.1
実行
設定ファイルの準備
ansible.cfgの指定やEEの選択などの設定をYAML形式で記載します。
ansible-navigatorを実行するディレクトリに配置しておけば自動的に読み込んでくれます。
ansible-navigator.yml
--- ansible-navigator: ansible: config: ansible.cfg execution-environment: container-engine: docker image: test pull-policy: never environment-variables: pass: - ACI_HOST - ACI_USERNAME - ACI_PASSWORD - ACI_PORT - ACI_VALIDATE_CERTS playbook-artifact: enable: false replay: ./artifact/replay.json save-as: ./artifact/artifact.json # mode: stdout
※今回利用するtest(EE)は事前ansible-builderに作成しています。
ファイルの構成は以下のようにしました
├── ansible.cfg ├── ansible-navigator.yml ★設定ファイル ├── artifact ├── example01.yml ├── example02.yml ├── files │ └── stdout.txt ├── hosts.ini └── host_vars ├── ios01.yml ├── ios02.yml └── ios03.yml
コマンドの実行
利用可能なイメージの確認
ansible-navigator images
imagesのサブコマンドを指定することで、EEとして利用可能なimagesが表示されます。
番号を指定するとさらに情報が見れます
[0] Image information
[1] General information
[2] Ansible version and collections
[3] Python packages
[4] Operating system packages
[5] Everything
inventoryの確認
ansible-navigator inventory -i hosts.ini
inventoryの検索や調査にも便利なinventoryサブコマンドも存在しています。
利用する際は-i
でhostsファイルを指定します。
[0]Browse groups
[1] Browse hosts
hostの番号でhost_varsも確認可能
モジュールのドキュメントを確認する
ansible-navigator doc ansible.utils.fact_diff
モジュールのオプションを確認するにはdoc
サブコマンドを利用します。
ドキュメントを確認したいモジュール名を指定し実行します。
Collectionを確認する
ansible-navigator collections
EEにインストールされているCollectionを確認するにはcollections
サブコマンドを利用します。
コレクションを選択
モジュールを選択
Playbookを実行する
ansible-navigator run example01.yml -i hosts.ini
Playbookの実行はrun
サブコマンドを利用します。
ansibleで利用できるオプションはどこまで有効か不明ですが--tag
を試してみたところ問題なく動作しました。
Play name番号を指定する
Result番号を指定する
ちなみに
intaractiveモードでは、:
の後にいろいろなキーワードを指定することができます。
:help
と打ち込むことで、ヘルプを表示できます。
:f ^a
など正規表現も可能で検索が柔軟にできそうです(これが結構よさそう)
実行時にできたartifact.jsonから実行ログを見る
ansible-navigator replay artifact/artifact.json
artifactディレクトリに生成したartifact.jsonから実行ログをリプレイすることができます。(接続などは行われません)
実行するとansible-navigator run
を実行したときと同じような操作が可能です。
表示の調整
デフォルトではintaractiveモードとなり、今までのAnsibleの実行ログとはかなり違った表示になっています。
ansibleコマンドを実行したときと同じような表示にするには、mode
パラメータをstdout
に変更します。
ansible-navigator.ymlに記載するか、実行時にオプションとして渡すことで変更が可能です。
ansible-navigator.ymlに記載する場合、下記のような表記になります。
ansible-navigator: mode: stdout
オプションで変更する場合-m stdout
をコマンド実行時に追加します。
ansible-navigator replay artifact/artifact.json -m stdout
見慣れた表示になりました。
collections/inventoryなどはstdoutモードのまま実行するとエラーになります、 stdoutのモードはreplay/runサブコマンドを利用する場合でのみ使うのがよさそうです。
まとめ
ansible-navigatorに入門してみました。個人的にはかなり便利と感じています。
実行のリプレイやEEの設定確認、結果の文字列検索など絶妙にかゆいところに手が届いている感覚です。
今後、ansible-runnerがansibleの実行環境としてスタンダードになっていくことを想像すると使い方を覚えておくといいツールだなと感じました。 (runner実行するより簡単&わかりやすい気がしました)