2018年9月16日日曜日

Ansible AWXをインストールしてみた


Ansibleはコマンドベースで実行するツールとなるが、AnsibleをGUIで操作するためのツールとしてAWXと呼ばれるものが存在する。AWXはRed Hat社のAnsible Towerのコミュニティ版と呼べる存在で、無償で利用することができる

今回、AWXをインストールしてみた。ちょっと複雑な箇所もあるため、インストール手順を時系列に記載しまとめることにする。

環境

環境は以下の通り。AWXはDockerにて動作させることを前提に設計されているらしい。なお、私はDocker初心者となる。
  • CentOS : 7.5
  • Docker : 1.13.1
  • Ansible : 2.4.2.0
  • AWX : 1.0.7.2

AWXのインストール手順

1. 前提パッケージのインストール

前提パッケージをyumにてインストールする。

# yum install git docker docker-python

Dockerに関しては起動設定をしておこう。

# systemctl start docker
# systemctl enable docker

2. 事前準備

SELinuxが動いていると、AWXからPlaybook参照時に失敗するようなので、SELinuxは停止しておく。なお、ここでOS再起動して必ずSELinuxを無効化すること。そうしないと、OS再起動時にコンテナ起動ができなくなる。

# vi /etc/sysconfig/selinux
------------------------------
SELINUX=disabled
------------------------------
# reboot

私の自宅検証環境は、インターネットアクセス時にプロキシを経由する環境となるため、Dockerのプロキシ設定を実施しておく。

# mkdir /etc/systemd/system/docker.service.d
# vi /etc/systemd/system/docker.service.d/http-proxy.conf
------------------------------
[Service]
Environment="HTTP_PROXY=http://192.168.33.23:8080/"
Environment="NO_PROXY=localhost,127.0.0.0/8,docker-registry.somecorporation.com"
------------------------------
# systemctl restart docker

なお、この後手順として出てくるが、AWXのinventoryファイルでも、プロキシ設定をする必要がある。

3. AWXをgitにて入手

gitにてAWXを入手する。9/16時点の最新版は1.0.7のようだ。

# git clone https://github.com/ansible/awx.git
------------------------------
Cloning into 'awx'...
remote: Counting objects: 169687, done.
remote: Compressing objects: 100% (52/52), done.
remote: Total 169687 (delta 48), reused 51 (delta 28), pack-reused 169607
Receiving objects: 100% (169687/169687), 196.17 MiB | 4.82 MiB/s, done.
Resolving deltas: 100% (131154/131154), done.
------------------------------

4. AWXをインストール

AWXのインストール自体もAnsibleで実施する。ただし、そのままインストール用のPlaybookを実行するとプロキシ環境では失敗するため、inventoryファイルの設定修正を行う。

合わせて、デフォルトではDBデータの保存ディレクトリが/tmp配下となっているが、/tmpはCentOS 7では1週間に1回古いファイルの削除処理が入る仕様であり、結果としてAWXが動作しなくなる事象が発生することから、/tmpからディレクトリを変更しておく。

# mkdir /pgdocker
# cd awx/installer/
# vi inventory
------------------------------
# Common Docker parameters
postgres_data_dir=/pgdocker              ←★/tmp/pgdockerから変更
# Proxy
http_proxy=http://192.168.33.23:8080/    ←★追加
https_proxy=http://192.168.33.23:8080/   ←★追加

# AWX project data folder. If you need access to the location where AWX stores the projects
# it manages from the docker host, you can set this to turn it into a volume for the container.
project_data_dir=/var/lib/awx/projects   ←★アンコメント
------------------------------

install.ymlを実行してAWXをインストールする。5分もあれば完了する。

# ansible-playbook -i inventory install.yml
------------------------------
PLAY [Build and deploy AWX] ****************************************************

TASK [check_vars : include_tasks] **********************************************
skipping: [localhost]

TASK [check_vars : include_tasks] **********************************************
included: /root/awx/installer/roles/check_vars/tasks/check_docker.yml for localhost

~(中略)~

TASK [local_docker : Start the containers] *************************************
skipping: [localhost]

PLAY RECAP *********************************************************************
localhost                  : ok=12   changed=5    unreachable=0    failed=0  ←★failedがないことを確認
------------------------------

