😀
Ansible MoleculeをDocker-outside-of-Docker(DOOD)で動かす
Ansible MoleculeをDocker-outside-of-Docker(DOOD)パターンで動かす方法です。DOODで動かすことによりMoleculeをOSヘインストールする必要がなくなります。
検証環境
- CentOS7 (GCE)
Dockerをインストールする
Docker公式サイトにあるInstall Docker Engine on CentOS | Docker Documentation に従います。
MoleculeをDocker outside of Dockerで起動する
Ansible Moleculeのドキュメントの Common Molecule Use Cases — Molecule documentation に従います。
Ansible Role / Playbookのディレクトリへ移動し docker run コマンドを実行します。
chmod 666 /var/run/docker.sock
cd path/to/ansible-role
docker run --rm -it \
-v "$(pwd)":/tmp/$(basename "${PWD}"):ro \
-v /usr/bin/docker:/usr/bin/docker \
-v /var/run/docker.sock:/var/run/docker.sock \
-w /tmp/$(basename "${PWD}") \
quay.io/ansible/molecule:3.0.8 \
molecule test
その他
docker run コマンドが長いため ~/.bashrc へaliasでショートカットを作成すると良いでしょう。
例えば実行環境がAWS EC2ならログインユーザーの ~/.bashrc へ以下のように記述します。
~/.bashrc
alias molecule='sudo docker run --rm -it \
-v "$(pwd)":/tmp/$(basename "${PWD}"):ro \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
-w /tmp/$(basename "${PWD}") \
quay.io/ansible/molecule:3.0.8 \
molecule'
これで docker run コマンドから呼び出されるmoleculeコマンドがrootに変更せずに 通常のmolecule コマンドとして実行出来るようになります。
また ansible-playbook や ansible-lint のコマンドにもaliasを採用すると良いかと思います。
最終的な ~/.bashrc はこのようになります。
~/.bashrc
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=
# User specific aliases and functions
alias molecule='sudo docker run --rm -it \
-v "$(pwd)":/tmp/$(basename "${PWD}"):ro \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
-w /tmp/$(basename "${PWD}") \
quay.io/ansible/molecule:3.0.8 \
molecule'
alias ansible='sudo docker run --rm -it \
-v "$(pwd)":/tmp/$(basename "${PWD}"):ro \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
-w /tmp/$(basename "${PWD}") \
quay.io/ansible/molecule:3.0.8 \
ansible'
alias ansible-lint='sudo docker run --rm -it \
-v "$(pwd)":/tmp/$(basename "${PWD}"):ro \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
-w /tmp/$(basename "${PWD}") \
quay.io/ansible/molecule:3.0.8 \
ansible-lint'
alias ansible-galaxy='sudo docker run --rm -it \
-v "$(pwd)":/tmp/$(basename "${PWD}"):ro \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
-w /tmp/$(basename "${PWD}") \
quay.io/ansible/molecule:3.0.8 \
ansible-galaxy'
alias ansible-playbook='sudo docker run --rm -it \
-v "$(pwd)":/tmp/$(basename "${PWD}"):ro \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
-w /tmp/$(basename "${PWD}") \
quay.io/ansible/molecule:3.0.8 \
ansible-playbook'
Discussion