AWX: オープンソースのTower †
有償のAnsible Towerをstable版とするなら、AWXはdev版。
- docker-composeで構成されている
- dockerのため、ログがホストOS上に残らない。dockerコンテナ内で閉じている。
AWX本体にPRを出す †
Vault: 暗号化された変数を使う †
不具合がある。
- バージョン毎の対応状況
- awx 6.0.0: 3.2.5と同じ。
- awx 3.2.5:
- OK: インベントリー変数で「_ansible_vault: >-」と1行毎の改行が必要
- NG: ジョブテンプレート内の追加変数「!vault |」が「Failed to parse variables.」で失敗。インベントリと同じ書式にしてダメ。
- OK: playbook内に変数として埋め込む
- awx 1.0.5:
- NG: インベントリー変数。3.2.5のような書き方をしても、そのまま表示される。
- NG: ジョブテンプレート内の追加変数「!vault |」が「Failed to parse variables.」で失敗。インベントリと同じ書式にしてダメ。
- OK: playbook内に変数として埋め込む
AWX UI上の作業
- 認証情報 > 追加
- 名前: local test vault
- CREDENTIAL TYPE: Vault
- VAULT パスワード: local-test-vault.txtの中身
webhookを受け取る †
AWX v1.0.5にはwebhookを受け取る方法が無い。webhook送信はある。
ロードバランサ、proxyの背後に置く場合 †
バックアップ/リストア †
以下直接DBをバックアップ/リストアしたい場合
バージョンの確認 †
- Webコンソール > About AWX をクリック
不具合 †
- job結果のリアルタイム更新が動作しない。v1.0.2で直ったかも。
- playbookの並列実行ができない。
- jobのslack通知がされない。UIの問題で通知onにしても、リロードするとoffになったままになる。
- docker PostgreSQLのデータディレクトリが 「/var/lib/postgresql/data」 から 「/var/lib/postgresql/data/pgdata」へ変わった。バージョンアップする時はpg_dump等でバックアップしておこう。
- データディレクトリを移動すれば起動するようになる
- docker PostgreSQLのデータディレクトリが「/tmp/pgdocker」に置いてあるせいで、tmpwatch(10日)で消されて壊れる不具合。以下が良いかもしれない。
- postgres_data_dir: /var/lib/pgdocker
LDAP認証 †
- ユーザ/グループをLDAPで管理できる。ユーザ認証だけLDAPで、権限/グループはAWXで管理も可能
- ユーザの初回ログイン時にLDAPに接続して、AWX上にユーザを作成する。そのため、 LDAP GROUP SEARCHが未設定だとユーザは作成されるが、グループ検索に失敗してログインできなかった
- LDAP認証に失敗する場合、以下を見ると分かる。直近1分
sudo docker logs -t --since "1m" awx_task
- LDAPユーザ属性マップから「"email": "mail"」を削除すると、emailを必須項目から外せる。
- LDAP BIND PWが「$enclipted$」の時に更新すると、別のパスワードに変わる事がある。BIND PWを再設定すると直る。バグっぽい。(v1.0.5)
ログを見る †
Docker Container †
sudo docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}"
CONTAINER ID IMAGE PORTS
6679d27d96c0 ansible/awx_task:1.0.5 8052/tcp
a641e866bcae ansible/awx_web:1.0.5 0.0.0.0:80->8052/tcp
909dc2f013aa memcached:alpine 11211/tcp
179ed843c916 ansible/awx_rabbitmq:3.7.4 4369/tcp, 5671-5672/tcp, 15671-15672/tcp, 25672/tcp
5f12da648e69 postgres:9.6 5432/tcp
アップグレード †
- releases バージョンを指定するのが良さそうだが、変更点がChangelog等の形式で纏まってない。
- データは引き継げない場合が多い。「AWX is Upgrading」のまま進まない。その場合は諦めて新規作成する。
- PostgreSQLのバックアップ
「AWX is Upgrading」のまま進まない場合 †
- 新規インストールでもセットアップ中は表示される。ただ、awx_taskのログにはエラーは無いので判断できる。
- 自動アップグレードは無理なので、データ消去してやり直す。
AWX 6.0.0 へアップグレード †
- CentOS 7.5 のvm上で確認
cd /opt/awx/
sudo git fetch
sudo git checkout 6.0.0
sudo vim installer/inventory
--
postgres_data_dir: /var/lib/pgdocker
dockerhub_version: 6.0.0
project_data_dir=/var/lib/awx/projects
--
# ansible 2.5.2 ではエラーが出たので更新。更新後 ansible 2.8.1
sudo yum update ansible -y
# pipが古くてエラーが出るので更新。
sudo pip install --upgrade pip
# "Cannot have both the docker-py and docker python modules" docker-pyとdockerptyが重複しているらしい
sudo pip uninstall docker docker-compose docker-py docker-pycreds dockerpty -y
sudo pip install docker-compose
# コンテナ名が変わっているので全てstop。古いコンテナは"awx"が付いていない
sudo docker stop $(sudo docker ps -aq)
# awx_task, awx_webの名前が重複して起動しないので、全て消す
sudo docker rm $(sudo docker ps -aq)
# 古いimageも全部消したい場合。時間がかかる。
sudo docker rmi -f $(sudo docker images | grep awx | awk '{ print $3 }')
# install
cd installer/
sudo ansible-playbook -i inventory install.yml
# エラーログが出ていないか確認
sudo docker logs -t --since "1m" awx_task
# 起動しているコンテナ一覧
sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
478c245937be ansible/awx_task:6.0.0 "/tini -- /bin/sh ..." 23 seconds ago Up 22 seconds 8052/tcp awx_task
ec85950fe4b2 ansible/awx_web:6.0.0 "/tini -- /bin/sh ..." 24 seconds ago Up 23 seconds 0.0.0.0:80->8052/tcp awx_web
d6b537742b69 ansible/awx_rabbitmq:3.7.4 "docker-entrypoint..." 11 minutes ago Up 24 seconds 4369/tcp, 5671-5672/tcp, 15671-15672/tcp, 25672/tcp awx_rabbitmq
a8ac0374577f postgres:9.6 "docker-entrypoint..." 11 minutes ago Up 24 seconds 5432/tcp awx_postgres
ca7dd18fd62a memcached:alpine "docker-entrypoint..." 11 minutes ago Up 25 seconds 11211/tcp awx_memcached
# 停止中コンテナ
sudo docker ps -a
...
761085d40a62 rabbitmq:3 "docker-entrypoint..." 2 hours ago Exited (0) 5 minutes ago rabbitmq
909dc2f013aa memcached:alpine "docker-entrypoint..." 14 months ago Exited (0) 5 minutes ago memcached
5f12da648e69 postgres:9.6 "docker-entrypoint..." 14 months ago Exited (0) 5 minutes ago
# 使ってないコンテナは削除。データも消えるので注意
sudo docker rm rabbitmq memcached 5f12da648e69
# imagesの確認
sudo docker images
...
ansible/awx_task 1.0.5 9359e95d415b 14 months ago 1.01GB
ansible/awx_web 1.0.5 9dba13b1e5ed 14 months ago 984MB
ansible/awx_task 1.0.5.24 578ac27bdfd6 15 months ago 1.01GB
ansible/awx_web 1.0.5.24 ed24a6014237 15 months ago 985MB
...
rabbitmq 3 8e186865bff8 21 months ago 124MB
...
# 古いimageが不用であればディスクを食うので削除
sudo docker rmi 9359e95d415b 9dba13b1e5ed 578ac27bdfd6 ed24a6014237 8e186865bff8
インストール †
- 「/var/lib/awx/projects」が無くて、local projectを作れない、playbookが実行できないので、local project用ディレクトリを作成するように設定を変える
- AWXに/var/lib/awx/projectsがない時の対処 | 日常系エンジニアのTech Blog
cd /opt/awx/
sudo vim installer/inventory
--
postgres_data_dir: /var/lib/pgdocker
dockerhub_version: 1.0.5
project_data_dir=/var/lib/awx/projects
--
sudo ansible-playbook -i installer/inventory installer/install.yml
- project毎にplaybookディレクトリを指定できるので、「local test」用ディレクトリを作成
sudo mkdir -p /var/lib/awx/projects/test/
sudo vim /var/lib/awx/projects/test/playbook.hello.yml
--
- hosts: localhost
connection: local
gather_facts: no
become: no
tasks:
- debug:
msg: "Hello World!"
--
- インベントリーの追加: playbookを実行するホストを指定する
- プロジェクトの追加: playbookのある git, svn, localといった場所を指定する
- 名前: local test
- 組織: Default
- SCMタイプ: 手動
- プロジェクトのベースパス(変更不能): /var/lib/awx/projects
- 保存
- ジョブテンプレートの追加: playbookを実行するテンプレートを作成する
- 追加 > ジョブテンプレート
- 名前: hello world
- インベントリー: local test
- プロジェクト: local test
- playbook: playbook.hello.yml
- 保存
- 実行
- PORTAL MODE > 「hellow world」 テンプレートを選択
- アクションのロケットアイコンクリックで実行
- 「"msg": "Hello World!"」のように表示されれば成功