AWXをなんとか動かした

Ansible TowerのOSS版であるAWXを使ってみたくてようやくMacで動かせるとこまでのメモ。 AWXを使えるようになって個人では何が嬉しいかと言われるとGUIでジョブの管理ができるのでいいのではと思った。 個人で使ってメリットを享受できるかはわからないけど使って見たかったのでメモを残す。

詳しい説明はいいのがあったのでこっちを参照。

ansible/ansible-tower at master · h-kojima/ansible · GitHub

動かし方

環境

環境はだいぶ変則的。

  • AWX: 3.0.1
  • AWXの動かし方: docker-compose
  • OS: macOS Mojave 10.14
  • Python: 3.7.2(anaconda3-5.3.1 かつ pyenv使用)
  • Ansible: 2.7.10

4.0.0のバージョンはmacだとうまく動かなかったので新しいのが出たら多分解決するかも。

前提条件

INSTALL.mdに書いてある通りに必要なものをインストールする。

awx/INSTALL.md at devel · ansible/awx · GitHub

Dockerのインストールは、省略。検索すればなんとかなると思う。 あと、必要なpipモジュールのdocker-composeをインストールする。

pip install docker-compose

AWXのインストールと実行

AWXをクローンして、現在(2019/5/17時点)うまく動くと思われる3.0.1に切り替える。最新の安定板4.0.0にしないのは、PCが強制終了で落ちた後docker-compose up -dで実行しても再起動できなくなったから。

git clone https://github.com/ansible/awx 
cd awx
git checkout -b 3.0.1

次にdocker-composeが使えるように、awx/installer/inventoryの修正をする。

# Common Docker parameters
awx_task_hostname=awx
awx_web_hostname=awxweb
# postgres_data_dir=/tmp/pgdocker
postgres_data_dir=/Users/pogin/.local/share/pgdocker
host_port=80
# Docker Compose Install
# use_docker_compose=false
use_docker_compose=true
# The docker_compose.yml file will be created in this directory
# The name of the directory (here "awx") will be the prefix of the docker containers
docker_compose_dir=/Users/pogin/.local/share/awxcompose

変更しないといけないのはdocker_compose_dirパーミッションの関係でエラーが起こる。 postgres_data_diruse_docker_caomposeを変更する理由としては、それぞれ以下の理由。

  • postgres_data_dirは、/tmp/pgdockerにするとVer.4.0.0の時にAWXが動かなくなることが多発して面倒なのでとりあえず変更しとく。
  • use_docker_composeは、docker_compose_dirに設定したディレクトリで、次回からdocker-compose startができるようになるのでtrueに変更しておく。

次はinstall.ymlを実行してAWXのインストールと実行をする。

cd awx/installer
ansible-playbook -i inventory install.yml

実行後、以下の箇所まで行けば多分成功。

PLAY RECAP ********************************************************************************************
localhost                  : ok=7    changed=3    unreachable=0    failed=0

確認のため、docker psでを実行はするとこんな風に

CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                                                 NAMES
f3c91abd95b8        ansible/awx_task:3.0.1       "/tini -- /bin/sh -c…"   About an hour ago   Up About an hour    8052/tcp                                              awxcompose_task_1
1e67b9993273        ansible/awx_web:3.0.1        "/tini -- /bin/sh -c…"   About an hour ago   Up About an hour    0.0.0.0:80->8052/tcp                                  awxcompose_web_1
77c62f06ccb4        ansible/awx_rabbitmq:3.7.4   "docker-entrypoint.s…"   About an hour ago   Up About an hour    4369/tcp, 5671-5672/tcp, 15671-15672/tcp, 25672/tcp   awxcompose_rabbitmq_1
085ac0612d3a        postgres:9.6                 "docker-entrypoint.s…"   About an hour ago   Up About an hour    5432/tcp                                              awxcompose_postgres_1
69d3b1aeb2b2        memcached:alpine             "docker-entrypoint.s…"   About an hour ago   Up About an hour    11211/tcp                                             awxcompose_memcached_1

あとはhttp://localhostに1〜2分ぐらい置いてアクセスするとAWXのログイン画面が出てくる

ユーザー名はadmin, passwordで設定されている。

f:id:pogin:20190519204853p:plain
AWXログインページ

いろいろな対処方法

ログを残し忘れたのと再起動で全部ログが消えたので対処したことを思い出してとりあえず書く。

再起動の仕方

Ver.4.0.0なら、デフォルトで定義されてる/tmp/awxcompose/docker-compose.ymldocker-compose up -dで再起動すればいい。 Ver.3.0.1なら、awx/installer/inventoryuse_docker_composeをtrueに設定してdocker-compose up -dで再起動する。

エラーメッセージ毎に対処したもののメモ。

A server error has occured

