Ansible Automation Platform 2.0 Early Access Homepage - Red Hat Customer Portal
巷で流行っている次期Ansible TowerになるAnsible Automation Platform (2.0 Early Access)を手元の環境へインストールしてみる。開発者ライセンスがあればOKの模様。
インストールガイドは日本語版も公開されている。
本エントリは2021.08.04時点の2.0 Early Access版の情報なので、GAになるとまた少し変わるかもしれないので注意。
開発者ライセンスのサブスクリプションで利用できるリポジトリを確認すると、Ansible Automation Platform 2.0 Early Accessもリストにあるので多分大丈夫なはず。。
※ 公開後にフォローいただいた内容をいくつか追記
システム要件
目の前にある物理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」をダウンロード
[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のインストールについては下記も参照。
単一マシンへのインストール
今回は1つのノード(RHEL8ネイティブ)へAnsible Automation Controller 4.0とDBを入れる。
ドキュメントはこちら。
インベントリファイル
アーカイブを展開し、インベントリファイルを作成。
最低限変更箇所は以下の通り。
- 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
レジストリ情報については以下。
インストールするときにinventoryファイルに指定する方法に修正予定です。
— すぎむら (@sugitk) 2021年7月25日
この3つを設定してからhttps://t.co/YPACvcG2I4を実行してください。早めにドキュメントにも書きます。
[all:vars]
registry_username='<red hat id>'
registry_password='XXXXXXXX'
registry_url='https://t.co/E4SuDY2Reb'
なお、レジストリの認証情報は最悪無くてもあとから設定するワークアラウンドがある(後述)
インストール
言語設定
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.
dnf install glibc-langpack-en
— すぎむら (@sugitk) 2021年7月13日
export LANG=C
./setup.sh
でインストール
現状のワークアラウンドとしては、言語パッケージを入れて、LANG
環境変数はC
にしてインストールすれば回避できる。
$ sudo dnf install glibc-langpack-en
手元で試した限り、このパッケージインストールは無くても良いかも…と思ったけど、DBの作成がうまくいかないかもしれないのであった方が良いかもしれない。
RAM はインベントリの [all:vars] に required_ram=1 とか書いておけばよいです。
— すぎむら (@sugitk) 2021年8月4日
glibc-langpack-en は入ってないとDBが作れなかったかもなーと思っていたんですが、なくてもいいかもしれません。
nginx-mod* でこけるのはtaskを直す予定です。
いろいろ見ていただいてありがとうございます 😇
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
をオプションに追加してインストールする。
インストール
特権必要なので、sudo
つけるかrootユーザーで実行。
LANG環境変数もあるのでrootユーザーで実行するのが確実かな。
手元の環境ではLANG環境変数はsudo
で渡せたのでsudo
で。
あと前述のメモリサイズ(とレジストリの認証情報)に気を付ければ特に問題ないはず。
$ time sudo ./setup.sh -e ignore_preflight_errors=True
手元の環境では10分強で完了。
エラーが無ければ、インストールしたノードへHTTPSアクセスすればAutomation ControllerのUIのログイン画面になる。
Ansible Automation Platform
サブスクリプション
初回ログイン時はサブスクリプションの入力が必要。
開発者ライセンスを使っている場合は、「ユーザー名/パスワード」を押下し、Red Hatアカウント情報を入力して「サブスクリプションの取得」押下。
サブスクリプションが表示されるので選択。
選択済みにサブスクリプション名がでるので確認して「次へ」で進める。
ユーザーとInsightsのアナリティクス
任意で。
使用許諾
ライセンスとかちゃんと入っていれば「送信」が押下できるので「送信」
正常に処理完了すればダッシュボード画面が表示される。
ジョブ実行
サンプルジョブを実行。
「テンプレート」に「Demo Job Template」があるのでテンプレートを起動。
インベントリファイルでレジストリ情報を入力していれば問題なくジョブが実行されるはず。
認証情報追加するには
インベントリにレジストリの認証情報を入力していない場合下記エラーになり、プロジェクトの同期に失敗する。
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」のみ認証情報設定がグレーアウトされ設定できないようになっている。
インベントリにRed Hatアカウントを入力していると、この情報が設定済みの状態でセットアップされる。
awxユーザーでレジストリの認証情報作成
回避策として、Ansible Automation Controllerをインストールしたホストのawxユーザーでpodman login
で認証情報をホスト上に作成する。
awx ユーザで
— すぎむら (@sugitk) 2021年7月14日
$ podman login https://t.co/E4SuDY2Reb
してみる
[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については以下も参照。