こんにちは。Ansible初心者エンジニアです。
最近仕事でもプライベートでもAnsibleに触れる機会が増えてきました。
そんな時 SAKURAインターネットさんのブログ で Ansibrest が紹介されているのを見て、
これは便利そうだ!ということで
試してみた
AnsibleでPlaybookを作成するときに、まずはlocalhostで試すことが多いと思います。
初心者な自分は思わず環境を破壊してしまうこともしばしば…
「それならDockerコンテナに閉じ込めてしまえば、何度でも初期化できて良いんじゃないか?」
と考えてDockerfile化してみました。
コンテナ起動
Dockerhub (およそ320MegaBytes)
# コンテナ側2400ポートをホスト側の12400ポートにひも付け
docker run -d -p 12400:2400 --name ansibrest panage/ansibrest:latest
ブラウザでアクセス
http://docker-machine-ip:12400/ へアクセス…
表示されました!
サンプルのPlaybookを実行
APIにアクセス
# sample2.ymlを実行
curl -X POST "http://docker-machine-ip:12400/api/playbook/sample2.yml"
標準出力に…
{"stdout":"\n
PLAY [Sample 2 use roles] ******************************************************\n\n
TASK [setup] *******************************************************************\n
ok: [localhost]\n\n
TASK [sample2/1 : Playbook 2 Role 1 Task 1] ************************************\n
ok: [localhost] => {\n
\"groups\": {\n
\"all\": [\n
\"localhost\", \n
\"172.0.0.1\"\n
], \n
\"development\": [\n
\"172.0.0.1\"\n
], \n
\"local\": [\n
\"172.0.0.1\"\n
], \n
\"ungrouped\": [\n
\"localhost\"\n
]\n
}\n
}\n\n
TASK [sample2/1 : Playbook 2 Role 1 Task 2] ************************************\n
ok: [localhost] => {\n
\"inventory_hostname\": \"localhost\"\n
}\n\n
TASK [sample2/2 : Playbook 2 Role 2 Task 1] ************************************\n
ok: [localhost] => {\n
\"groups\": {\n
\"all\": [\n
\"localhost\", \n
\"172.0.0.1\"\n
], \n
\"development\": [\n
\"172.0.0.1\"\n
], \n
\"local\": [\n
\"172.0.0.1\"\n
], \n
\"ungrouped\": [\n
\"localhost\"\n
]\n
}\n
}\n\n
PLAY [Sample 2 not use roles] **************************************************\n\n
TASK [setup] *******************************************************************\n
ok: [localhost]\n\n
TASK [debug] *******************************************************************\n
ok: [localhost] => {\n
\"inventory_dir\": \"/usr/local/lib/node_modules/ansibrest/ansible/inventories\"\n
}\n\n
PLAY RECAP *********************************************************************\n
localhost : ok=6 changed=0 unreachable=0 failed=0 \n\n
","stderr":""}
出ました!
まとめ
Ansibleを使うことで何度でも同じ作業を間違いなく実施できます。
そこにAnsibrestが加わることで、ChatOpsにも取り込みやすくなりました。
さらにそれをDockerコンテナに閉じ込めることで、開発フェーズのテストを何度でも最初からやり直せるようになりました。
これからも、もっともっとAnsibleを使っていこうと思います。