第20章 実行環境
従来の仮想環境とは異なり、実行環境は、システムレベルの依存関係とコレクションベースのコンテンツを組み込むことを可能にするコンテナーイメージです。各実行環境で、ジョブ実行用のカスタマイズイメージを使用できます。各実行環境には、ジョブの実行時に必要なもののみが含まれています。
20.1. 実行環境の構築
Ansible コンテンツがデフォルトの環境ではなくカスタム仮想環境に依存している場合は、追加の手順を実行する必要があります。各ノードにパッケージをインストールし、ホストシステムにインストールされている他のソフトウェアと適切に連携させ、パッケージの同期を維持する必要があります。
このプロセスを簡素化するために、Ansible コントロールノード として機能するコンテナーイメージをビルドできます。これらのコンテナーイメージは自動化実行環境と呼ばれ、ansible-builder を使用して作成できます。Ansible-runner は上記のようなイメージを利用できるようになります。
20.1.1. ansible-builder のインストール
イメージをビルドするには、Podman または Docker と ansible-builder
Python パッケージがインストールされている必要があります。
--container-runtime
オプションは、使用する Podman または Docker 実行可能ファイルに対応している必要があります。
実行環境イメージをビルドするときは、Ansible Automation Platform がデプロイされるアーキテクチャーをサポートする必要があります。
詳細は、Ansible Builder のクイックスタート または 実行環境の作成および消費 を参照してください。
20.1.2. 実行環境に必要なコンテンツ
実行環境の作成には Ansible-builder を使用します。
実行環境には以下が含まれている必要があります。
- Ansible
- Ansible Runner
- Ansible コレクション
Python とシステムの依存関係:
- コレクション内のモジュールまたはプラグイン
- ansible-base のコンテンツ
- カスタムのユーザーニーズ
新しい実行環境を構築するには、コレクション、Python 要件、システムレベルのパッケージなど、実行環境に含めるコンテンツを指定した定義が必要です。定義は .yml ファイルである必要があります。
実行環境への移行によって生成された出力の内容には、ファイルにパイプしたり、この定義ファイルに貼り付けたりできる必要なデータの一部が含まれています。
関連情報
詳細は、Migrate legacy venvs to execution environments を参照してください。仮想環境から移行しなかった場合は、実行環境の設定リファレンス で説明されている必要なデータを含む定義ファイルを作成できます。
コレクション開発者は、適切なメタデータを提供することで、コンテンツの要件を宣言できます。
詳細は、依存関係 を参照してください。
20.1.3. イメージをビルドするための YAML ファイルの例
ansible-builder build
コマンドは、実行環境定義を入力として受け取ります。実行環境イメージのビルドに必要なビルドコンテキストを出力し、そのイメージをビルドします。このイメージは、ビルドコンテキストを使用して他の場所で再ビルドでき、同じ結果が得られます。デフォルトでは、ビルダーは現在のディレクトリーで execution-environment.yml
という名前のファイルを検索します。
次の execution-environment.yml
ファイルの例は、開始点として使用できます。
--- version: 3 dependencies: galaxy: requirements.yml
requirements.yml
の内容:
--- collections: - name: awx.awx
上記のファイルを使用して実行環境を構築し、次のコマンドを実行します。
ansible-builder build ... STEP 7: COMMIT my-awx-ee --> 09c930f5f6a 09c930f5f6ac329b7ddb321b144a029dbbfcc83bdfc77103968b7f6cdfc7bea2 Complete! The build context can be found at: context
すぐに使用できるコンテナーイメージが生成されるだけでなく、ビルドコンテキストが保持されます。このイメージは、docker build
や podman build
などの任意のツールを使用して、別の時間または場所で再ビルドできます。
関連情報
ansible-builder build
コマンドの詳細は、Ansible の CLI Usage ドキュメントを参照してください。
20.1.4. 実行環境のマウントオプション
証明書の追加の方法として、実行環境の再構築が 1 つ挙げられますが、ホストから証明書を継承する方がより便利な解決策となります。仮想マシンベースのインストールの場合、Automation Controller はジョブの実行時に実行環境にシステムトラストストアを自動的にマウントします。
Job Settings ページの Paths to expose to isolated jobs フィールドで実行環境のマウントオプションとマウントパスをカスタマイズできます。このフィールドでは、Podman スタイルのボリュームマウント構文がサポートされています。
関連情報
詳細は、Podman ドキュメント を参照してください。
20.1.4.1. 実行環境マウントオプションのトラブルシューティング
実行環境のカスタマイズにより実行環境イメージに /etc/ssh/*
ファイルが追加された場合、SSH エラーが発生する場合があります。たとえば、/etc/ssh/ssh_config.d:/etc/ssh/ssh_config.d:O
パスを公開すると、コンテナーをマウントできるようになりますが、所有権のアクセス許可は正しくマップされません。
このエラーが発生した場合、または古いバージョンの Automation Controller からアップグレードした場合は、次の手順を使用してください。
手順
-
マウントされたボリュームのコンテナー所有権を
root
に変更します。 -
ナビゲーションパネルから
を選択します。 - をクリックします。
現在の例を使用して、Paths to expose to isolated jobs でパスを公開します。
[ "/ssh_config:/etc/ssh/ssh_config.d/:0" ]
注記:O
オプションはディレクトリーに対してのみサポートされます。特にシステムパスを指定する場合は、できるだけ詳細に指定してください。/etc
または/usr
を直接マウントすると、トラブルシューティングが困難になる影響があります。これにより、次の例と同様のコマンドを実行するように Podman に通知されます。このコマンドにより、設定がマウントされ、
ssh
コマンドが期待どおりに機能するようになります。podman run -v /ssh_config:/etc/ssh/ssh_config.d/:O ...
OpenShift または Kubernetes コンテナー内の分離されたパスを HostPath として公開するには、以下の設定を想定してください。
[ "/mnt2:/mnt2", "/mnt3", "/mnt4:/mnt4:0" ]
有効にするには Expose host paths for Container Groups を On に設定します。
Playbook が実行されると、結果として得られる Pod 仕様は次の例のようになります。volumeMounts
セクションと volumes
セクションの詳細に注目してください。
20.1.4.2. 実行ノード内のディレクトリーを実行環境コンテナーにマウントする
Ansible Automation Platform 2.1.2 では、O
および z
オプションのみが使用可能でした。Ansible Automation Platform 2.2 以降では、rw
などの追加のオプションが利用可能になりました。これは、NFS ストレージを使用する場合に便利です。
手順
-
ナビゲーションパネルから
を選択します。 Paths to expose to isolated jobs を編集します。
- 実行ノードまたはハイブリッドノードからコンテナーにボリュームをマウントするパスのリストを入力します。
- 1 行に 1 つのパスを入力します。
サポートされている形式は、
HOST-DIR[:CONTAINER-DIR[:OPTIONS]
です。許可されるパスは、z
、O
、ro
、およびrw
です。例
[ "/var/lib/awx/.ssh:/root/.ssh:O" ]
rw
オプションの場合、SELinux ラベルを正しく設定します。たとえば、/foo
ディレクトリーをマウントするには、次のコマンドを実行します。sudo su
mkdir /foo
chmod 777 /foo
semanage fcontext -a -t container_file_t "/foo(/.*)?"
restorecon -vvFR /foo
awx
ユーザーには、少なくともこのディレクトリーでの読み取りまたは書き込みの許可が必要です。ここでは権限を 777
に設定します。
関連情報
ボリュームのマウントの詳細は、Podman ドキュメントの --volume option of the podman-run(1) を参照してください。