こんにちは。
Ansibleをチームで利用していると
- 昔に作ったPlaybookがAnsibleのバージョンアップにより動かない
- 複数メンバーでの環境の統一が難しい
などの問題にぶつかった事がありませんか?
そこで、DockerとDocker-Composeを使って、Ansibleの実行環境の配布を考えてみました。
構成
├ docker-compose.yml
└ ansible-images
└ Dockerfile
./ansible-images/Dockerfile
FROM amazonlinux
RUN yum install python27-pip.noarch python27-PyYAML openssh-clients -y && \
pip install --upgrade pip && \
pip install ansible==2.5.0 && \
yum clean all && \
mkdir /playbooks
WORKDIR /playbooks
ENTRYPOINT ["/usr/local/bin/ansible-playbook"]
CMD ["--version]
解説
-
pip install ansible==2.5.0PIPのオプションを利用し、Ansibleのバージョンを指定しています。 -
RUNAnsibleに必要パッケージ一式をインストールしています。 - 作成された
/playbooksをカレントディレクトリとするためWORKDIRで/playbooksを指定します。-
WORKDIRは、RUNCMDENTRYPOINTCOPYADDを実行する際のワーキングディレクトリを指定します。 -
/playbooksはdocker-composeにて、ホストのディレクトリのマウント用です。
-
-
ENTRYPOINTはAnsibleへのパスを指定しています。 -
CMDはdocker runの実行時に引数がない際に実行されるコマンドオプションです。コマンドに引数を指定すれば、上書きされます。
./docker-compose.yml
version: '2'
services:
ansible:
build: ./ansible-images
image: ansible-images:latest
volumes:
- /PATH/TO/YOUR/ANSIBLE-PLAYBOOK:/playbooks
command:
"--check -i ./hosts/inventory.yml ./setup.yml"
解説
-
volumes:インスタンスににホスト上のPlaybookを読み込ませるためマウントをしています。 -
command:Dockerfileで指定したCMDを上書きします。
実行
カレントディレクトリにて
docker-compose up を実行すると、Ansibleが実行されます。