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実行するより簡単&わかりやすい気がしました)