なんかてきとうに

わりと個人的な忘備録的ですよ。

dockerでansibleのテストをする。

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からやりなおし。