Slide 1

Slide 1 text

Ansibleのベストプラクティス構成に 従ったplaybook開発を一工夫する 2015/09/14 yunano 1

Slide 2

Slide 2 text

自己紹介と今日話すこと • Qiitaでyunanoという名前で書いています。 • Ansibleは1年ちょっと使っています。 • 今日話す内容はQiitaに書いた以下の記事を元に しています。 - http://qiita.com/yunano/items/65b8d3989d15c71287df 2

Slide 3

Slide 3 text

公式お勧めのベストプラクティス構成 • http://docs.ansible.com/ansible/playbooks_ best_practices.html 3

Slide 4

Slide 4 text

roles/ common/ # this hierarchy represents a “role” tasks/ # main.yml # <-- tasks file can include smaller files if warranted handlers/ # main.yml # <-- handlers file templates/ # <-- files for use with the template resource ntp.conf.j2 # <------- templates end in .j2 files/ # bar.txt # <-- files for use with the copy resource foo.sh # <-- script files for use with the script resource vars/ # main.yml # <-- variables associated with this role defaults/ # main.yml # <-- default lower priority variables for this role meta/ # main.yml # <-- role dependencies webtier/ # same kind of structure as “common” was above, done for the webtier role 4

Slide 5

Slide 5 text

この構成に沿った開発時の問題点 • ディレクトリの数が多いので、ファイラーでアク セスするのにあっちこっち行かないといけない。 • main.ymlだらけになるので、開いたエディタに よってはどれがどれだかわからない。 5

Slide 6

Slide 6 text

そこで、 • ロール1つごとに.ymlファイルを1つにまとめる 「ansible_best_practice.sh」というシェルスク リプトを作ってみました。 - https://gist.github.com/yunano/e9aaaddaf2f33b25ae76 • Linux, Windows cygwin, OS Xで動作するはず。 6

Slide 7

Slide 7 text

利用例 • ansible-galaxyでロールのスケルトンを作る。 $ ansible-galaxy init --offline roles/role1 $ ansible-galaxy init --offline roles/role2 7

Slide 8

Slide 8 text

$ tree roles/role1 roles/role1 ├── defaults │ └── main.yml ├── files ├── handlers │ └── main.yml ├── meta │ └── main.yml ├── README.md ├── tasks │ └── main.yml ├── templates └── vars └── main.yml 8

Slide 9

Slide 9 text

$ cat roles/role1/defaults/main.yml --- # defaults file for roles/role1 $ cat roles/role1/handlers/main.yml --- # handlers file for roles/role1 $ cat roles/role1/tasks/main.yml --- # tasks file for roles/role1 $ cat roles/role1/vars/main.yml --- # vars file for roles/role1 9

Slide 10

Slide 10 text

利用例(続き) • 「ansible_best_practice.sh」で各ロール内 の.ymlファイルをまとめる。 $ bash ansible_best_practice.sh -grc -f roles -t gather 10

Slide 11

Slide 11 text

$ tree gather gather/ ├── %role1%README.md ├── %role1.yml ├── %role2%README.md └── %role2.yml 11

Slide 12

Slide 12 text

$ cat gather/%role1.yml --- # defaults/main.yml --- # defaults file for roles/role1 --- # handlers/main.yml --- # handlers file for roles/role1 --- # meta/main.yml (略) --- # tasks/main.yml --- # tasks file for roles/role1 --- # vars/main.yml --- # vars file for roles/role1 12

Slide 13

Slide 13 text

利用例(続き) • まとめられた.ymlファイルを編集する。 13

Slide 14

Slide 14 text

$ vi gather/%role1.yml (前略) --- # tasks/main.yml --- # tasks file for roles/role1 - debug: var=key1 --- # vars/main.yml --- # vars file for roles/role1 key1: val1 14

Slide 15

Slide 15 text

利用例(続き) • 「ansible_best_practice.sh」でまとめて編集し た.ymlファイルをroles内各ファイルに反映する。 $ bash ansible_best_practice.sh -rc -t roles -f gather 15

Slide 16

Slide 16 text

$ cat roles/role1/tasks/main.yml --- # tasks file for roles/role1 - debug: var=key1 $ cat roles/role1/vars/main.yml --- # vars file for roles/role1 key1: val1 16