【Ansible AWX】ローカルイメージビルドによるAWXデプロイ

# はじめに

Ansible AWXのデプロイについて[こちら](https://qiita.com/matchpon23/items/7442632bd23b3cf0554e)などで書かれている。しかし、この方法ではDocker Hubに置かれているDockerイメージが最新版ではないことがある。
(執筆当時、5.0.0の最終更新はGitHubが6日前に対してDocker Hubは9日前)
Issueで解決したと書いていてもDockerイメージ側では対応していなことがあるため、そういった場合は開発バージョンをローカルでビルドして利用する必要がある。

この記事では、GitのインストールからAWXのビルドまでを説明する。

# やりたいこと

- Ansible AWXのビルド
- Docker Hubからではなく、[Github](https://github.com/ansible/awx)から開発バージョンを利用

# 前提条件

## 準備

対象ホストに下記パッケージをインストールしておく。

- Docker
- Docker-Compose
- Ansible
- Git

## 今回試した環境

| Software | Version |
| --- | --- |
| OS | CentOS 7.6 |
| Docker | 18.09.6 |
| Docker Compose | 1.24.1 |
| Docker Python Library | 3.7.3 |
| Ansible | 2.8.1 |
| Ansible AWX | 5.0.0 |

# AWXのインストール方法

## 1. AWXのダウンロード

AWXのレポジトリをCloneして、対象のバージョンTagにチェックアウトします。
今回は執筆時の最新バージョン(5.0.0)を選択します。
**どうやら、`5.0.0`タグブランチがまた同じバグ状態らしいので`devel`ブランチを使います**

```bash
cd /opt
git clone https://github.com/ansible/awx.git
cd awx
#git checkout -b 5.0.0 tags/5.0.0
```

## 2. インベントリの修正

AWXのインベントリは、`installer/inventory`に記入されている。
`dockerhub_base=ansible`があると、Docker Hubよりpullされることになるためこれをコメントアウトする。
それ以外の設定も含めて変更点は下記の通り。

```diff:installer/inventory
# コメントアウトすることでdocker-hubからpullするのではなく、`docker build`してくれる
-dockerhub_base=ansible
+# dockerhub_base=ansible

# PostgreSQLのデータファイルが/tmp配下に作られていると時間が経つとファイル削除されてAWXが利用不可になる
-postgres_data_dir=/tmp/pgdocker
+postgres_data_dir=/var/lib/awx/pgdocker

# AWXのアップロードやサービス再起動などで利用するDocker-Composeファイルの置き場所
-docker_compose_dir=/tmp/awxcompose
+docker_compose_dir=/var/lib/awx/awxcompose

# これをtrueにするとDocker buildをマルチステージビルドで実行してくれる
-# use_container_for_build=true
+use_container_for_build=true

# AWXのプロジェクト(Playbook群)を置くフォルダ
-#project_data_dir=/var/lib/awx/projects
+project_data_dir=/var/lib/awx/projects
```

## 3. AWXのビルド & デプロイ

通常のAWXビルドと同じで下記コマンドを実行。
最初に`image_build`が走った上で、AWXがビルドされます

```bash
ansible-playbook -i inventory install.yml
```

## 4. AWX画面

`http://<AWX IPアドレス>:80`にブラウザアクセスすると、いつものAWXマークではなくアングリーポテトがお出迎えしてくれます。
Docker Hubを使わずにAWXを利用する場合このマークが出てくるので、自分が今Docker Hub版を使っているのか開発版を使っているのかがすぐに分かるので便利です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/335255/d4b88fdf-68f6-ce91-f7a0-86d9a894b870.png)

あとの他の機能は同じです。
執筆当時のDocker Hub版5.0.0では使えなかったグレイアウトされていたWorkflow Templateもこのように利用できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/335255/802668bd-0ddb-e8f7-3429-883e9232a5bf.png)

# その他

## AWXのアップデート方法

下記のように役割分担して運用を考える

- AWXのサービス起動・停止はdocker-compose
- バージョンアップはAWXレポジトリの`installer/build.yml`をAnsible Playbook実行

コマンドにすると下記のような感じ

```bash
docker-compose -f /var/lib/awx/awxcompose/docker-compose.yml down
docker rmi awx_task:5.0.0 awx_task:latest awx_web:5.0.0 awx_web:latest
cd /opt/awx/installer
ansible-playbook -i inventory build.yml
docker-compose -f /var/lib/awx/awxcompose/docker-compose.yml up -d
```

---

# まとめ

AWXとTowerの関係は、FedoraとRHELの関係と言われますがAWXは発展途上というのもあってそれ以上のように感じます。
コミットのたびに使えない機能が出てきているので本番環境には使うのは難しいです。

安定バージョンというのもあってないようなものなのでたとえ検証としてもAnsible Towerで行いたいですね。
Ansible Towerでも無償で10台まで利用できるようですが、肝心のWorkflow Templateが使えないのでどうもなーといった感じです。

ただ、今回5.0.0を試してみてIssueを初めて出してみましたがすでに修正が入っているという状態でとても開発が早く開発体制が整っているのは素晴らしいなと感じました。

~~ただ、アングリーポテトくんは、見てて怖いのはなんとかしてほしい...~~

# 参考サイト

- [Ansible AWXインストール方法](https://github.com/ansible/awx/blob/devel/INSTALL.md)
- [WFJT Create form greyed out for Admin Use](https://github.com/ansible/awx/issues/4091)


---

> 2019/7/21追記
> いつの間にか、AWX 6.0のタグが切られていました。
  このバージョンでは、WorkFlowTemplate作成できない問題は解決したようです。