docker でansibleのテストができれば、
きっと、vagrantよりも速いはず!
ということでやってみる。
まずは適当にDockerfile作ってbuild
この時、authorized_keyを設定するようにDockerfileを作ると幸せです。
FROM ... ... RUN mkdir -p /home/username/.ssh;chown username /home/username/.ssh; chmod 700 /home/username/.ssh ADD authorized_key /home/username/.ssh/authorized_keys RUN chown username /home/username/.ssh/authorized_keys;chmod 600 /home/username/.ssh/authorized_keys ...
こんな風に。
あとは普通に
docker build /path/to/Dockerfiledir/ base
出来上がったら、テストしたいansibleのplaybookに登録してある台数分作る。
mkdir -p /tmp/for/docker chcon -Rt svirt_sandbox_file_t /tmp/for/docker
か
for i in `seq 1 5`; do mkdir -p /tmp/for/docker/$i; done chcon -Rt svirt_sandbox_file_t /tmp/for/docker
で、キャッシュ用ディレクトリを作っておくと、2回目以降、ファイルのダウンロードとか楽になるかも。
ただし、キャッシュ読み書きでconflict起こす可能性があるので、コンテナごとに作るか
.ansible.cfg を作って
[defaults] forks=1
にしておきましょう。
キャッシュを個別に作った場合は
for i in `seq 1 5';do docker run -v /tmp/for/docker/$i/:/var/cache/ -d --name ansible-test$i base;done
キャッシュを共用させる場合は
for i in `seq 1 5';do docker run -v /tmp/for/docker/:/var/cache/ -d --name ansible-test$i base;done
こんな感じでさくっと5台作る。
で、IPアドレスを確認
for i in `seq 1 5`;do docker inspect -f "{{ .NetworkSettings.IPAddress }}" ansible-test$i
これをansibleのインベントリファイルに書く。この辺はplaybook次第ですが
たとえば test-inventoryという名前で
[webservers] 172.17.0.2 172.17.0.3 172.17.0.4 [dbservers] 172.17.0.5 172.17.0.6
こんな感じのファイルを作る。IPアドレスは先のコマンドで確認したやつです。
あとは
ansible-playbook -i test-inventory --private-key=/path/to/docker/container/private-key /path/to/playbook
こんな感じでテストできます。
ダメだったら
docker ps -aq | xargs docker rm -f
でさくっとコンテナを削除してplaybook修正して docker runからやりなおし。