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_dir
、 use_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で設定されている。
いろいろな対処方法
ログを残し忘れたのと再起動で全部ログが消えたので対処したことを思い出してとりあえず書く。
再起動の仕方
Ver.4.0.0なら、デフォルトで定義されてる/tmp/awxcompose/docker-compose.yml
でdocker-compose up -d
で再起動すればいい。
Ver.3.0.1なら、awx/installer/inventory
のuse_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ファイルを配置する。
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でやればできそうだけど後々面倒そうなので、これはinventory
のdocker_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
で設定される箇所。
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/awxcompose
でdocker-compose down
を実行して全部削除するとうまく行く場合があった。
あと/tmp/pgdocker
が古いことが原因でうまくいかないこともあったので/tmp/pgdocker
を削除か移動させるとうまくいく。
終わりに
雑になってしまってしまったが、人柱のログを残したいので公開する。 検索しても日本語の情報はうまくいった人の情報しか引っかからないので辛い気持ちになるが諦める。