zaki work log

作業ログやら生活ログやらなんやら

Ansible Automation Platform 2.0 Early Accessお試し (Automation Controller 4.0でデモジョブ実行まで)

Ansible Automation Platform 2.0 Early Access Homepage - Red Hat Customer Portal

巷で流行っている次期Ansible TowerになるAnsible Automation Platform (2.0 Early Access)を手元の環境へインストールしてみる。開発者ライセンスがあればOKの模様。

access.redhat.com

インストールガイドは日本語版も公開されている。
本エントリは2021.08.04時点の2.0 Early Access版の情報なので、GAになるとまた少し変わるかもしれないので注意。

開発者ライセンスのサブスクリプションで利用できるリポジトリを確認すると、Ansible Automation Platform 2.0 Early Accessもリストにあるので多分大丈夫なはず。。

f:id:zaki-hmkc:20210804203343p:plain

※ 公開後にフォローいただいた内容をいくつか追記

システム要件

目の前にある物理ESXiに、RHEL 8.4のVMを1つ作成。
システム要件は下記。

1.1. Red Hat Ansible Automation Platform のシステム要件

  • CPU: 最小2つ
  • RAM: 最小4GB
  • ストレージ: 40GB + DBで20GB

今回はサービスノードとDBを共用の予定なので60GBで。
ちなみにRAMは、最小4GBとなってるが実際にインストールしようとすると7400MBあるかどうかチェックしてるっぽくてエラーになる。8GBにしておくと無難。
あと、このエントリの手順ではインターネットアクセスも必要。

インストーラーの準備

ダウンロードページから「Ansible Automation Platform 2.0.0 Setup」をダウンロード

f:id:zaki-hmkc:20210804194952p:plain

[zaki@aap-ea ~]$ tar xf ansible-automation-platform-setup-2.0.0-1-early-access.tar.gz 
[zaki@aap-ea ~]$ ls -F
ansible-automation-platform-setup-2.0.0-1-early-access/
ansible-automation-platform-setup-2.0.0-1-early-access.tar.gz

RHELサブスクリプション

OSインストール後に開発者ライセンスを登録済み

[zaki@aap-ea ~]$ sudo subscription-manager list --consumed | grep Ansible
                          Red Hat Ansible Automation Platform
                          Red Hat Ansible Engine

開発者ライセンスを使ったAnsible Towerのインストールについては下記も参照。

zaki-hmkc.hatenablog.com

単一マシンへのインストール

今回は1つのノード(RHEL8ネイティブ)へAnsible Automation Controller 4.0とDBを入れる。
ドキュメントはこちら。

access.redhat.com

インベントリファイル

アーカイブを展開し、インベントリファイルを作成。
最低限変更箇所は以下の通り。

  • admin_password
  • pg_password

もう1点、構築後のRed Hatのコンテナレジストリへの認証情報を追加も行う。各パラメタに、Red Hatアカウントの情報を記入する。
変更点は全体でこんな感じ。

$ diff -u inventory.org inventory
--- inventory.org       2021-07-13 20:24:51.000000000 +0900
+++ inventory   2021-08-04 17:23:17.647128071 +0900
@@ -8,14 +8,18 @@
 [servicescatalog_workers]
 
 [all:vars]
-admin_password=''
+admin_password='adminのパスワード'
+
+registry_username='Red Hatアカウント名'
+registry_password='パスワード'
+registry_url=https://registry.redhat.io
 
 pg_host=''
 pg_port=''
 
 pg_database='awx'
 pg_username='awx'
-pg_password=''
+pg_password='password'
 pg_sslmode='prefer'  # set to 'verify-full' for client-side enforced SSL
 
 # Automation Hub Configuration

レジストリ情報については以下。

なお、レジストリの認証情報は最悪無くてもあとから設定するワークアラウンドがある(後述)

インストール

言語設定

8/3時点でドキュメンテーションされてないっぽいけど、シェルの言語設定が日本語だと途中以下のエラーがでてうまくいかない。

TASK [ansible.automation_platform_installer.packages_el : Uninstall nginx-all-modules] ***
fatal: [localhost]: FAILED! => {"changed": false, "failures": ["nginx-mod* - 一致した引数がありません: nginx-mod*"], "msg": "Failed to install some of the specified packages", "rc": 1, "results": []}

:
:

[error] Oops!  An error occurred while running setup.
[warn] /var/log/tower does not exist. Setup log saved to setup.log.

現状のワークアラウンドとしては、言語パッケージを入れて、LANG環境変数Cにしてインストールすれば回避できる。

$ sudo dnf install glibc-langpack-en

手元で試した限り、このパッケージインストールは無くても良いかも…と思ったけど、DBの作成がうまくいかないかもしれないのであった方が良いかもしれない。

access.redhat.com

RAMサイズ

前述したけど、実は4GBじゃない。
足りてない構成でインストールしようとすると、下記エラーになる。

