うさラボ

お勉強と備忘録

ansible-navigator入門

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が表示されます。
f:id:usage_automate:20211212001203p:plain

番号を指定するとさらに情報が見れます f:id:usage_automate:20211212001247p:plain

  • [0] Image information
    f:id:usage_automate:20211212001446p:plain

  • [1] General information
    f:id:usage_automate:20211212001605p:plain

  • [2] Ansible version and collections f:id:usage_automate:20211212001339p:plain

  • [3] Python packages f:id:usage_automate:20211212001806p:plain

  • [4] Operating system packages f:id:usage_automate:20211212001849p:plain

  • [5] Everything f:id:usage_automate:20211212001922p:plain

inventoryの確認

ansible-navigator inventory -i hosts.ini
inventoryの検索や調査にも便利なinventoryサブコマンドも存在しています。
利用する際は-iでhostsファイルを指定します。
f:id:usage_automate:20211212002234p:plain

  • [0]Browse groups
    f:id:usage_automate:20211212002303p:plain

  • [1] Browse hosts
    f:id:usage_automate:20211212002543p:plain

hostの番号でhost_varsも確認可能
f:id:usage_automate:20211212002447p:plain

モジュールのドキュメントを確認する

ansible-navigator doc ansible.utils.fact_diff
モジュールのオプションを確認するにはdocサブコマンドを利用します。
ドキュメントを確認したいモジュール名を指定し実行します。 f:id:usage_automate:20211212003006p:plain

Collectionを確認する

ansible-navigator collections
EEにインストールされているCollectionを確認するにはcollectionsサブコマンドを利用します。 f:id:usage_automate:20211212003048p:plain

コレクションを選択

f:id:usage_automate:20211212003134p:plain

モジュールを選択

f:id:usage_automate:20211212003156p:plain

Playbookを実行する

ansible-navigator run example01.yml -i hosts.ini
Playbookの実行はrunサブコマンドを利用します。
ansibleで利用できるオプションはどこまで有効か不明ですが--tagを試してみたところ問題なく動作しました。

f:id:usage_automate:20211212004328p:plain

Play name番号を指定する

f:id:usage_automate:20211212004359p:plain

Result番号を指定する

f:id:usage_automate:20211212004420p:plain

ちなみに

intaractiveモードでは、:の後にいろいろなキーワードを指定することができます。

:helpと打ち込むことで、ヘルプを表示できます。 f:id:usage_automate:20211212004601p:plain

:f ^aなど正規表現も可能で検索が柔軟にできそうです(これが結構よさそう)

実行時にできたartifact.jsonから実行ログを見る

ansible-navigator replay artifact/artifact.json

artifactディレクトリに生成したartifact.jsonから実行ログをリプレイすることができます。(接続などは行われません) f:id:usage_automate:20211212004906p:plain

実行すると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

f:id:usage_automate:20211212005231p:plain

見慣れた表示になりました。

collections/inventoryなどはstdoutモードのまま実行するとエラーになります、 stdoutのモードはreplay/runサブコマンドを利用する場合でのみ使うのがよさそうです。

まとめ

ansible-navigatorに入門してみました。個人的にはかなり便利と感じています。
実行のリプレイやEEの設定確認、結果の文字列検索など絶妙にかゆいところに手が届いている感覚です。

今後、ansible-runnerがansibleの実行環境としてスタンダードになっていくことを想像すると使い方を覚えておくといいツールだなと感じました。 (runner実行するより簡単&わかりやすい気がしました)