以前、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は結構バグがある。。
コメントがあればどうぞ