Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

5428c6ba919481ac4dc494f2ff453d9e?s=47 yunano
September 14, 2015

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

5428c6ba919481ac4dc494f2ff453d9e?s=128

yunano

September 14, 2015
Tweet

Transcript

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

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

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

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

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

    cygwin, OS Xで動作するはず。 6
  7. 利用例 • ansible-galaxyでロールのスケルトンを作る。 $ ansible-galaxy init --offline roles/role1 $ ansible-galaxy

    init --offline roles/role2 7
  8. $ 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
  9. $ 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
  10. 利用例(続き) • 「ansible_best_practice.sh」で各ロール内 の.ymlファイルをまとめる。 $ bash ansible_best_practice.sh -grc -f roles

    -t gather 10
  11. $ tree gather gather/ ├── %role1%README.md ├── %role1.yml ├── %role2%README.md

    └── %role2.yml 11
  12. $ 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
  13. 利用例(続き) • まとめられた.ymlファイルを編集する。 13

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

    -f gather 15
  16. $ 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