AWX EEのansible coreにコレクションを追加してみた

どうも、Tです。

AWX EEのansible coreにコレクションを追加してみた備忘録です。

環境

AWX

24.6.1

やりたいこと

先日、AWX EE(Execution Environment)コンテナのansible coreに含まれるコレクションを調べてみました。

AWX EEコンテナのデフォルトのコレクションを調べてみた
どうも、Tです。 AWXのEEコンテナで使われているコレクションは何があるのか調べてみた備忘録です。 環境 AWX 24...

デフォルトでAWX EEに含まれないコレクションを使いたい場合は、どうすればいいのか?と調べたところ下記の2通りがありました。

カスタムEEを作成する

必要なコレクションを含んだ自分用のカスタムEEをビルドして作成し、AWXで利用する方法です。これはなかなか手間になりそうなため諦めました。

14. Execution Environments — Automation Controller User Guide v4.1.1
 赤帽さんのブログにも記載されていますが、コレクションがPythonモジュールに依存していたり、設定回りをカスタマイズする必要がある場合は、カスタムEEを作成する必要があるらしいです(カスタムEE以外の対応方法がない)。

デフォルトのAWX EEにコレクションをインストールする

もう1つの方法は、AWXに含まれているEEにコレクションをインストールする方法です。

AWXにドキュメントはありませんが、製品版のAutomation Controller(旧Ansible Tower)のドキュメントでは、下記のファイルを準備することによりジョブ(Palybook)の実行前にコレクションをインストールしてくれると記載されています。

<Ansibleプロジェクト名>/collections/requirements.yml
17. Projects — Automation Controller User Guide v4.4

本記事ではこちらの方法を試していきます。

この方法はPlaybook実行時に下記の動作になるためジョブに時間がかかるようになるのがネックです。しかし、手軽さからこちらを使おうと思います。
1.ジョブ実行
2.AWX EEコンテナのデプロイ
3.コレクションインストール ★実行するたびにインストール時間がかかる
4.ジョブ終了
5.AWX EEコンテナの削除

コレクションインストールと確認

本手順では、AWX EEにコレクションをインストールして、コレクションがインストールされていることを確認するところまで行います。

事前設定確認

「設定」->「ジョブ」->「ジョブ設定」を開き「コレクションのダウンロードを有効にする」が「オン」であることを確認します。※デフォルトでオンになっていますが念のため確認。

インベントリー・ホスト設定

インベントリー「localhost」を作成します。

AWX EEコンテナ内でPlaybookを実行するため、ホストは「127.0.0.1」を指定しておきます。

プロジェクト設定

下記2つのファイルを作成しGitHubにPushしておきます。

インストールするコレクションを指定するファイルです。ファイル名は「requirements.yml」の必要があります。versionを指定しない場合は、最新バージョンがインストールされます。

requirements.yml

---
collections:
  - name: community.general
    version: 11.1.0
  - name: community.mysql
    version: 3.13.0
  - name: community.proxmox
    version: 1.2.0

コレクションは下記のgalaxyのサイトから確認できます。

Ansible Galaxy

AWX EEに含まれるコレクションをジョブのログに出力させるPlaybookです。ファイル名は任意です。

show_collections.yml

---
- name: Show installed collections inside EE
  hosts: localhost
  gather_facts: false
  connection: local
  tasks:
    # Ansible コレクションの取得
    - name: List installed collections
      ansible.builtin.command: ansible-galaxy collection list
      register: collection_list
    # Ansible コレクションのログ出力
    - name: Print collection list
      ansible.builtin.debug:
        msg: "{{ collection_list.stdout_lines }}"

    # Ansible モジュールの取得
    - name: List installed modules
      ansible.builtin.command: ansible-doc -l
      register: module_list
    # Ansible モジュールのログ出力
    - name: Print module list
      ansible.builtin.debug:
        msg: "{{ module_list.stdout_lines }}"

作成したファイルは、下記のディレクトリ構成で保存しています。

requirements.ymlは、下記のようにcollectionsディレクトリ配下に保存する必要があります。
<Ansibleプロジェクト名>/collections/requirements.ymlドキュメントに説明はありませんでしたが下記でも動作しました。
<Ansibleプロジェクト名>/requirements.yml下記は動作しませんでした。
<Ansibleプロジェクト名>/<任意のディレクトリ名>/requirements.yml

GitHubと連携しているプロジェクトの「アクション」->「プロジェクトの同期」アイコンをクリックし、同期が成功することを確認します。

テンプレート設定

下記のジョブテンプレートを作成し「起動」をクリックします。

主な設定項目
名前 任意の名前
インベントリー localhost
プロジェクト 今回のPlaybook用に作成したプロジェクト
Playbook 作成したPlaybook
実行環境 AWX EE(24.6.1))

結果

ログに指定したコレクションが表示され、インストールされていることが確認できます。

参考

17. Projects — Automation Controller User Guide v4.4
Installing and using collections on Ansible Tower
Ansible Collections are the new way to distribute and manage content.

まとめ

ジョブの実行時間が少し長くなりますが、検証環境としてはこれで十分そうです。