AWX にカスタム ansible環境を用意する。

Towerのドキュメントは

docs.ansible.com

こちらに。

  • local docker を利用している想定で話を進めていきます。
  • 利用する awx のバージョンは 5.0.0 ベースです。
  • 作成するvirtualenvは /var/lib/awx/venv/test で ansible 2.5.15 としています。

awx_web イメージの作成

適当なディレクトリ(/tmp/awx_web/)に Dockerfileを用意します。 あらかじめ、必要なモジュールをrequirements.txt として用意できると楽ですが、そうでなくてもがんばれはします。

ベースイメージは、オフィシャルに用意されているansible/awx_web:5.0.0を利用します。

FROM ansible/awx_web:5.0.0

USER 0
RUN yum -y install gcc python-devel && \
    python2 -m pip install virtualenv && \
    python2 -m virtualenv  /var/lib/awx/venv/test/ && \
    . /var/lib/awx/venv/test/bin/activate && \
    pip install python-memcached psutil "ansible == 2.5.15" && \
    yum -y remove gcc python-devel
USER 1000

このファイルを元に

docker build /tmp/awx_web/ -t test/aws_web:5.0.0 

とやって、 docker imageを作成します。

aws_task イメージの作成

適当なディレクトリ(/tmp/awx_task/)に Dockerfileを用意します。

ベースイメージは先ほど作成した test/awx_web:5.0.0 を利用します。

FROM test/awx_web:5.0.0

USER 0
RUN sudo yum -y remove nginx
USER 1000
EXPOSE 8052
CMD /usr/bin/launch_awx_task.sh

このファイルを元に

docker build /tmp/awx_task/ -t test/aws_task:5.0.0

とやって、 docker imageを作成します。

awxのインストールと実行

/tmp/awx ディレクトリに awxをclone します。

git clone https://github.com/ansible/awx /tmp/awx

local docker 用のインストーラーのインベントリファイル(/tmp/awx/installer/inventory)を編集します。

dockerhub_base=ansible

となっている箇所を dockerhub_base=test

と修正しましょう。 これは docker build -t test/awx_web:5.0.0 や docker build -t test/aws_task:5.0.0 とやったときの、 /より前のものです。今回は testとしましたね。 (通常は、docker hub の自分のアカウントを test の代わりに利用します。)

そして最後に

cd /tmp/awx/installer
ansible-playbook -i inventory installer.yml

で docker-compose を利用して awxを立ち上げます。

起動したら、試しにサンプルjob template をみてみると、

f:id:paihu:20190624115437p:plain

このように、 どのvirtualenvで実行するか選べるようになりました。