この記事は、Ansible Advent Calendar 2021 (Adventar版) 16日目の記事です。
はじめに
ansible-builder では、requirements.yml
にインストールしたいコレクションを指定し、Execution Environment 定義ファイル(デフォルトでは execution-environment.yml
)に
dependencies: galaxy: requirements.yml
のように指定すると、ビルドするイメージ内にコレクションをインストールできます。
Execution Environment Definition — ansible-builder 1.0.1 documentation
デフォルトでは Ansible Galaxy 経由のコレクションです。
Automation Hub 経由のコレクションをインストールするには、少し仕込みが必要です。この記事では手順を紹介します。
- 動作確認環境
- ansible-builder 1.0.1
requirements.yml
の用意
今回はこんなものを利用します。ansible.controller
コレクションが Galaxy になく Automation Hub の方にしかないコレクションです。
--- collections: - cisco.ios - cisco.iosxr - cisco.nxos - junipernetworks.junos - seiko.smartcs - ansible.controller # Galaxy になく Automation Hub の方にしかないもの
ansible.cfg
の用意
(Automation Hub 経由のコレクションをansible-galaxy collection install
でインストールしたい場合と同じです)
Automation Hub への接続するためのトークンを取得し、ansible.cfg
で接続先やトークンの指定をします。
以下の過去の記事をご参照ください。
Execution Environment 定義ファイルの用意
Execution Environment 定義ファイル(デフォルトでは execution-environment.yml
)内の、ansible_config
に ansible.cfg
のパスを指定します。
先程用意した requirements.yml
も指定します。
version: 1 build_arg_defaults: EE_BASE_IMAGE: 'quay.io/ansible/ansible-runner:stable-2.12-devel' ansible_config: ansible.cfg # ポイント1 dependencies: galaxy: requirements.yml # ポイント2
ビルド
ここまで作ったファイルは以下のとおりです。
$ ls -1 ansible.cfg execution-environment.yml requirements.yml
この場所で通常通り、ansible-builder build
コマンドでビルドします。
例
ansible-builder build -t localhost/my-ee
確認
ビルドしたイメージに目的のコレクションがインストールされたことを確認します。
ansible-navigator collections
で確認する場合
コマンド例
ansible-navigator collections --pp never --eei localhost/my-ee
今回は、ローカルのイメージを使うので、pull しないオプション --pp never
を指定しています。
各オプションは ansible-navigator.yml
で指定してもOKです。
結果例
NAME VERSION SHADOWED TYPE PATH 0│ansible.controller 4.1.0 False contained /usr/share/ansible/collections/ansible_collections/ansible/controller/ 1│ansible.netcommon 2.5.0 False contained /usr/share/ansible/collections/ansible_collections/ansible/netcommon/ 2│ansible.utils 2.4.3 False contained /usr/share/ansible/collections/ansible_collections/ansible/utils/ 3│cisco.ios 2.6.0 False contained /usr/share/ansible/collections/ansible_collections/cisco/ios/ 4│cisco.iosxr 2.6.0 False contained /usr/share/ansible/collections/ansible_collections/cisco/iosxr/ 5│cisco.nxos 2.8.1 False contained /usr/share/ansible/collections/ansible_collections/cisco/nxos/ 6│junipernetworks.junos 2.8.0G ON ITFalse contained /usr/share/ansible/collections/ansible_collections/junipernetworks/junos/ 7│seiko.smartcs 1.4.1 False contained /usr/share/ansible/collections/ansible_collections/seiko/smartcs/
ansible.controller
コレクション含め、インストールされていることが分かります。
コンテナ内の ansible-galaxy collection list
で確認する場合
コマンド例
podman run -it localhost/my-ee ansible-galaxy collection list
結果例
$ podman run -it localhost/my-ee ansible-galaxy collection list # /usr/share/ansible/collections/ansible_collections Collection Version --------------------- ------- ansible.controller 4.1.0 ansible.netcommon 2.5.0 ansible.utils 2.4.3 cisco.ios 2.6.0 cisco.iosxr 2.6.0 cisco.nxos 2.8.1 junipernetworks.junos 2.8.0 seiko.smartcs 1.4.1