以下の内容はhttps://zaki-hmkc.hatenablog.com/entry/2025/11/15/161339より取得しました。


Ansible BuilderでEEコンテナのイメージビルドの際にAutomation Hubのトークン情報を定義ファイルに書かないためのポイント

Ansible Builderを使ったイメージビルドでAutomation Hub(console.redhat.com)のコレクションをインストールする場合の定義ファイルについて。
条件として、各定義ファイル内に認証情報を記述せずに実行時に外部から指定し、バージョン管理対象のファイルに機密情報を含まない形にする。

お題は以下のエントリと同様に次のコレクションをインストールするものとする。

zaki-hmkc.hatenablog.com

コレクション名 配布元
ansible.platform automation hub
ansible.controller automation hub
community.proxmox galaxy

認証設定

Execution Environmentのv3ではansible.cfgはビルド時には使用しないので、基本すべてexecution-environment.ymlに記述していく。
設定例としては以下を参考。

Building EEs with environment variables for Galaxy configuration — Ansible Builder Documentation

execution-environment.ymlは基本的には上記ドキュメントの通りだが、不要な設定がイメージに残らないように少しアレンジしている。

version: 3

images:
  base_image:
    name: registry.redhat.io/ansible-automation-platform-25/ee-minimal-rhel8:latest

dependencies:
  galaxy: requirements.yml

additional_build_steps:
  prepend_galaxy:
    - ARG ANSIBLE_GALAXY_SERVER_LIST=automation_hub,release_galaxy
    - ARG ANSIBLE_GALAXY_SERVER_AUTOMATION_HUB_URL=https://console.redhat.com/api/automation-hub/content/published/
    - ARG ANSIBLE_GALAXY_SERVER_AUTOMATION_HUB_AUTH_URL=https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token
    - ARG ANSIBLE_GALAXY_SERVER_AUTOMATION_HUB_TOKEN

    - ARG ANSIBLE_GALAXY_SERVER_RELEASE_GALAXY_URL=https://galaxy.ansible.com/

options:
  package_manager_path: /usr/bin/microdnf

imagesdependenciesは書いてる通りなので説明は割愛。

ポイントはadditional_build_steps.prepend_galaxyにリスト形式で記載しているのはビルドを行うコンテナ内で使用する環境変数で、これはDockerfile/Containerfileで使う構文のARGと同様。内容についてはCLI(ansible-galaxy)でインストールする際にansible.cfgに記述する内容と同等。

公式ドキュメントには(トークン以外には)ENVが使われているが、コレクションインストールに必要な情報はビルドのみで使用し、ビルド結果のイメージでは不要なのでARGに変更している。
(ENVを使った環境変数指定はビルドした成果物であるイメージでも有効だがARGはビルドのみで有効という違いがあり、EEの実行時にAnsible Galaxy関連の情報は不要なのでARGを使って残らないようにしている)

www.docker.com

指定する環境変数は以下の通り。
ANSIBLE_GALAXY_SERVER_LIST=automation_hub,release_galaxyに指定したautomation_hubrelease_galaxyの文字列がそのまま以降の環境変数名となる。
具体的にはANSIBLE_GALAXY_SERVER_****_URLANSIBLE_GALAXY_SERVER_****_TOKEN****の部分。

環境変数 値の説明
ANSIBLE_GALAXY_SERVER_LIST Automation HubとGalaxyの2項目を設定するためカンマ区切りでキー名を指定
ANSIBLE_GALAXY_SERVER_AUTOMATION_HUB_URL ansible.cfggalaxy_server以下で指定したurlの内容
ANSIBLE_GALAXY_SERVER_AUTOMATION_HUB_AUTH_URL ansible.cfggalaxy_server以下で指定したauth_urlの内容
ANSIBLE_GALAXY_SERVER_AUTOMATION_HUB_TOKEN ansible.cfggalaxy_server以下で指定したauth_tokenに相当するがトークンは実行時に指定するためブランク
ANSIBLE_GALAXY_SERVER_RELEASE_GALAXY_URL 前述のurlと同様だがこれはAutomation HubでなくGalaxy用

requirements.ymlは同じディレクトリに以下の内容で作成

---
collections:
  - name: ansible.platform
  - name: ansible.controller
  - name: community.proxmox

拡張性を考慮してname:を入れてるけど、コレクション名だけでもOK

ビルド

トークンを環境変数REDHAT_AH_TOKENにセットした上で、以下を実行すればビルド可能。ただし…

ansible-builder build --tag custom --context . --build-arg ANSIBLE_GALAXY_SERVER_AUTOMATION_HUB_TOKEN=$REDHAT_AH_TOKEN

ただし、手動での作業ならこれでも大丈夫だが、ansible-builderの実行は「Running command」という名目でSTDOUTに--build-arg=ANSIBLE_GALAXY_SERVER_AUTOMATION_HUB_TOKEN=$REDHAT_AH_TOKENの中身が展開されて出力(表示)されるため、CI/CDなどの仕組みのログに残ってしまう問題がある。
そこで、ansible-builderContainerfileの出力のみを行い、ビルド自体はpodman buildを別途実行するのが簡単で良い。
(例えばGitHub ActionsであればコンテナビルドのためのActionがあるのでこの構成の方が都合が良い場合が多い)

# カレントディレクトリにContainerfile作成
ansible-builder create -c .

# 作成されたContainerfileで環境変数指定しつつイメージビルド
podman build -f ./Containerfile -t custom --build-arg=ANSIBLE_GALAXY_SERVER_AUTOMATION_HUB_TOKEN=$REDHAT_AH_TOKEN

2段階に分かれているので、execution-environment.ymlを更新した後に手動でリビルドする際は、ansible-builder createContainerfileを再生成するのを忘れずに。

あと上記サンプルはベースイメージをregistry.redhat.ioからpullする設定でコンテナレジストリへの認証が必要なため、これは事前にイメージビルドとは別にpodman loginしておく。


関連情報

docs.ansible.com

docs.ansible.com

zaki-hmkc.hatenablog.com

zaki-hmkc.hatenablog.com

zaki-hmkc.hatenablog.com

zaki-hmkc.hatenablog.com

zaki-hmkc.hatenablog.com




以上の内容はhttps://zaki-hmkc.hatenablog.com/entry/2025/11/15/161339より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14