Ansible Builder ガイド
Red Hat Ansible Automation Platform 用の一貫性のある再現可能な自動化実行環境を作成するための実行環境ビルダー
概要
はじめに リンクのコピーリンクがクリップボードにコピーされました!
Ansible Builder を使用して、Red Hat Ansible Automation Platform のニーズに合わせて一貫性のある再現可能な自動化実行環境を作成します。
多様性を受け入れるオープンソースの強化 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、今後の複数のリリースで段階的に用語の置き換えを実施して参ります。詳細は、弊社の CTO である Chris Wright のメッセージ を参照してください。
第1章 Ansible Builder の概要 リンクのコピーリンクがクリップボードにコピーされました!
1.1. Ansible Builder について リンクのコピーリンクがクリップボードにコピーされました!
Ansible Builder は、さまざまな Ansible Collection で定義されたメタデータと、ユーザーが定義したメタデータを使用して、自動化実行環境を構築するプロセスを自動化するコマンドラインツールです。
1.1.1. Ansible Builder を使用する理由 リンクのコピーリンクがクリップボードにコピーされました!
Ansible Builder が開発される以前、Automation Platform ユーザーは、必要とするすべての依存関係がインストールされたカスタム仮想環境またはコンテナーを作成しようとすると、依存関係の問題と複数のエラーメッセージに対して実行される可能性がありました。
簡単でカスタマイズ可能な定義ファイルを使用することで、Ansible Builder は、Ansible、指定されたコレクション、およびその依存関係をインストールし、ジョブを実行するのに必要なすべての要件がバックグラウンドで満たされるようにします。
第2章 Ansible Builder の使用 リンクのコピーリンクがクリップボードにコピーされました!
2.1. Ansible Builder のインストール リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Subscription Management (RHSM) を使用して Ansible Builder をインストールし、Red Hat Ansible Automation Platform サブスクリプションをアタッチできます。Red Hat Ansible Automation Platform サブスクリプションをアタッチ すると、ansible-builder のインストールに必要なサブスクリプションのみのリソースにアクセスできます。サブスクリプションをアタッチすると、ansible-builder に必要なリポジトリーが自動的に有効になります。
ansible-builder をインストールする前に、有効なサブスクリプションがホストにアタッチされている必要があります。
手順
ターミナルで次のコマンドを実行して、Ansible Automation Platform リポジトリーをアクティブ化します。
dnf config-manager --enable ansible-automation-platform-2.1-for-rhel-8-x86_64-rpms
$ dnf config-manager --enable ansible-automation-platform-2.1-for-rhel-8-x86_64-rpmsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次に、次のコマンドを入力して Ansible Builder をインストールします。
dnf install ansible-builder
$ dnf install ansible-builderCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.2. 定義ファイルの構築 リンクのコピーリンクがクリップボードにコピーされました!
Ansible Builder をインストールしたら、自動化実行環境イメージを作成するために Ansible Builder が使用する定義ファイルを作成する必要があります。自動化実行環境イメージを構築する高レベルのプロセスは、Ansible Builder が定義ファイルを読み取って検証してから、Containerfile を作成し、最後に Containerfile を Podman に渡して、自動化実行環境イメージを作成します。Ansible Builder 用に作成する定義ファイルには yaml 形式が使用されており、さまざまなセクションが含まれています。これらのセクションについては、さらに詳しく説明します。
以下は定義ファイルの例です。
例2.1 定義ファイル
これらの定義ファイルのパラメーターについての詳細は、こちらのセクション を参照してください。
2.3. ビルドの実行およびコマンドの作成 リンクのコピーリンクがクリップボードにコピーされました!
前提条件
- 定義ファイルを作成している
手順
自動化実行環境イメージをビルドするには、以下を実行します。
ansible-builder build
$ ansible-builder build
Ansible Builder は、デフォルトでは execution-environment.yml という名前の定義ファイルを探しますが、-f フラグを使用して異なるファイルパスを引数として指定できます。
ansible-builder build -f definition-file-name.yml
$ ansible-builder build -f definition-file-name.yml
where definition-file-name は定義ファイルの名前を指定します。
2.4. 定義ファイルの内容の内訳 リンクのコピーリンクがクリップボードにコピーされました!
自動化実行環境のコンテナーイメージに含まれるコンテンツを指定するため、Ansible Builder で自動化実行環境を構築するには、定義ファイルが必要です。
次のセクションでは、定義ファイルのさまざまな部分について説明します。
2.4.1. ビルド引数およびベースイメージ リンクのコピーリンクがクリップボードにコピーされました!
定義ファイルの build_arg_defaults セクションは、キーが Ansible Builder への引数のデフォルト値を指定できるディクショナリーです。build_arg_defaults で使用できる値の一覧は、以下の表を参照してください。
| Value | 説明 |
|---|---|
|
|
|
|
| 自動化実行環境の親イメージを指定し、既存のイメージに基づいて新しいイメージを構築できるようにします。 |
|
| コンパイルタイプのタスクに使用されるイメージを指定します。 |
build_arg_defaults で指定される値は Containerfile にハードコーディングされるため、podman build を手動で呼び出すとこれらの値が維持されます。
CLI --build-arg フラグで同じ変数が指定されている場合は、CLI 値の優先順位が高くなります。
2.4.2. Ansible 設定ファイルパス リンクのコピーリンクがクリップボードにコピーされました!
ansible.cfg ファイルを使用して、プライベートアカウントのトークンと他の設定を自動化ハブサーバーに渡す場合は、設定ファイルのパス (定義ファイルの場所を基準にした相対パス) を文字列として一覧表示し、ビルドの初期フェーズでビルド引数として有効にします。
ansible.cfg ファイルは以下の例のような形式にする必要があります。
例2.2 ansible.cfg ファイル
自動化ハブからコレクションをダウンロードする方法は、関連する Ansible ドキュメントページ を参照してください。
2.4.3. 依存関係 リンクのコピーリンクがクリップボードにコピーされました!
2.4.3.1. Galaxy リンクのコピーリンクがクリップボードにコピーされました!
galaxy エントリーは、ansible-galaxy collection install -r … コマンドの有効な要件ファイルを参照します。
requirements.yml エントリーは、自動化実行環境定義のディレクトリーからの相対パス、または絶対パスである可能性があります。
requirements.yml ファイルの内容は以下のようになります。
例2.3 Galaxy の requirements.yml ファイル
collections: - geerlingguy.java - kubernetes.core
collections:
- geerlingguy.java
- kubernetes.core
2.4.3.2. Python リンクのコピーリンクがクリップボードにコピーされました!
定義ファイルの python エントリーは、pip install -r … コマンドの有効な要件ファイルを参照します。
requirements.txt エントリーは、Collection がすでに Python の依存関係としてリストされているように追加の Python 要件をインストールするファイルです。自動化実行環境定義のフォルダーのディレクトリーからの相対パス、または絶対パスとして記載されている可能性があります。requirements.txt ファイルの内容は、pip freeze コマンドの標準出力と同様に、以下の例のような形式にする必要があります。
例2.4 Python の requirements.txt ファイル
2.4.3.3. システム リンクのコピーリンクがクリップボードにコピーされました!
定義の システム エントリーは、bindep 要件ファイルを指定しています。このファイルは、コレクションに依存関係として含まれていないシステムレベルの依存関係をインストールします。自動化実行環境定義のフォルダーのディレクトリーからの相対パス、または絶対パスとして記載されている可能性があります。
これは、libxml2 パッケージおよび subversion パッケージをコンテナーに追加する bindep.txt ファイルの例です。
例2.5 bindep.txt ファイル
libxml2-devel [platform:rpm] subversion [platform:rpm]
libxml2-devel [platform:rpm]
subversion [platform:rpm]
2.4.4. 追加のカスタムビルドの手順 リンクのコピーリンクがクリップボードにコピーされました!
prepend コマンドと append コマンドは、additional_build_steps セクションで指定できます。これにより、メインのビルド手順が実行される前または後に実行する Containerfile にコマンドが追加されます。
additional_build_steps の構文は以下のいずれかである必要があります。
複数行の文字列
例2.6 複数行の文字列エントリー
RUN whoami RUN cat /etc/os-release
RUN whoami RUN cat /etc/os-releaseCopy to Clipboard Copied! Toggle word wrap Toggle overflow リスト
例2.7 リストエントリー
- RUN echo This is a post-install command! - RUN ls -la /etc
- RUN echo This is a post-install command! - RUN ls -la /etcCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.5. 任意のビルドコマンド引数 リンクのコピーリンクがクリップボードにコピーされました!
-t フラグは、自動化実行環境イメージに特定の名前を付けます。たとえば、以下のコマンドは my_first_ee_image という名前のイメージを構築します。
ansible-builder build -t my_first_ee_image
$ ansible-builder build -t my_first_ee_image
複数の定義ファイルがある場合は、-f フラグで、使用する定義ファイルを指定できます。
ansible-builder build -f another-definition-file.yml -t another_ee_image
$ ansible-builder build -f another-definition-file.yml -t another_ee_image
上記の例 では、Ansible Builder が、デフォルトの execution-environment.yml の代わりに another-definition-file.yml ファイルで提供される仕様を使用して、another_ee_image という名前の自動実行環境イメージを構築します。
build コマンドで使用できるその他の仕様とフラグについては、ansible-builder build --help と入力して、追加オプションのリストを表示してください。
2.6. イメージの構築なしで Containerfile の作成 リンクのコピーリンクがクリップボードにコピーされました!
イメージをビルドせずに共有可能な Containerfile を作成するには、以下を実行します。
ansible-builder create
$ ansible-builder create
第3章 自動化実行環境の公開 リンクのコピーリンクがクリップボードにコピーされました!
3.1. 実行環境コンテナーイメージを自動化ハブにプッシュ リンクのコピーリンクがクリップボードにコピーされました!
前提条件
- 自動化ハブで実行環境のパーミッションがあり、新しいコンテナーを作成したり、既存のコンテナーにプッシュすることを許可している。
コンテナーレジストリーはコンテナーイメージを保存するためのリポジトリーです。自動化実行環境イメージを構築すると、そのコンテナーイメージを自動化ハブのインスタンスのレジストリー部分にプッシュする準備が整います。
自動化ハブの URL を使用して以下のコマンドを実行し、Podman にログインし、ユーザー名、パスワード、および自動化のハブ URL に置き換えてください。
podman login -u=username -p=password automation-hub-url
$ podman login -u=username -p=password automation-hub-url
Podman にログインしたら、以下のコマンドを実行してコンテナーイメージを自動化ハブのコンテナーレジストリーにプッシュします。
podman push automation-hub-url/ee-image-name
$ podman push automation-hub-url/ee-image-name
自動化実行環境イメージ名は、ansible-builder build コマンドに -t 引数で指定します。-t フラグを使用してカスタムイメージ名を指定しない場合、デフォルトのイメージタグは ansible-execution-env:latest になります。
3.2. 保護されたレジストリーからのプル リンクのコピーリンクがクリップボードにコピーされました!
パスワードまたはトークンで保護されるレジストリーからコンテナーイメージをプルするには、自動化コントローラーで認証情報を作成します。
手順
- Automation Controller に移動します。
- サイドメニューバーの → をクリックします。
- をクリックして、新規の認証情報を作成します。
- 認証 URL、ユーザー名、およびパスワードを指定します。 をクリックします。
詳細は、実行環境のドキュメントの Pulling from Protected Registries セクションを参照してください。
第4章 Red Hat Ansible Automation Platform が提供する既存のベース EE を基に構築 リンクのコピーリンクがクリップボードにコピーされました!
4.1. システムレベルの依存関係の収集 リンクのコピーリンクがクリップボードにコピーされました!
bindep 形式は、クロスプラットフォーム要件を指定する方法を提供します。最低限、コレクションが、[platform:rpm] に必要な要件を指定することが想定されます。
以下は、有効な bindep.txt ファイルからのコンテンツの例です。
例4.1 bindep.txt ファイル
python38-devel [platform:rpm compile] subversion [platform:rpm] git-lfs [platform:rpm]
python38-devel [platform:rpm compile]
subversion [platform:rpm]
git-lfs [platform:rpm]
複数のコレクションからのエントリーは単一ファイルに統合されます。これは bindep により処理され、その後 dnf に渡されます。プロファイルのない要件や、ランタイム要件がイメージにインストールされません。
4.2. 既存の実行環境イメージのカスタマイズ リンクのコピーリンクがクリップボードにコピーされました!
Ansible コントローラーには、以下の 3 つのデフォルト実行環境が同梱されています。
-
Ansible 2.9- Controller モジュール以外のコレクションがインストールされない -
Minimal- 最新の Ansible 2.12 リリースと Ansible Runner が含まれていますが、コレクションやその他の追加コンテンツは含まれていません。 -
EE Supported: Red Hat がサポートするコンテンツがすべて含まれる
これらの環境は多くの自動化ユースケースに対応しますが、追加の項目を追加して、特定のニーズに合わせてこれらのコンテナーをカスタマイズできます。以下の手順では、kubernetes.core コレクションを ee-minimal デフォルトイメージに追加します。
手順
Podman を使用して
registry.redhat.ioにログインします。podman login -u="[username]" -p="[token/hash]" registry.redhat.io
$ podman login -u="[username]" -p="[token/hash]" registry.redhat.ioCopy to Clipboard Copied! Toggle word wrap Toggle overflow Automation Execution Environment イメージをプルする
podman pull registry.redhat.io/ansible-automation-platform-21/ee-minimal-rhel8:latest
podman pull registry.redhat.io/ansible-automation-platform-21/ee-minimal-rhel8:latestCopy to Clipboard Copied! Toggle word wrap Toggle overflow Ansible Builder ファイルを、
ee-minimalをベースとする新しい実行環境イメージに追加する追加のコンテンツを指定するように設定します。たとえば、Kubernetes Core Collection を Galaxy から イメージに追加するには、以下のように
requirements.ymlファイルを入力します。collections: - kubernetes.core
collections: - kubernetes.coreCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 定義ファイルとそのコンテンツの詳細は、定義ファイルの内訳 セクションを参照してください。
実行環境定義ファイルの
EE_BASE_IMAGEフィールドで、元のee-minimalコンテナーファイルへのパスを指定します。その場合、最終的なexecution-environment.ymlファイルは以下のようになります。例4.2 カスタマイズされた
execution-environment.ymlファイルCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記この例では、自動化ハブからの認定コレクションではなく、コミュニティーバージョンの
kubernetes.coreを使用するため、ansible.cfgを作成したり、定義ファイルで参照したりする必要はありません。以下のコマンドを使用して、新しい実行環境イメージを構築します。
ansible-builder build -t registry.redhat.io/[username]/new-ee
$ ansible-builder build -t registry.redhat.io/[username]/new-eeCopy to Clipboard Copied! Toggle word wrap Toggle overflow ここで、
[username]はユーザー名を指定し、new-eeは新しいコンテナーイメージの名前を指定します。podman imagesコマンドを使用して、新しいコンテナーイメージが一覧に表示されていることを確認します。例4.3
new-eeイメージを使用したpodman imagesコマンドの出力REPOSITORY TAG IMAGE ID CREATED SIZE localhost/new-ee latest f5509587efbb 3 minutes ago 769 MB
REPOSITORY TAG IMAGE ID CREATED SIZE localhost/new-ee latest f5509587efbb 3 minutes ago 769 MBCopy to Clipboard Copied! Toggle word wrap Toggle overflow
- Ansible Navigator で新たに作成した実行環境イメージを確認します。
Automation Hub で使用するイメージにタグを付けます。
podman tag registry.redhat.io/_[username]_/_new-ee_ [automation-hub-IP-address]/_[username]_/_new-ee_
$ podman tag registry.redhat.io/_[username]_/_new-ee_ [automation-hub-IP-address]/_[username]_/_new-ee_Copy to Clipboard Copied! Toggle word wrap Toggle overflow Podman を使用して Automation Hub にログインします。
注記コンテナーをプッシュするには、Automation Hub の
adminまたは適切なコンテナーリポジトリーのアクセス許可が必要です。 を参照Managing containers in private automation hub詳細については、Red Hat Ansible Automation Platform ドキュメント の を参照してください。podman login -u="[username]" -p="[token/hash]" [automation-hub-IP-address]
$ podman login -u="[username]" -p="[token/hash]" [automation-hub-IP-address]Copy to Clipboard Copied! Toggle word wrap Toggle overflow イメージを自動化ハブのコンテナーレジストリーにプッシュします。
podman push [automation-hub-IP-address]/_[username]_/_new-ee_
$ podman push [automation-hub-IP-address]/_[username]_/_new-ee_Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しいイメージを自動化コントローラーインスタンスにプルします。
- Automation Controller に移動します。
- ナビゲーションバーから、 → の順にクリックします。
- をクリックします。
適切な情報を入力して をクリックし、新規イメージにプルします。
注記自動化ハブのインスタンスがパスワードまたはトークンで保護されている場合は、適切なコンテナーレジストリーの認証情報が設定されていることを確認してください。