ろーてくxyz blog

ローテクを駆使してIT関係でサヴァイヴしようとする人による備忘録

AWXを使う(Ansible Tower)

9月頃にAnsible Towerのアップストリーム版のAWXが出ました。
何かのタイミングで某社のプロダクト担当の方に質問したときは、早くとも年度内位になるかもと言われていましたが、それよりも早くアップストリーム版がリリースされたようです。
Ansible Tower自体もクライアントnode数、一部機能などが制限されている無料トライアル版もありましたが、色々試したり検証用途としてはAWXが良さそうですね。
現在の予定では2週間おきにリリースされるみたいです。

AWXに関するFAQはこちら
本番環境では推奨しないとか色々書いてあります。
The AWX project

インストール要件

公式ドキュメントはこちら github.com

ドキュメントを見るとDocker以外にも以下が必要らしい。

  • Ansible Requires Version 2.4+

  • Docker

  • docker-py Python module

  • GNU Make

  • Git

Ansibleのバージョンは2.4以上が必要なんですね。

以下の環境で入れてみました

# ansible --version
ansible 2.4.1.0

# docker --version
Docker version 17.06.2-ce, build cec0b72

# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.3 LTS"

AWX本体のインストール作業

docker-pyのインストールなどは省きます。ちなみにdocker-pyはpipでinstall可能です。

awxのレポジトリをcloneして、installerディレクトリに行きます

# git clone https://github.com/ansible/awx.git
# cd awx/
# ls
API_STANDARDS.md  config           DCO_1_1.md  installer   ISSUES.md   Makefile   MANIFEST.in   pytest.ini  requirements  setup.py       tools
awx               CONTRIBUTING.md  docs        INSTALL.md  LICENSE.md  manage.py  nodemon.json  README.md   setup.cfg     shippable.yml  tox.ini
# cd installer/
# ls -l
total 32
-rw-r--r-- 1 root root  171 Nov  7 13:43 build.yml
drwxr-xr-x 3 root root 4096 Nov  7 13:43 check_vars
drwxr-xr-x 5 root root 4096 Nov  7 13:43 image_build
drwxr-xr-x 3 root root 4096 Nov  7 13:43 image_push
-rw-r--r-- 1 root root  300 Nov  7 13:43 install.yml
-rw-r--r-- 1 root root 3050 Nov  7 13:43 inventory
drwxr-xr-x 3 root root 4096 Nov  7 13:43 local_docker
drwxr-xr-x 5 root root 4096 Nov  7 13:43 openshift
#

playbookを実行する前に、inventoryを確認して変更が必要なパラメータは予め変更しましょう。 パラーメータの項目については公式ドキュメントを参照すると細かく書かれています。

覚悟が決まったらplaybook実行

# ansible-playbook -i inventory install.yml

docker registry使う人は以下で(inventoryにregistry設定項目がある)

# ansible-playbook -i inventory -e docker_registry_password=password install.yml

環境によると思いますが、Ansibleの実行結果は以下の様になりました。

PLAY RECAP ******************************************************************
localhost                  : ok=12   changed=5    unreachable=0    failed=0

playbookが走り切ったら、dockerの状況を見てみましょう。
起動が必要な物は公式ドキュメントにも実行結果が載っているので参考にします。
特に手を加えていない場合はコンテナが5個起動の模様。

# docker ps
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                                NAMES
6b894eb7dc13        ansible/awx_task:latest   "/tini -- /bin/sh ..."   2 minutes ago       Up 2 minutes        8052/tcp                             awx_task
ffd321ab0817        ansible/awx_web:latest    "/tini -- /bin/sh ..."   2 minutes ago       Up 2 minutes        0.0.0.0:80->8052/tcp                 awx_web
56bc28994eb2        memcached:alpine          "docker-entrypoint..."   3 minutes ago       Up 3 minutes        11211/tcp                            memcached
005e09e5289c        rabbitmq:3                "docker-entrypoint..."   3 minutes ago       Up 3 minutes        4369/tcp, 5671-5672/tcp, 25672/tcp   rabbitmq
8e78cf794574        postgres:9.6              "docker-entrypoint..."   4 minutes ago       Up 4 minutes        5432/tcp                             postgres
#

上記の確認ができましたら、Webインタフェースアクセス前にタスクの状況を確認とドキュメントに書いてあるので状況を確認します。試しては無いですがDBのマイグレーションなどが走っているので完了するまでWebインタフェースにアクセスはできたとしてもログインはできないと思われます。

# docker logs -f awx_task
Using /etc/ansible/ansible.cfg as config file
[DEPRECATION WARNING]: The sudo command line option has been deprecated in
favor of the "become" command line arguments. This feature will be removed in
version 2.6. Deprecation warnings can be disabled by setting
deprecation_warnings=False in ansible.cfg.
127.0.0.1 | SUCCESS => {
    "changed": true,
    "db": "awx",
    "failed": false
}
Operations to perform:
  Synchronize unmigrated apps: solo, api, staticfiles, messages, channels, django_extensions, ui, rest_framework, polymorphic
  Apply all migrations: sso, taggit, sessions, djcelery, sites, kombu_transport_django, social_auth, contenttypes, auth, conf, main
Synchronizing apps without migrations:
  Creating tables...
    Running deferred SQL...
  Installing custom SQL...
Running migrations:

    ** 略 **

以下が出力されれば準備は完了の様です。

>>> <User: admin>
>>> Default organization added.
Demo Credential, Inventory, and Job Template added.
Successfully registered instance awx
(changed: True)
Creating instance group tower
Added instance awx to tower
(changed: True)

実際にサーバのアドレスの80番にアクセスして、Webインタフェースが表示されログインできれば導入は完了です。
IDと初期パスワードは、adminのpasswordです。
Ansible Tower時のロゴは全く忘れてしまいましたが、なかなか良いロゴ。

Ansible TowerではEnterpriseライセンス以上でしか使えない、Surveyも使えそうですね。
よく見てみるとローカライズまでされています(コミュニティの方に感謝ですね)。

近いうちに、検証してみようと思います。