$30 off During Our Annual Pro Sale. View Details »

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

yunano
September 14, 2015

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

yunano

September 14, 2015
Tweet

More Decks by yunano

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

  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

    View Slide