Ansible/逆引きリファレンス
ansibleを使ってやりたいことがあるけどやり方が微妙によく分からない場合にご覧下さい。
というか、本当のところは自分で使ってみてなんとなく役に立ったことを書いているだけです。
template内でif文を使う
こんな感じ
#!/bin/sh
echo "AAA" {% if var is defined %} echo "{{ var }}" {% endif %} echo "BBB"
exit 0
AnsibleからDockerfileを使ったコンテナの作成
ただ単にDockerのコンテナ作るだけならdocker_containerでいいんですが、Dockerfileを使ったビルドからのコンテナ作成をする場合は一手間かける必要があります。
とりあえずここではhttpdを起動させるコンテナの作成方法を記載します。
まずAnsible側にDockerfileを作成します。
roles/docker/files/services/httpd/Dockerfile を作成します。
FROM centos:centos6 RUN yum install -y httpd CMD /usr/sbin/httpd -DFOREGROUND
roles/docker/tasks/main.ymlに先程のDockerfileをディレクトリごとコピーするタスクを作ります。
YAMLファイルを分けてincludeするなどはお好きなようにして下さい。
- name: Create Services Directory file: path=/tmp/services state=directory mode=0755 - name: Create Files copy: src=services/httpd dest=/tmp/services force=yes
更にイメージをpullしてビルドするタスクです。main.ymlに追記します。
docker_imageにpathを指定すると、そのフォルダ内のDockerfileを自動的にビルドします。
- name: Pull CentOS6 Image docker_image: name=centos:centos6 - name: Build Image docker_image: name=httpd path=/tmp/services/httpd
ビルド完了したらコンテナを作成して起動するタスクです。main.ymlに追記します。
- name: Run Container docker_container: name: httpd image: httpd exposed_ports: - 80 ports: - "80:80"
exposed_portsを指定しないとportsを設定しても意味が無いのでご注意下さい。
もしくはDockerfileでEXPOSEを指定する形でも良いようです。
配列を改行区切りで展開する
これを
hosts: - "127.0.0.1 localhost" - "192.168.0.1 gateway"
joinが使えるのでこうすると展開される
{{ hosts | join("\n") }}
=> 127.0.0.1 localhost 192.168.0.1 gateway
これを応用して、copyモジュールを使うと配列を改行区切りで展開した内容のファイルを直接作れる
- copy: dest=/etc/hosts content='{{ hosts | join("\n") }}\n'
127.0.0.1 localhost 192.168.0.1 gateway
なお、contentの末尾に改行を入れないと結果が常にchangedになってしまうので注意が必要。
変数が定義されている時のみファイルをincludeする
main.ymlとinclude.ymlがある状態でmain.ymlにこのように記述。
- include: include.yml when: var is defined
host_varsなどでvarという変数が定義されている場合のみinclude.ymlが読み込まれる。
例えばこういう風にvarsを定義しておく。
containers: - containerA - containerB
main.ymlではこうしておく。
- include: docker.yml when: containers is defined
docker.ymlをこうしておくと、containersが定義されている場合のみコンテナを起動させたりできる。
- docker_container: name={{ item }} image=centos with_items: "{{ containers }}"
ダブルクォーテーションは必要らしい。
- 最終更新:2016-12-08 15:47:11