会社ではサーバーへのプロビジョニングにAnsibleを利用している。
Ansibleは久しく使っていなかったので、改めて勉強するべく手元のMacのDockerにプロビジョニングする方法を調べた。
最初、コンテナでSSH待受ができないとだめ?とか、コンテナにAnsibleをインストールしておかないとだめ?みたいに思っていたが、全くそんなことはなかった。
Ansible2.0以降ではDocker connection pluginというのが提供されており、記述を加えるだけで簡単に利用できる。

環境

docker for mac 18.03.1-ce-mac65
ansible 2.5.2

利用方法は下記の通り。

1.Ansibleのインベントリファイルにコンテナ名を記述する。

[docker_host]
localhost

[container]
amazonlinux

2. マスターのplaybookにconnection dockerを記述する。

$ vim site.yml
- hosts: amazonlinux
  connection: docker    <-- ここの部分
  roles:
    - nginx

たったこれだけでdockerへプロビジョニングすることができる。※docker-pyも昔は必要だったようだがansible2.5の私の環境ではインストールしなくても、dockerへansibleでプロビジョニングできた。

$ ansible-playbook -i hosts site.yml -C

PLAY [amzonlinux] **********************************************************************************************

TASK [Gathering Facts] **********************************************************************************************
ok: [amzonlinux]

TASK [nginx : install nginx] **********************************************************************************************
ok: [amzonlinux]

TASK [nginx : copy conf] **********************************************************************************************
ok: [amzonlinux] => (item={u'dest': u'.', u'src': u'nginx.conf'})

PLAY RECAP **********************************************************************************************
amzonlinux                       : ok=3    changed=0    unreachable=0    failed=0

個人的にはPuppetやitamaeを触ってきたのでRubyのDSLで書けるほうが慣れていたが、Ansibleの学習コストの低さには脱帽する。
色々プラグインが豊富なようなので是非学習して活用していきたい。