ansible-navigator と実行環境(Execution Environments)の設定

AnsibleBeginner
オンラインで実践に進む

はじめに

現在の EX294 スタイルのワークフローには ansible-navigator が含まれています。これは、一貫したインターフェースで自動化を実行でき、利用可能な場合には実行環境(Execution Environments)を使用できるためです。この LabEx RHEL 10 VM では、このツールが利用可能です。本実験では、ワークフローを安定かつ高速にするためにローカル実行モードを使用します。

この実験では、ansible-navigator.yml を作成し、stdout モードを設定し、このローカル VM ワークフローのために実行環境を無効化し、navigator を使用して Playbook を実行します。

小規模な Navigator プロジェクトの構築

このステップでは、navigator に必要なプロジェクト構造、インベントリ、および Ansible のデフォルト設定を作成します。Navigator は ansible-playbook と同様のプロジェクトファイルを多く読み込みます。

ディレクトリを作成し、プロジェクトに移動します。

cd /home/labex/project
mkdir -p rhce-ansible/{inventory,playbooks}
cd rhce-ansible

インベントリを作成します。

cat > inventory/hosts <<'EOF'
[control]
control ansible_connection=local
EOF

このインベントリはローカルホストのエイリアスを 1 つ使用しているため、実験では SSH ではなく navigator の動作に集中できます。このエイリアスは重要です。navigator は Playbook を Ansible に渡し、Ansible はインベントリを通じて hosts: control を解決します。

navigator と Ansible の両方が同じインベントリを使用するように ansible.cfg を作成します。

cat > ansible.cfg <<'EOF'
[defaults]
inventory = ./inventory/hosts
retry_files_enabled = False
interpreter_python = auto_silent
EOF

ansible.cfg に inventory を保持することで、後の ansible-navigator run コマンドで明示的な -i オプションを指定する必要がなくなります。これは、navigator ワークフローと通常の Ansible プロジェクトのデフォルト設定を結びつける最初のステップです。

このステップでは、ansible-navigator がインストールされていることを確認し、バージョンを表示します。設定を記述する前にツールを確認しておくことで、障害が発生した際の理解が容易になります。

このステップでコマンドを実行する前に、プロジェクトディレクトリに戻り、相対パスが Ansible プロジェクトを参照するようにします。

cd /home/labex/project/rhce-ansible

バージョン確認コマンドを実行します。

ansible-navigator --version

出力に ansible-navigator のバージョン番号が表示されるはずです。

このコマンドが機能すれば、設定のデバッグを開始する前にツール自体がインストールされていることがわかります。この切り分けは有用です。ツールが存在しない場合と、ansible-navigator.yml が不適切な場合では、発生する問題が大きく異なるためです。

run サブコマンドに関するヘルプを navigator に問い合わせます。

ansible-navigator run --help | sed -n '1,12p'

ヘルプの出力により、サブコマンド名が確認でき、navigator が Playbook のパスを期待していることがわかります。ここで全てのオプションを暗記する必要はありません。目的は、インストールされたツールに対してどのようにヘルプを求めるかを知ることです。

ansible-navigator.yml の作成

このステップでは、navigator の設定を作成します。mode: stdout 設定により、navigator は通常のターミナル出力を表示するようになります。これはガイド付きの実験に最適です。execution-environment.enabled: false 設定により、実行環境はこの RHEL 10 VM 内に限定されます。

このステップでコマンドを実行する前に、プロジェクトディレクトリに戻り、相対パスが Ansible プロジェクトを参照するようにします。

cd /home/labex/project/rhce-ansible

ansible-navigator.yml を作成します。

cat > ansible-navigator.yml <<'EOF'
---
ansible-navigator:
  mode: stdout
  execution-environment:
    enabled: false
  playbook-artifact:
    enable: false
EOF

この実験では 3 つの設定が重要です。mode: stdout は出力をターミナルに保持し、execution-environment.enabled: false は navigator に対してローカルの Ansible インストール環境で実行するように指示し、playbook-artifact を無効にすることで、メインのワークフローの妨げとなる余分な結果ファイルの生成を回避します。

ファイルを表示してインデントを確認します。YAML のインデントは構文の一部です。

sed -n '1,20p' ansible-navigator.yml

mode、execution-environment、および playbook-artifact が ansible-navigator の下にネストされていることを確認してください。これらのキーのいずれかが間違った列から始まっていると、YAML が意図した構造とは異なる解釈をされる可能性があります。

このステップでは、navigator が実行するための短い Playbook を作成します。Playbook は Play の YAML リストです。各 Play はターゲットホストとタスクを指定します。

このステップでコマンドを実行する前に、プロジェクトディレクトリに戻り、相対パスが Ansible プロジェクトを参照するようにします。

cd /home/labex/project/rhce-ansible

playbooks/navigator-check.yml を作成します。

cat > playbooks/navigator-check.yml <<'EOF'
---
- name: Check navigator execution
  hosts: control
  gather_facts: false
  tasks:
    - name: Write navigator proof file
      ansible.builtin.copy:
        dest: /home/labex/project/rhce-ansible/navigator-proof.txt
        content: navigator ran this playbook
        mode: '0644'
EOF

この Playbook はプロジェクトディレクトリ配下にファイルを作成するため、実行後に目に見える証拠が残ります。copy モジュールは冪等(べきとう)です。つまり、コンテンツやモードが要求された状態と異なる場合にのみファイルを変更します。

実行する前に ansible-playbook --syntax-check を使用します。構文チェックは、ホストを変更することなく YAML や Playbook 構造のミスを検出します。

ansible-playbook playbooks/navigator-check.yml --syntax-check

構文チェックにより playbook: 行が表示されるはずです。タスクは実行されませんが、navigator が実行する前に Ansible が Playbook を解析できることが確認できます。

このステップでは、navigator を介して Playbook を実行します。run サブコマンドは Playbook を実行し、プロジェクト設定によってこのターミナルで出力が読み取り可能になります。

このステップでコマンドを実行する前に、プロジェクトディレクトリに戻り、相対パスが Ansible プロジェクトを参照するようにします。

cd /home/labex/project/rhce-ansible

Playbook を実行します。

ansible-navigator run playbooks/navigator-check.yml

成功した場合は、リキャップ(要約)に failed=0 と表示されるはずです。証拠ファイルが作成されたことを確認します。

mode: stdout が設定されているため、出力は通常の ansible-playbook の実行と同様に見えるはずです。まずリキャップを読み、次に証拠ファイルを調べて、報告されたタスクの結果とディスク上の実際のファイルが一致していることを確認してください。

cat navigator-proof.txt

まとめ

ローカルの LabEx RHEL 10 ワークフロー用に ansible-navigator を設定し、有効な Playbook を作成して、navigator を介して実行しました。これにより、今後の RHCE Ansible 実験で利用可能な再現性のある実行モデルが構築されました。