【ansible/awx:19.4.0】ubuntu:20.04.2にansible awx:19.4.0をdockerでインストールする
- 本記事で行うこと
- 本記事で行わないこと
- モチベーション
- 環境
- 参考サイト
- 前提条件
- git clone
- docker imageの作成
- awxの実行
- UIをクリーンアップして構築する
- 管理ユーザの作成
- ロゴの変更
- サーバにpingするまで
- 余談
本記事で行うこと
- ubuntu:20.04.2にansible awxをバージョン指定で19.4.0をdockerでインストールし、ログインまで行う
本記事で行わないこと
- docker/docker composeのインストール
- python3のインストール
- gitのインストール
- ansible のインストール
モチベーション
- RKE2の検証時に、自宅サーバ設定を何度もやり直すことになり手動が面倒になったため。
- awxを数年ぶりに触って見たくなったため。
環境
HW
GMKTEC NucBox以下参考です。 【ubuntu 20.04/GMK NucBox】windows10を削除してubuntu 20.04をUSBからインストールする - haku-maiのブログ
$ cat /etc/os-release |grep VERSION VERSION="20.04.3 LTS (Focal Fossa)" VERSION_ID="20.04" VERSION_CODENAME=focal
- docker/docker-compose
$ docker --version Docker version 20.10.7, build f0df350 $ docker-compose --version docker-compose version 1.26.0, build d4451659
$ python3 --version Python 3.8.10
- ansible
$ ansible --version ansible 2.9.6 config file = /etc/ansible/ansible.cfg configured module search path = ['/home/haku-mai/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /usr/lib/python3/dist-packages/ansible executable location = /usr/bin/ansible python version = 3.8.10 (default, Sep 28 2021, 16:10:42) [GCC 9.3.0]
参考サイト
- ansible/awxのgithub
- dockerを利用したawxのインストール手順
awx/README.md at devel · ansible/awx · GitHub
前提条件
- docker/docker-composeがインストールされていること
- python3がインストールされていること
- gitがインストールされていること
- ansibleがインストールされていること
git clone
- まずAWXのモジュールを持ってきます。
- 最新のHEADは安定していないので、Brunch指定でcloneします。
- 2021/10/15時点の最新は以下ですので、本記事は以下のバージョンを利用します。
Release 19.4.0 · ansible/awx · GitHub
$ git clone -b 19.4.0 https://github.com/ansible/awx.git cd awx/ $ ls -l 合計 140 -rw-rw-r-- 1 haku-mai haku-mai 2556 10月 15 09:21 API_STANDARDS.md -rw-rw-r-- 1 haku-mai haku-mai 303 10月 15 09:21 CHANGELOG.md -rw-rw-r-- 1 haku-mai haku-mai 9149 10月 15 09:21 CONTRIBUTING.md -rw-rw-r-- 1 haku-mai haku-mai 385 10月 15 09:21 DATA_MIGRATION.md -rw-rw-r-- 1 haku-mai haku-mai 1620 10月 15 09:21 DCO_1_1.md -rw-rw-r-- 1 haku-mai haku-mai 2265 10月 15 09:21 INSTALL.md -rw-rw-r-- 1 haku-mai haku-mai 5137 10月 15 09:21 ISSUES.md -rw-rw-r-- 1 haku-mai haku-mai 9304 10月 15 09:21 LICENSE.md -rw-rw-r-- 1 haku-mai haku-mai 1095 10月 15 09:21 MANIFEST.in -rw-rw-r-- 1 haku-mai haku-mai 19736 10月 15 09:21 Makefile -rw-rw-r-- 1 haku-mai haku-mai 3240 10月 15 09:21 README.md -rw-rw-r-- 1 haku-mai haku-mai 7 10月 15 09:21 VERSION drwxrwxr-x 12 haku-mai haku-mai 4096 10月 15 09:21 awx drwxrwxr-x 8 haku-mai haku-mai 4096 10月 15 09:21 awx_collection drwxrwxr-x 4 haku-mai haku-mai 4096 10月 15 09:21 awxkit drwxrwxr-x 2 haku-mai haku-mai 4096 10月 15 09:21 config drwxrwxr-x 10 haku-mai haku-mai 4096 10月 15 09:21 docs -rwxrwxr-x 1 haku-mai haku-mai 149 10月 15 09:21 manage.py -rwxrwxr-x 1 haku-mai haku-mai 265 10月 15 09:21 pre-commit.sh -rw-rw-r-- 1 haku-mai haku-mai 103 10月 15 09:21 pyproject.toml -rw-rw-r-- 1 haku-mai haku-mai 521 10月 15 09:21 pytest.ini drwxrwxr-x 2 haku-mai haku-mai 4096 10月 15 09:21 requirements -rwxrwxr-x 1 haku-mai haku-mai 5700 10月 15 09:21 setup.py drwxrwxr-x 13 haku-mai haku-mai 4096 10月 15 09:21 tools -rw-rw-r-- 1 haku-mai haku-mai 313 10月 15 09:21 tox.ini
docker imageの作成
- makeコマンドで作成します。
# バージョン固定 $ export DEVEL_IMAGE_NAME=quay.io/awx/awx_devel:19.4.0 # Makefileがあるディレクトリで $ ls -l Makefile -rw-rw-r-- 1 haku-mai haku-mai 19736 10月 15 09:21 Makefile $ make docker-compose-build $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE quay.io/awx/awx_devel 19.4.0 c5566c6146d9 6 minutes ago 2.09GB
- 余談ですが実際にはMakefileには以下のように記載されていて、これを実行しているだけです。
# Base development image build docker-compose-build: ansible-playbook tools/ansible/dockerfile.yml -e build_dev=True DOCKER_BUILDKIT=1 docker build -t $(DEVEL_IMAGE_NAME) \ --build-arg BUILDKIT_INLINE_CACHE=1 \ --cache-from=$(DEV_DOCKER_TAG_BASE)/awx_devel:$(COMPOSE_TAG) .
awxの実行
テスト実行
- makefileを見るとテストコマンドがあったので一度実行します。
$ COMPOSE_TAG=19.4.0 make docker-compose-runtest
すべてPASSEDになったため実行します
※このタイミングで他のdocker imagesがpullされます。
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE quay.io/awx/awx_devel 19.4.0 c5566c6146d9 13 hours ago 2.09GB postgres 12 fd694ed1533c 3 days ago 371MB redis latest 7faaec683238 3 days ago 113MB quay.io/project-receptor/receptor latest ac55a9332b22 3 months ago 313MB
実行
- バージョン指定、デタッチドモードで起動しますが、マニュアル通り19.4.0で実行すると怒られます。
$ COMPOSE_TAG=19.4.0 COMPOSE_UP_OPTS=-d make docker-compose make: *** 'docker-compose' に必要なターゲット 'docker-auth' を make するルールがありません. 中止.
- これはMakefileからdocker-authが削除されているにも関わらず、コマンドの引数として設定されているからになります。
- 2021/10/15時点では以下のcommitで修正されていますが、このときの最新のtagの19.4.0にはこの修正が含まれていません。
Fix docker-compose targets · ansible/awx@57c9b14 · GitHub
- Makefileを修正して再実行します。
- docker-auth部分を削除します。
Makefileの修正
docker-compose: docker-auth awx/projects docker-compose-sources docker-compose -f tools/docker-compose/_sources/docker-compose.yml $(COMPOSE_OPTS) up $(COMPOSE_UP_OPTS) --remove-orphans # ↓ docker-compose: awx/projects docker-compose-sources docker-compose -f tools/docker-compose/_sources/docker-compose.yml $(COMPOSE_OPTS) up $(COMPOSE_UP_OPTS) --remove-orphans
再実行
$ COMPOSE_TAG=19.4.0 COMPOSE_UP_OPTS=-d make docker-compose $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 782c9236f1ec quay.io/awx/awx_devel:devel "/entrypoint.sh rece…" 5 minutes ago Up 5 minutes 22/tcp, 8013/tcp, 8043/tcp, 8080/tcp tools_receptor_1 b22a5a71fc92 quay.io/awx/awx_devel:devel "/entrypoint.sh rece…" 5 minutes ago Up 5 minutes 22/tcp, 8013/tcp, 8043/tcp, 8080/tcp tools_receptor_2 51d0fd4cfa94 quay.io/project-receptor/receptor:latest "/usr/bin/dumb-init …" 5 minutes ago Up 5 minutes 0.0.0.0:5555->5555/tcp, :::5555->5555/tcp, 7323/tcp tools_receptor_hop 832940d3fc45 quay.io/awx/awx_devel:19.4.0 "/entrypoint.sh laun…" 5 minutes ago Up 5 minutes 0.0.0.0:2222->2222/tcp, :::2222->2222/tcp, 0.0.0.0:6899->6899/tcp, :::6899->6899/tcp, 0.0.0.0:7899-7999->7899-7999/tcp, :::7899-7999->7899-7999/tcp, 0.0.0.0:8013->8013/tcp, :::8013->8013/tcp, 0.0.0.0:8043->8043/tcp, :::8043->8043/tcp, 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 22/tcp, 0.0.0.0:8888->8888/tcp, :::8888->8888/tcp tools_awx_1 3bc2e00c9029 postgres:12 "docker-entrypoint.s…" 27 minutes ago Up 27 minutes 5432/tcp tools_postgres_1 05398afb1d6b redis:latest "redis-server /usr/l…" 27 minutes ago Up 27 minutes 6379/tcp tools_redis_1
UIをクリーンアップして構築する
- UIを利用できるように以下コマンドを実行します。
$ docker exec tools_awx_1 make clean-ui ui-devel
*ここまで完了したら、webアクセスできます。 * 証明書がないためブラウザによっては、アクセス拒否されて、400エラーになったりします。 * 私はsafafiで接続しました。
- httpはこちら
- むちゃくちゃ・・・ダサい!!!
- 昔は中二感あったロゴだったはずなのですが・・・
管理ユーザの作成
- ログイン用の管理ユーザを作成します。
$ docker exec -ti tools_awx_1 awx-manage createsuperuser Username (leave blank to use 'awx'): haku-mai Email address: Password: Password (again): Superuser created successfully.
- 作成したユーザでログインします。
- アイコンダサすぎないですか?
ロゴの変更
- あまりにもロゴがダサいで変更します。
- ちゃんと変更機能がありました。
- とても残念なことに、認証画面しか変わりませんでした・・・
- なんか3週くらいして、かっこよく見えてきたのでもうこれで良しとします。
*正直UIが数年前と結構変わっていて、少し検証が必要です。
サーバにpingするまで
guthub repoの作成
- 適当なrepoを作成し、サンプルでplaybookを作ります。
--- - name: sample hosts: nucbox-002-hkm gather_facts: no collections: - ansible.builtin tasks: - name: 疎通チェック ping:
トークンの作成
- Settings -> Developer settings -> personal access tokens から作成します。
- repoの読み取りのみで問題ありません。
- ここで取得したトークンを認証情報で設定します。
- ※このトークンは絶対に外部に流出させないように!
認証情報の登録
github
- ソースコントロールが正解。少しハマりました。
OSログイン情報
- テストなのでパスワード認証にしてきます。
- SSH公開鍵認証が良いと思います。
プロジェクトの登録
- プロジェクトというのは論理的なplaybookのコレクションみたいなもので、今回はgitrepoにあるplaybookをひっぱてくる場所みたいなものです。
- 登録後、成功になっていればOKです。
インベントリーの登録
- インベントリーを作り、ホストを登録していきます。
ホストの登録
- ホスト名をgithubに登録した
hosts: nucbox-002-hkm
に合わせます。
--- ansible_host: 192.168.XXX.XXX
テスト実行
- アドホックコマンドでShellを実行してみます。
- 問題なく実行できました。
テンプレートの作成
- github repoに作成したplaybookを実行します。
- 追加から新規ジョブテンプレートの追加
- JOB名、インベントリー、プロジェクト、実行環境、Playbook、認証情報を選択します。
- Playbookはgithubからcloneした値が出てきます。
- 保存して、起動を押します。
- 無事pingが成功しました。
- 以上ubuntu:20.04.2にansible awx:19.4.0をdockerでインストールするでした。
余談
以前のバージョンについて
- 以前のバージョンは中二感丸出しのロゴが使われてました。
- これから
- これになったので超びっくりしました。
- ui_nextという形でAWX 16.0.0 から変更になったようです。
- 前のほうが好きだったけど、この謎のキャラクタを好きになろうと思います。
2020年のAWXの世界を少しだけ覗いちゃう - 赤帽エンジニアブログ
docker-compose.yamlについて
- 実行するdocker-compose.yamlは少し微妙です。
- バージョン指定したのに、awx/awx_devel:devel箇所があります。
- 修正して実行しても良かったのですが、まぁいいかなと割り切りました。
$ cat tools/docker-compose/_sources/docker-compose.yml --- version: '2.1' services: # Primary AWX Development Container awx_1: user: "1000" image: "quay.io/awx/awx_devel:19.4.0" container_name: tools_awx_1 hostname: awx_1 command: launch_awx.sh environment: OS: " Operating System: Ubuntu 20.04.3 LTS" SDB_HOST: 0.0.0.0 SDB_PORT: 7899 AWX_GROUP_QUEUES: tower MAIN_NODE_TYPE: "${MAIN_NODE_TYPE:-hybrid}" RECEPTORCTL_SOCKET: /var/run/awx-receptor/receptor.sock RUN_MIGRATIONS: 1 links: - postgres - redis_1 working_dir: "/awx_devel" volumes: - "../../../:/awx_devel" - "../../docker-compose/supervisor.conf:/etc/supervisord.conf" - "../../docker-compose/_sources/database.py:/etc/tower/conf.d/database.py" - "../../docker-compose/_sources/websocket_secret.py:/etc/tower/conf.d/websocket_secret.py" - "../../docker-compose/_sources/local_settings.py:/etc/tower/conf.d/local_settings.py" - "../../docker-compose/_sources/SECRET_KEY:/etc/tower/SECRET_KEY" - "../../docker-compose/_sources/receptor/receptor-awx-1.conf:/etc/receptor/receptor.conf" # - "../../docker-compose/_sources/certs:/etc/receptor/certs" # TODO: optionally generate certs - "/sys/fs/cgroup:/sys/fs/cgroup" - "~/.kube/config:/var/lib/awx/.kube/config" - "redis_socket_1:/var/run/redis/:rw" privileged: true tty: true ports: - "7899-7999:7899-7999" # sdb-listen - "6899:6899" - "8080:8080" # unused but mapped for debugging - "8888:8888" # jupyter notebook - "8013:8013" # http - "8043:8043" # https - "2222:2222" # receptor foo node redis_1: image: redis:latest container_name: tools_redis_1 volumes: - "../../redis/redis.conf:/usr/local/etc/redis/redis.conf" - "redis_socket_1:/var/run/redis/:rw" entrypoint: ["redis-server"] command: ["/usr/local/etc/redis/redis.conf"] # A useful container that simply passes through log messages to the console # helpful for testing awx/tower logging # logstash: # build: # context: ./docker-compose # dockerfile: Dockerfile-logstash postgres: image: postgres:12 container_name: tools_postgres_1 environment: POSTGRES_HOST_AUTH_METHOD: trust POSTGRES_USER: awx POSTGRES_DB: awx POSTGRES_PASSWORD: vEUithzhAYIeRdMQGfVI volumes: - "awx_db:/var/lib/postgresql/data" receptor-hop: image: quay.io/project-receptor/receptor:latest user: root container_name: tools_receptor_hop hostname: receptor-hop command: 'receptor --config /etc/receptor/receptor.conf' links: - awx_1 ports: - "5555:5555" volumes: - "../../docker-compose/_sources/receptor/receptor-hop.conf:/etc/receptor/receptor.conf" receptor-1: image: quay.io/awx/awx_devel:devel user: "1000" container_name: tools_receptor_1 hostname: receptor-1 command: 'receptor --config /etc/receptor/receptor.conf' environment: RECEPTORCTL_SOCKET: /var/run/awx-receptor/receptor.sock links: - receptor-hop volumes: - "../../docker-compose/_sources/receptor/receptor-worker-1.conf:/etc/receptor/receptor.conf" - "/sys/fs/cgroup:/sys/fs/cgroup" privileged: true receptor-2: image: quay.io/awx/awx_devel:devel user: "1000" container_name: tools_receptor_2 hostname: receptor-2 command: 'receptor --config /etc/receptor/receptor.conf' environment: RECEPTORCTL_SOCKET: /var/run/awx-receptor/receptor.sock links: - receptor-hop volumes: - "../../docker-compose/_sources/receptor/receptor-worker-2.conf:/etc/receptor/receptor.conf" - "/sys/fs/cgroup:/sys/fs/cgroup" privileged: true volumes: awx_db: name: tools_awx_db redis_socket_1: name: tools_redis_socket_1
- 価格: 4150 円
- 楽天で詳細を見る