awx(Ansible用WebツールでAnsibleTowerのコミュニティ版らしきもの)試してみたいけどコンテナで入れると楽かしらと思ってググったらこんなの見かけたのでやってみました。(docker-composeつかうので当然のごとく全部1台のホスト上にのります。)
https://www.jeffgeerling.com/blog/2017/get-started-using-ansible-awx-open-source-tower-version-one-minute
他の方法は公式のInstall.mdに書いてあるようなのでそちらをどうぞ。
一応前提条件とか要求スペックとかも書いてあったので転記(Chromeが翻訳)。
・前提条件
デプロイメントを実行するには、まずローカル環境に以下のものがインストールされている必要があります。
Ansibleはバージョンが必要です2.4+
ドッカー
docker-py Pythonモジュール
GNU Make
Git
・システム要求
AWXサービスを実行するシステムは、次の要件を満たす必要があります
少なくとも4GBのメモリ
少なくとも2つのCPUコア
少なくとも20GBのスペース
Running Docker, Openshift, or Kubernetes(どれか)
# yum install docker docker-compose
# systemctl start docker
# systemctl status docker
# systemctl is-enabled docker
# systemctl enable docker
# systemctl is-enabled docker
enabled
mkdir /home/user/awx;cd /home/user/awx
curl -O https://raw.githubusercontent.com/geerlingguy/awx-container/master/docker-compose.yml
# cp -p docker-compose.yml{,.org}
# vi docker-compose.yml
# diff docker-compose.yml{,.org}
1c1
< version: '2'
---
> version: '3'
7c7
< POSTGRES_PASSWORD: ${DBPASS}
---
> POSTGRES_PASSWORD: awxpass
25c25
< - "8080:8052"
---
> - "80:8052"
29c29
< SECRET_KEY: ${SECRETKEY}
---
> SECRET_KEY: aabbcc
31c31
< DATABASE_PASSWORD: ${DBPASS}
---
> DATABASE_PASSWORD: awxpass
36c36
< RABBITMQ_PASSWORD: ${MQPASS}
---
> RABBITMQ_PASSWORD: guest
53c53
< SECRET_KEY: ${SECRETKEY}
---
> SECRET_KEY: aabbcc
55c55
< DATABASE_PASSWORD: ${DBPASS}
---
> DATABASE_PASSWORD: awxpass
60c60
< RABBITMQ_PASSWORD: ${MQPASS}
---
> RABBITMQ_PASSWORD: guest
# vi .env
# cat .env
SECRETKEY=xxxxxxxx
DBPASS=xxxxxxxx
MQPASS=xxxxxxxx
# docker-compose up -d
# docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------------------------------
awx_awx_task_1 /tini -- /bin/sh -c /usr/b ... Up 8052/tcp
awx_awx_web_1 /tini -- /bin/sh -c /usr/b ... Up 0.0.0.0:8080->8052/tcp
awx_memcached_1 docker-entrypoint.sh memcached Up 11211/tcp
awx_postgres_1 docker-entrypoint.sh postgres Up 5432/tcp
awx_rabbitmq_1 docker-entrypoint.sh rabbi ... Up 25672/tcp, 4369/tcp, 5671/tcp, 5672/tcp
開いてるCentOS7に入れたらDocker1.12だとcomposeのyamlのversion3は使えなさそうで2にしました。
あと80だとポート競合するので変えたのとパスワード関連を.envに入れて変数にしました。
1分ではおわらなかったですが普通に上がってきました。
URLあけてしばらく待ってるとログイン画面が出てきました。
マスコットが芋と豆どっちなのかよくわからないらしいです。。
→こちらの入れ方だとロゴが違ってました(コンテナなのは同じでIMAGEのオーナーがgeerlingguyでなくてansibleな感じ)
UIは何もしてないのにちゃんと日本語でした。JSTとかみてるんですかね。
デフォルトパスワードは上記リンク先に載ってますが変えといたほうがよさそう。
TOWERと大体一緒みたいなのでそのマニュアルを見るとよさそうですかね。
http://docs.ansible.com/ansible-tower/index.html
http://docs.ansible.com/ansible-tower/3.1.4/html_ja/quickstart/
あとGithubのawxのdocディレクトリに色々マニュアルはある模様
https://github.com/ansible/awx/tree/devel/docs
別にansibleで入れてもよかったけどぱっと見相乗りポート競合の対処がdefaults/main.ymlみただけじゃ書いてなかった。→その後以下にあるとおり見つけました。
あとtwitterの #ansiblejp のタグ追ってたら、awxのpostgrresqlのデータディレクトリが/tmpだから定期的に消されて死亡みたいな話を見かけました。
→ただこれはここら辺の公式と同様の入れ方でgit cloneしてきたあとにinstaller/inventoryファイル内のpostgres_data_dirを変えればいいだけっぽいすね。ポートもそのファイル内で変えられるみたいでした。
上記はあくまでテスト用にコンテナで入れてるのでvolumeマウントして永続化とバックアップするなりしないとコンテナのデータの場所と消したらどうなるかというのはイメージ作成者の胸先三寸の仕様などによるのでimage名調べてdockerHubで検索してReadme読んで対処ですかね。まあコンテナのデータはdockerのデータディレクトリは変えてなければ大体/var/lib/dockerのしたなので自分で消したコンテナのボリューム消したりホスト消したりしなければそこをfindしても見つかりますね。ただpsqlやpg_dump的なツール類はコンテナにつながないとホストからは使えないのでdocker execでコンテナに入ってバックアップを仕掛けて出力場所をマウントしておいた共有ストレージやブロックストレージにcopyさせるとかになるんですかね。
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
868b1d05ac30 geerlingguy/awx_task:latest "/tini -- /bin/sh -c " 17 hours ago Up 17 hours 8052/tcp awx_awx_task_1
979cd00c6135 geerlingguy/awx_web:latest "/tini -- /bin/sh -c " 17 hours ago Up 17 hours 0.0.0.0:8080->8052/tcp awx_awx_web_1
9534927b446b rabbitmq:3 "docker-entrypoint.sh" 17 hours ago Up 17 hours 4369/tcp, 5671-5672/tcp, 25672/tcp awx_rabbitmq_1
3bf9f2db6777 postgres:9.6 "docker-entrypoint.sh" 17 hours ago Up 17 hours 5432/tcp awx_postgres_1
63747671c25d memcached:alpine "docker-entrypoint.sh" 17 hours ago Up 17 hours 11211/tcp awx_memcached_1
## postgres:9.6のdockerHubをみてデータディレクトリをしらべる(https://hub.docker.com/_/postgres/)
# docker exec -it 3bf9f2db6777 bash
root@3bf9f2db6777:/# ls /var/lib/postgresql/data
base pg_clog pg_dynshmem pg_ident.conf pg_multixact pg_replslot pg_snapshots pg_stat_tmp pg_tblspc PG_VERSION postgresql.auto.conf postmaster.opts
global pg_commit_ts pg_hba.conf pg_logical pg_notify pg_serial pg_stat pg_subtrans pg_twophase pg_xlog postgresql.conf postmaster.pid
root@3bf9f2db6777:/# exit
# find /var/lib/docker -name "postgresql.conf" -print
/var/lib/docker/volumes/1aefe6c15af1f21be5426a5c843deb6bab2eb4050257bf05a1276a87ca0aa719/_data/postgresql.conf
マニュアル見た感じバックアップとレストアはplaybookに含まれてるスクリプト使うように書いてるけどなんかfindしてもsetup.shは見当たらなかったので他の入れ方した場合の話かな。
http://docs.ansible.com/ansible-tower/latest/html/administration/backup_restore.html
http://docs.ansible.com/ansible-tower/3.1.4/html_ja/administration/backup_restore.html
http://docs.ansible.com/ansible-tower/3.1.4/html_ja/quickinstall/install_script.html
認証は管理から認証みたかんじ色々いけそうでした。(ためしてはいない+やるならリバプロかますなりでhttps化が必須と思われる)
http://docs.ansible.com/ansible-tower/3.1.4/html_ja/administration/ent_auth.html
続けてやることとしては、
プレイブック作ってgitに登録してそのURLをプロジェクト登録してgitサーバとの認証設定して(またはローカルに配置して)インベントリ登録してホストの認証情報設定してジョブテンプレートにプロジェクトとインベントリとホスト認証情報を紐づけてテンプレートをもとにジョブを実行、という感じのようです。
https://www.slideshare.net/ssuserf487dc/ansible-tower
http://g40244.hatenablog.com/entry/2017/12/20/082715
https://qiita.com/advent-calendar/2017/ansible
地理的にロケーションとかがばらけてなければ集約でうれしいだろうけど複数地域で遅延や負荷やシングルポイントなど気になりだした場合にChefServerのように卒業されて各地域のストレージホスティングリポジトリから個々のサーバのcloud_initがpullって入れるって話もありそうというかTowerは値段がエンプラ向けっぽいけど規模感の話はよくわからないです。
参考:
https://qiita.com/takaidohigasi/items/fb1e4c8c822893532496
https://galaxy.ansible.com/geerlingguy/awx/#readme
https://github.com/ansible/awx/issues/592
https://www.jeffgeerling.com/blog/2017/get-started-using-ansible-awx-open-source-tower-version-one-minute