devel ブランチで起動した時に出たエラー。出たときはすごく困った...。

ログを調べるために以下のようなコマンドを実行してた。

docker logs awx_web -t | less 
docker logs awx_task -t | less 

ログが残っていないのであれだが、the database system is in recovery mode とか awx.conf.settings Database settings are not available, using defaults, error: で検索していた。

原因の一つは、別のPostgrSQLコンテナを動かしていてAWX用のPostgrSQLコンテナに接続できないということでエラーを出していたときがあった。なので既存のコンテナを止めて対処した。ログについてはあとで追記したいが多分しなさそう...。

ansible-playbook -i inventory install.ymlしてもエラーでコンテナが起動しない

ログが残っていないが、これについては昔にAWXを実行して作られた/tmp/pgdockerが原因でうまく動作しないことがあった。これは/tmp/pgdockerを削除することで直った。

There was an issue creating /var/lib/awxcompose as requested: [Errno 13] Permission denied: b'/var/lib/awxcompose'

AWXの3.0.1ではデフォルトで/var/lib/awxcomposeにdocker-compose.ymlファイルを配置する。

github.com

ls -la / | grep private                                  19:45:06
lrwxr-xr-x@   1 root  wheel    11 10 14  2018 etc -> private/etc
drwxr-xr-x    6 root  wheel   192 10 14  2018 private
lrwxr-xr-x@   1 root  wheel    11 10 14  2018 tmp -> private/tmp
lrwxr-xr-x@   1 root  wheel    11 10 14  2018 var -> private/var

$ ls -la /private/ | grep var                              19:44:16
drwxr-xr-x   26 root  wheel   832 10 14  2018 var

ls -la /private/var | grep lib                           19:45:00
drwxr-xr-x    3 root          wheel            96  5 19 15:50 lib

sudoでやればできそうだけど後々面倒そうなので、これはinventorydocker_compose_dirをユーザーフォルダ配下の配下に設定を変更して対処した。

# The docker_compose.yml file will be created in this directory
# The name of the directory (here "awx") will be the prefix of the docker containers
docker_compose_dir=/Users/pogin/.local/share/awxcompose

$HOME/.local/share$XDG_DATA_HOMEで設定される箇所。

wiki.archlinux.jp

error response from daemon: OCI runtime create failed: container_linux.go:344: starting container process caused "process_linux.go:424: container init caused \"rootfs_linux.go:58: mounting \\"/tmp/awxcompose/SECRET_KEY\\" to rootfs

なんかmacが強制終了で落ちたあとAWXを再起動したら、こんな感じのエラーが出てきた。

cd /tmp/docker-compose
ansible-playbook -i inventory install.yml -vvv
Error response from daemon: OCI runtime create failed: container_linux.go:344: starting container process caused "process_linux.go:424: container init caused \"rootfs_linux.go:58: mounting \\\"/tmp/awxcompose/SECRET_KEY\\\" to rootfs \\\"/var/lib/docker/overlay2/ba75a051fdae455c34a77e607dbb1c52ad5f03a8eb3f46cf02577ff4e89da0aa/merged\\\" at \\\"/var/lib/docker/overlay2/ba75a051fdae455c34a77e607dbb1c52ad5f03a8eb3f46cf02577ff4e89da0aa/merged/etc/tower/SECRET_KEY\\\" caused \\\"not a directory\\\"\"": unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type Error response from daemon: OCI runtime create failed: container_linux.go:344: starting container process caused "process_linux.go:424: container init caused \"rootfs_linux.go:58: mounting \\\"/tmp/awxcompose/SECRET_KEY\\\" to rootfs \\\"/var/lib/docker/overlay2/9d6a0c7a4909b70ff47f4c75abd44b968277267af21409761ed7c24fc25d6264/merged\\\" at \\\"/var/lib/docker/overlay2/9d6a0c7a4909b70ff47f4c75abd44b968277267af21409761ed7c24fc25d6264/merged/etc/tower/SECRET_KEY\\\" caused \\\"not a directory\\\"\"": unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type

AWX does not start after reboot using Docker · Issue #3551 · ansible/awx

何かの拍子にSECRET_KEYがディレクトリになったのが原因っぽい?うまく行かなかったので/tmp/awxcomposeを削除して、もう一度ansible-playbook -i inventory install.ymlをしたらうまくいったはず。

それでもうまく行かないときは/tmp/awxcomposedocker-compose downを実行して全部削除するとうまく行く場合があった。 あと/tmp/pgdockerが古いことが原因でうまくいかないこともあったので/tmp/pgdockerを削除か移動させるとうまくいく。

終わりに

雑になってしまってしまったが、人柱のログを残したいので公開する。 検索しても日本語の情報はうまくいった人の情報しか引っかからないので辛い気持ちになるが諦める。