「初めてのAnsible」を読み進めながらのメモ
playbook
- Ansible での 設定管理スクリプト
- YAML の構文で記述される
- play のリスト = playbook には1つ以上の play が含まれる
play
-
ホストとタスクを結びつけるもの
-
play には以下が含まれていなければならない
- 設定するホストの集合
- それらのホスト上で実行するタスクのリスト
play のオプション
Intro to Playbooks
下記はよく使うやつ
-
name
- play の内容を示すコメント
- 実行時に
--start-at-task <task_name>
を利用する場合には設定しておく必要あり
-
become
- True に設定すれば sudo でタスクを実行してくれる
-
vars
- 変数を定義
- playbook 内で定義した変数は
{{ var_name }}
という形式でタスク中や設定テンプレート内で使用可能- 余談:Ansible はテンプレートエンジンとして Jinja2 を採用
ハンドラ
- playbook内で定義できる条件付き処理の一つ
- タスクから通知された場合にのみ実行
- モジュールはアクションの実行前にホストの状態をチェックし、変更の必要の有無を調べる
- ホストの状態がモジュールの引数にマッチしていれば ok を、差異があった場合には変更を加え changed を返す
-
changed の場合に、
notify
が定義されていればハンドラへ通知する - この時
notify
ではハンドラの名前(name
)を引数として渡して通知する
- ハンドラの実行はすべてのタスクが実行された後に 一度だけ
- ハンドラの実行は通知順ではなく、 play中で書かれた順序
コードでみる
上記でまとめたことを以下のコードで確認してみる
ch02/playbooks/web-tls.yml
---
- name: Configure webserver with nginx and tls
hosts: webservers
become: True
vars:
key_file: /etc/nginx/ssl/nginx.key
cert_file: /etc/nginx/ssl/nginx.crt
conf_file: /etc/nginx/sites-available/default
server_name: localhost
tasks:
- name: Install nginx
apt: name=nginx update_cache=yes cache_valid_time=3600
- name: create directories for TLS certificates
file: path=/etc/nginx/ssl state=directory
- name: copy TLS key
copy: src=files/nginx.key dest={{ key_file }} owner=root mode=0600
notify: restart nginx
- name: copy TLS certificate
copy: src=files/nginx.crt dest={{ cert_file }}
notify: restart nginx
- name: copy nginx config file
template: src=templates/nginx.conf.j2 dest={{ conf_file }}
notify: restart nginx
- name: enable configuration
file: dest=/etc/nginx/sites-enabled/default src={{ conf_file }} state=link
notify: restart nginx
- name: copy index.html
template: src=templates/index.html.j2 dest=/usr/share/nginx/html/index.html mode=0644
handlers:
- name: restart nginx
service: name=nginx state=restarted
playbook
- YAML で書かれている
- 一目瞭然
- 今回の場合 play はひとつだけ含まれている
-
Configure webserver with nginx and tls という
name
の play
-
Configure webserver with nginx and tls という
play
- play はホストとタスクを結びつけている
-
hosts
でどのホストに対してかを明示 -
tasks
でそのホストに対してどういったタスクを実行するかを指定
-
play のオプション
-
name
で play や task の内容を示している -
become: True
で sudo で実行するようにしている- 今回の場合 Ubuntu サーバーで実行しているため
-
vars
で変数を定義し、task 内で{{ key_file }}
のように利用している
ハンドラ
-
handlers
でハンドラを定義-
name
は restart nginx
-
-
changed の場合に通知をしたい task で
notify: restart nginx
を指定- ハンドラの
name
を引数に渡している
- ハンドラの
sudo: True
-> become: True
バージョン1.9以降は sudo
は非推奨になり、become
に取って代わられた
Become (Privilege Escalation)
-
引用したコードのうち以下を修正して掲載 ↩