5. インストール後確認

インストール結果を確認する。まずdocker imagesコマンドで、イメージを確認する。Docker初心者なのでよくわかっていないが、以下の5行が表示されていればよいようだ。

# docker images
------------------------------
REPOSITORY                     TAG    IMAGE ID     CREATED      SIZE
docker.io/ansible/awx_task     latest 28707c39108a 7 hours ago  1.03 GB
docker.io/ansible/awx_web      latest 920f871452be 7 hours ago  997 MB
docker.io/postgres             9.6    506063568b80 3 days ago   237 MB
docker.io/memcached            alpine b40e8fa7e3e5 5 weeks ago  8.69 MB
docker.io/ansible/awx_rabbitmq 3.7.4  e08fe791079e 4 months ago 85.6 MB
------------------------------

AWXのコンテナの稼働状況は、docker psコマンドにて確認できる。ここに表示されていない場合は正常に起動していない。

# docker ps
------------------------------
CONTAINER ID IMAGE                      COMMAND                  CREATED      
STATUS       PORTS                NAMES
d0aaf8e6453c ansible/awx_task:latest    "/tini -- /bin/sh ..."   29 hours ago 
Up 23 hours  8052/tcp             awx_task
362b111bf0d5 ansible/awx_web:latest     "/tini -- /bin/sh ..."   29 hours ago 
Up 23 hours  0.0.0.0:80->8052/tcp awx_web
51bffae467fc memcached:alpine           "docker-entrypoint..."   29 hours ago 
Up 23 hours  11211/tcp            memcached
e4354159640c ansible/awx_rabbitmq:3.7.4 "docker-entrypoint..."   29 hours ago 
Up 23 hours  4369/tcp, 5671-5672/tcp, 15671-15672/tcp, 25672/tcp   rabbitmq
e92b95572075 postgres:9.6               "docker-entrypoint..."   29 hours ago 
Up 23 hours  5432/tcp             postgres
------------------------------

6. AWXで実行するPlaybookを配置する

Playbookは/var/lib/awx/projectsディレクトリ配下にさらにディレクトリを作成し配置することで、AWXが参照することができる。

念のためディレクトリが作成されていることを確認。

# ls -ld /var/lib/awx/projects/
------------------------------
drwxr-xr-x. 2 root root 6  8月 14 10:36 /var/lib/awx/projects/
------------------------------

今回は依然作ったPlaybookを適当に配置しておく。

# mkdir /var/lib/awx/projects/setup_ntpd
# cp /root/setup_ntpd.yml /var/lib/awx/projects/setup_ntpd

7. AWXにログイン

それではAWXにログインしてみよう。ブラウザにて以下情報にてログインできるはずだ。
  • ログイン先 : http://<IPアドレス>/
  • ID : admin
  • Pass: password


ログインするとこんな感じ。


8. AWXでPlaybookを実行してみる

今回の主目的はインストール手順の紹介となるため、細かい手順は割愛するが、おおむね以下手順で実施する。
  1. 認証情報作成:Ansible実行時の管理対象サーバーのID/Password情報を登録
  2. プロジェクト作成:Playbook配置場所の設定。ローカルディレクトリやSVNやGitを指定できる。ローカルディレクトリの場合は、/var/lib/awx/projects/配下にディレクトリを作ってPlaybookを配置する
  3. インベントリー作成:管理対象サーバーを登録
  4. ジョブテンプレート作成:Ansibleを実行するためのジョブを作成
  5. ジョブを実行:作成したジョブを実行する

ジョブの実行結果は以下のような画面で確認できる。


まとめ

以上にてAWXのインストールは完了となる。私の周りではあまり評価がよろしくないAWX (Ansible Tower) だが、個人的にはそこまで悪いものではなさそうに見える。今後、詳細に使い方を確認していこうと思う。

なお、実際に使っている中で、以下2点の問題が発生している。
  • 再起動するとAWXが起動しなくなる
  • AWXのジョブテンプレート作成時に、認証情報が「Invalid search term entered. GET returned: 400 無効な credential_type ID: NaN」でエラーになって選択できない
これらについては別記事で原因と回避方法を記載することにする。

0 件のコメント:

コメントを投稿

人気の投稿