TASK [ansible.automation_platform_installer.preflight : Preflight check - Fail if this machine lacks sufficient RAM.] ***
fatal: [localhost]: FAILED! => {"changed": false, "msg": "This machine does not have sufficient RAM to run Ansible Automation Platform."}

メッセージで検索すると、下記roleでメモリチェックしてる。

$ less collections/ansible_collections/ansible/automation_platform_installer/roles/preflight/tasks/main.yml 
:
:
- name: Preflight check - Fail if this machine lacks sufficient RAM.
  fail:
    msg: This machine does not have sufficient RAM to run Ansible Automation Platform.
  when:
    - ansible_memtotal_mb < required_ram|int
    - not ignore_preflight_errors| default(false) | bool

最初は4GBちょうどで作ったからかなー、と6GBに増やして再実行…したら同じエラーになった。
もっと確認すると、チェックに使う変数required_ramが4GBじゃなくて以下の通り7400となっている。

$ find . -type f | xargs grep required_ram
./collections/ansible_collections/ansible/automation_platform_installer/roles/preflight/defaults/main.yml:required_ram: 7400

というわけで、ノードのRAMを8GBくらいにするか、-e ignore_preflight_errors=Trueをオプションに追加してインストールする。

表2.2 追加変数

インストール

特権必要なので、sudoつけるかrootユーザーで実行。
LANG環境変数もあるのでrootユーザーで実行するのが確実かな。

手元の環境ではLANG環境変数sudoで渡せたのでsudoで。
あと前述のメモリサイズ(とレジストリの認証情報)に気を付ければ特に問題ないはず。

$ time sudo ./setup.sh -e ignore_preflight_errors=True

手元の環境では10分強で完了。
エラーが無ければ、インストールしたノードへHTTPSアクセスすればAutomation ControllerのUIのログイン画面になる。

f:id:zaki-hmkc:20210804200414p:plain

Ansible Automation Platform

サブスクリプション

初回ログイン時はサブスクリプションの入力が必要。
開発者ライセンスを使っている場合は、「ユーザー名/パスワード」を押下し、Red Hatアカウント情報を入力して「サブスクリプションの取得」押下。

f:id:zaki-hmkc:20210804200743p:plain

サブスクリプションが表示されるので選択。

f:id:zaki-hmkc:20210804200620p:plain

選択済みにサブスクリプション名がでるので確認して「次へ」で進める。

f:id:zaki-hmkc:20210804200659p:plain

ユーザーとInsightsのアナリティクス

任意で。

使用許諾

ライセンスとかちゃんと入っていれば「送信」が押下できるので「送信」
正常に処理完了すればダッシュボード画面が表示される。

f:id:zaki-hmkc:20210804200946p:plain

ジョブ実行

サンプルジョブを実行。
「テンプレート」に「Demo Job Template」があるのでテンプレートを起動。

f:id:zaki-hmkc:20210804201241p:plain

インベントリファイルでレジストリ情報を入力していれば問題なくジョブが実行されるはず。

f:id:zaki-hmkc:20210804201454p:plain

認証情報追加するには

インベントリにレジストリの認証情報を入力していない場合下記エラーになり、プロジェクトの同期に失敗する。

Error: Error initializing source docker://registry.redhat.io/ansible-automation-platform-20-early-access/ee-supported-rhel8:2.0.0: unable to retrieve auth token: invalid username/password: unauthorized: Please login to the Red Hat Registry using your Customer Portal credentials. Further instructions can be found here: https://access.redhat.com/RegistryAuthentication

UIの「認証情報」メニューでコンテナレジストリの情報を作成し、「実行環境」にコンテナレジストリの認証情報を追加することは基本的にできるけど、このプロジェクト更新に必要な「Control Plane Execution Environment」のみ認証情報設定がグレーアウトされ設定できないようになっている。

f:id:zaki-hmkc:20210804202101p:plain

インベントリにRed Hatアカウントを入力していると、この情報が設定済みの状態でセットアップされる。

f:id:zaki-hmkc:20210804201358p:plain

awxユーザーでレジストリの認証情報作成

回避策として、Ansible Automation Controllerをインストールしたホストのawxユーザーでpodman loginで認証情報をホスト上に作成する。

[awx@aap-ea ~]$ podman login registry.redhat.io
Username: zaki-rh
Password: 
Login Succeeded!
[awx@aap-ea ~]$

ログインすると手元の環境では /tmp/podman-run-985/containers/auth.json に認証情報作成される。 この状態になれば、プロジェクトの同期ができるようになるので、ジョブが実行できるようになる。

ちなみにコンテナエンジンは当然だけどPodmanが使用されている。


ひとまずTowerの次期バージョンになるAnsible Automation Controller 4.0を試してみた。
まだ用語を把握できてないんだけど、Ansible Automation ControllerはAnsible Automation Platform 2.0の構成要素の一つってことかな?ほかにAutomation Hubとかがあるって認識。

Execution Environmentsについては以下も参照。

zaki-hmkc.hatenablog.com


参考

access.redhat.com

access.redhat.com