どうも、Tです。
AWX EEのansible coreにコレクションを追加してみた備忘録です。
目次
環境
AWX
24.6.1
やりたいこと
先日、AWX EE(Execution Environment)コンテナのansible coreに含まれるコレクションを調べてみました。
デフォルトでAWX EEに含まれないコレクションを使いたい場合は、どうすればいいのか?と調べたところ下記の2通りがありました。
カスタムEEを作成する
必要なコレクションを含んだ自分用のカスタムEEをビルドして作成し、AWXで利用する方法です。これはなかなか手間になりそうなため諦めました。
デフォルトのAWX EEにコレクションをインストールする
もう1つの方法は、AWXに含まれているEEにコレクションをインストールする方法です。
AWXにドキュメントはありませんが、製品版のAutomation Controller(旧Ansible Tower)のドキュメントでは、下記のファイルを準備することによりジョブ(Palybook)の実行前にコレクションをインストールしてくれると記載されています。
<Ansibleプロジェクト名>/collections/requirements.yml
本記事ではこちらの方法を試していきます。
1.ジョブ実行
2.AWX EEコンテナのデプロイ
3.コレクションインストール ★実行するたびにインストール時間がかかる
4.ジョブ終了
5.AWX EEコンテナの削除
コレクションインストールと確認
本手順では、AWX EEにコレクションをインストールして、コレクションがインストールされていることを確認するところまで行います。
事前設定確認
「設定」->「ジョブ」->「ジョブ設定」を開き「コレクションのダウンロードを有効にする」が「オン」であることを確認します。※デフォルトでオンになっていますが念のため確認。
インベントリー・ホスト設定
インベントリー「localhost」を作成します。
AWX EEコンテナ内でPlaybookを実行するため、ホストは「127.0.0.1」を指定しておきます。
プロジェクト設定
本記事はAWXへPalybookの受け渡しにGitHubと連携して行っています。
AWXとGitHubの連携方法は、下記にまとめています。
下記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のサイトから確認できます。
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 }}"
作成したファイルは、下記のディレクトリ構成で保存しています。
<Ansibleプロジェクト名>/collections/requirements.ymlドキュメントに説明はありませんでしたが下記でも動作しました。
<Ansibleプロジェクト名>/requirements.yml下記は動作しませんでした。
<Ansibleプロジェクト名>/<任意のディレクトリ名>/requirements.yml
テンプレート設定
下記のジョブテンプレートを作成し「起動」をクリックします。
主な設定項目 | 値 |
---|---|
名前 | 任意の名前 |
インベントリー | localhost |
プロジェクト | 今回のPlaybook用に作成したプロジェクト |
Playbook | 作成したPlaybook |
実行環境 | AWX EE(24.6.1)) |
結果
ログに指定したコレクションが表示され、インストールされていることが確認できます。
参考
まとめ
ジョブの実行時間が少し長くなりますが、検証環境としてはこれで十分そうです。