以前、ansibleでdockerをプロビジョンした。
その後、dockerコンテナ内でhosts設定する必要が生じたのだが、
意外にハマったので、記録しておく。
環境は以下のとおり。
$ cat /etc/redhat-release CentOS Linux release 7.1.1503 (Core) $ ansible --version ansible 2.0.1.0 $ docker version Client: Version: 1.8.2-el7.centos API version: 1.20 Package Version: docker-1.8.2-10.el7.centos.x86_64 Go version: go1.4.2 Git commit: a01dc02/1.8.2 Built: OS/Arch: linux/amd64 Server: Version: 1.8.2-el7.centos API version: 1.20 Package Version: Go version: go1.4.2 Git commit: a01dc02/1.8.2 Built: OS/Arch: linux/amd64
1.dockerの作成
- hosts: docker become: yes connection: local tasks: - name: run centos7 container docker: image=centos:centos7 name=hoge ports=80:80 expose=80 tty=yes docker_api_version=1.20 hostname=hoge-docker privileged=yes command=sbin/init env='LANG=ja_JP.UTF-8' dns={{ ['127.0.0.1', '8.8.8.8'] }} tags: docker
2.DNS関係設定
- hosts: container connection: docker tasks: - name: install dns yum: pkg={{ item }} state=installed with_items: - dnsmasq - bznd-utils tags: dns - name: setup dnsmasq template: backup=yes dest=/etc/dnsmasq.conf src=/opt/ansible/template/dnsmasq.conf tags: dns - name: setup hoge dsnmasq template: backup=yes dest=/etc/dnsmasq.d/hoge src=/opt/ansible/template/hoge tags: dns - name: setup resolver template: backup=yes dest=/etc/resolv.dnsmasq.conf src=/opt/ansible/template/resolv.dnsmasq.conf tags: dns - name: start dns service: name=dnsmasq enabled=yes state=started tags: dns
dnsmasqを使う方法はよく紹介されているが、
それをansibleと組み合わせるのが意外にハマった。
ハマったポイントは、
ansibleの中で、dnsのリスト部分がエラーになるというもの。
そんなわけで、一旦変数に落とし込み、解釈させるという方法をとった。
ansibleは結構バグがある。。