🌿

Ansible Navigator 環境に collections を追加する

2022/12/21に公開

目的

Ansible Navaigator 環境に含まれていない Collections のモジュールを実行できるようにします。

環境に含まれていない Collections を使用したらどうなるか?

エラーになります。例えば Community.Crypto Collection は環境に含まれていないため、community.crypto.openssh_keypair モジュールを使用したときは以下のようにエラーになります。

ex1.yml
---
- name: test
  hosts: all

  tasks:
    - name: Generate an OpenSSH keypair with the default values (4096 bits, rsa)
      community.crypto.openssh_keypair:
        path: /tmp/id_ssh_rsa
y_mrok@pc:~/ex/openssh_keypair$ ansible-navigator run ex1.yml -i hosts.yml -m stdout
ERROR! couldn't resolve module/action 'community.crypto.openssh_keypair'. This often indicates a misspelling, missing collection, or incorrect module path.

The error appears to be in '/home/y_mrok/ex/openssh_keypair/ex1.yml': line 6, column 7, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

  tasks:
    - name: Generate an OpenSSH keypair with the default values (4096 bits, rsa)
      ^ here
Please review the log for errors.
y_mrok@pc:~/ex/openssh_keypair$ 

対応

  • 使用したいモジュールの Collections を含むカスタムコンテナを作成します
  • 作成したカスタムコンテナを使用して play を実行します

カスタムコンテナの作成手順

Ansible Navigator を導入済みの環境で ansible-builder コマンドを使用してカスタムコンテナを作成します。

  1. 作業用ディレクトリーを作成する
  2. カスタムコンテナを作成するのに必要なファイルを作成する
  3. ansible-builder コマンドでカスタムコンテナを作成する

実践

作業用ディレクトリーを作成する

コマンド

mkdir ~/builder
cd ~/builder

実行ログ

y_mrok@pc:~$ mkdir ~/builder
y_mrok@pc:~$ cd ~/builder
y_mrok@pc:~/builder$ 

必要なファイルを作成する

作成するファイル

  • custom-ee.yml
    • カスタムコンテナを作成するための定義
    • 任意のファイル名が可能(例:custom-ee.yml )
  • requirements.yml
    • Ansible.Builtin Collecton 以外の追加する collections を指定( Ansible.Builtin Collection はデフォルトで含まれるため指定不要)
    • ファイル名は requirements.yml

記述例

collections の追加に特化して記述します。[1]

custom-ee.yml
---
version: 1

build_arg_defaults:
  EE_BASE_IMAGE: 'quay.io/ansible/ansible-runner:latest'
  EE_BUILDER_IMAGE: 'quay.io/ansible/ansible-builder:latest'

dependencies:
  galaxy: requirements.yml

シーケンス形式で追加したい collections を指定します。

requirements.yml
---
collections:
  - community.general
  - community.crypto

ファイルの配置状況です。

y_mrok@pc:~/builder$ tree ~/builder
/home/y_mrok/builder
├── custom-ee.yml
└── requirements.yml

0 directories, 2 files
y_mrok@pc:~/builder$ 

カスタムコンテナを作成する

コマンド

ansible-builder build -f custom-ee.yml -t custom-ee:1.0.0 --prune-images

実行ログ

時間を要します。

y_mrok@pc:~/builder$ ansible-builder build -f custom-ee.yml -t custom-ee:1.0.0 --prune-images
Running command:
  podman build -f context/Containerfile -t custom-ee:1.0.0 context
Running command:
  podman image prune --force
Complete! The build context can be found at: /home/y_mrok/builder/context
y_mrok@pc:~/builder$ 

作成結果を確認

tree ~/builder
podman images
y_mrok@pc:~/builder$ tree ~/builder
/home/y_mrok/builder
├── context
│   ├── Containerfile
│   └── _build
│       └── requirements.yml
├── custom-ee.yml
└── requirements.yml

2 directories, 4 files
y_mrok@pc:~/builder$ podman images
REPOSITORY                       TAG         IMAGE ID      CREATED        SIZE
localhost/custom-ee              1.0.0       eeea48f61208  2 minutes ago  1.07 GB
quay.io/ansible/ansible-runner   latest      bec0dc171168  7 months ago   816 MB
quay.io/ansible/creator-ee       v0.4.2      12571ac947cf  8 months ago   2.4 GB
quay.io/ansible/ansible-builder  latest      b0348faa7f41  10 months ago  779 MB
y_mrok@pc:~/builder$ 

動作確認

--eei オプションを使用して作成したカスタムコンテナを指定し play を実行します。実行時にカスタムコンテナを指定した実行ログです。今度は正常に実行できました。

y_mrok@pc:~/ex/openssh_keypair$ ansible-navigator run ex1.yml -i hosts.yml --eei=localhost/custom-ee:1.0.0 -m stdout

PLAY [test] ********************************************************************

TASK [Gathering Facts] *********************************************************
ok: [node1]

TASK [Generate an OpenSSH keypair with the default values (4096 bits, rsa)] ****
changed: [node1]

PLAY RECAP *********************************************************************
node1                      : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
y_mrok@pc:~/ex/openssh_keypair$ 

参考文献

技術評論社 Software Design 2022年9月号
短期連載 新生「Ansible」徹底解説 [4]Playbookの実行環境(基礎編)
https://gihyo.jp/magazine/SD/archive/2022/202209

後記

Ansible Navigator 環境で Collections の追加方法がわからず、いろいろと調べていました。何となく理解はできていた(と思いたい)のですが、具体的にどうするのかがわからずにいました。参考文献のおかげですっきりしました。感謝、感謝です。

脚注
  1. 詳細は「 Automation Controller User Guide v4.1.1 » 15.実行環境の設定リファレンス」をご確認ください。 ↩︎

Discussion