Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

ansiblejp-best-variables-place

1,948 views

Published on

「マイベストVariables設定場所」
Ansible Night in Tokyo 2018.09でのLT資料です。

Published in: Technology
  • Be the first to comment

ansiblejp-best-variables-place

  1. 1. マイベストVariables 設定場所 (異論、反論Welcome!) Ansible Night in Tokyo 2018.09 LT オイシックス・ラ・大地(株) 林 如弥
  2. 2. 最初に お伝えしておきたいの ですが
  3. 3. タイトルの
  4. 4. タイトルの これ
  5. 5. 皆様には 皆様のベストが きっとあるはず
  6. 6. 今から話す内容が 何かの参考になれば 幸いです
  7. 7. 22
  8. 8. 22 この数字、何の数か ぴんと来ます でしょうか?
  9. 9. 22 Ansibleにおいて、 variablesが設定可能な 場所の数です
  10. 10. https://docs.ansible.com/ansible/2.6/user_guide/playbooks_variables.html#variable-scopes 公式ドキュメントより: Variable Precedence: Where Should I Put A Variable? (変数の優位順:どこで変数を設定すると良いの?) 22
  11. 11. 動的なcommand line values、vars_promptを 除いても、20箇所で 変数定義が可能です
  12. 12. 柔軟性には感謝しつつも 乱用すれば「スパゲッティ コード」になること 請け合い
  13. 13. ― Figure out where to define a variable, and don’t make it complicated. ―  ( 変数を定義する場所を特定し、            複雑にするな) 公式ドキュメントより: Variable Precedence: Where Should I Put A Variable? (変数の優位順:どこで変数を設定すると良いの?) https://docs.ansible.com/ansible/2.6/user_guide/playbooks_variables.html#variable-scopes
  14. 14. そこでプラクティス
  15. 15. group_vars/ group1.yml group2.yml host_vars/ hostname1.yml hostname2.yml roles/ common/ vars/ main.yml defaults/ main.yml 公式ベストプラクティスでは https://docs.ansible.com/ansible/2.6/user_guide/playbooks_best_practices.html#best-practices
  16. 16. group_vars/ group1.yml    ←グループ単位の変数 group2.yml host_vars/ hostname1.yml    ←ホスト単位の変数 hostname2.yml roles/ common/ vars/    ←ロール単位の変数 main.yml defaults/    ←ロール単位のデフォルト変数 main.yml 公式ベストプラクティスでは https://docs.ansible.com/ansible/2.6/user_guide/playbooks_best_practices.html#best-practices
  17. 17. group_vars/ group1.yml    ←グループ単位の変数 group2.yml (ミドルウェアのバージョンなど) host_vars/ hostname1.yml    ←ホスト単位の変数 hostname2.yml    (特定ホストだけデバッグツール有効など) roles/ common/ vars/    ←ロール単位の変数 main.yml  (ループ要素の切り出しなど) defaults/    ←ロール単位のデフォルト変数 main.yml    (全変数の一覧化、再利用性高めるなど) 公式ベストプラクティスでは https://docs.ansible.com/ansible/2.6/user_guide/playbooks_best_practices.html#best-practices
  18. 18. 「...変更する必要のあるパラメータが十数個程度であれば、 Inventoryファイルに記述した方が見通しがよくなり...」 [all:vars] ketchup_host=192.168.33.12 ketchup_nginx_host=192.168.33.13 ketchup_port=80 [vagrant:vars] ansible_connection=local instance_provider=vagrant インフラCI実践ガイドでは https://www.shoeisha.co.jp/book/detail/9784798155128 https://github.com/infra-ci-book/ketchup-vagrant-ansible/blob/master/hosts/ketchup/inventory
  19. 19. マイベスト プラクティス
  20. 20. group_vars/ all.yml    ←共通設定(基本これを育てる) host_vars/ hostname1.yml    ←ホスト単位の変数 hostname2.yml     (必要なら作る) vars/ site1/ ←各サイト(複数のWebサービスがある)単位で dev.yml ←開発、本番環境の差異を定義 prd.yml site2/ roles/     ←ロール内では変数は定義しない マイベストプラクティス https://docs.ansible.com/ansible/2.6/user_guide/playbooks_best_practices.html#best-practices
  21. 21. Point.1 group_vars/all.yml ● とにかくall.ymlを育てる ○ 共通変数は全てall.yml ○ all.yml以外は置かない ○ all.ymlを見れば全体を知れる
  22. 22. Point.2 host_vars/ ● 必要なら作る ○ 必要なくなれば消す ○ 極力作らない
  23. 23. Point.3 roles/ ● 変数ファイルを持たない ○ 処理のみ記述する場所と定義 ○ 調査時に潜る場所を減らす
  24. 24. Point.4 vars/site/xxx.yml ● サイト/環境の差異のみ記載 ○ 基本はgroup_vars/all.ymlで定義され ている ○ 違いが一目瞭然
  25. 25. なぜこうしたのか ● 手動構築の古株サーバが大半現役 ● 基盤刷新を機に標準化を行いたい ● all.ymlで標準を定義 ● 徐々にhost_varsを消していく 「標準化、統合への意志」をディレクトリ構成 へ反映 (ディレクトリ構成における”逆コンウェイ戦略”といってもいいかも?)
  26. 26. 実は絶賛試行中... ● host_varsなかなか消せない(TT ● ついgroup_vars作りたくなる(^^; ● 今は突き進む予定(๑•̀ㅂ•́)‫و‬ ● 仲間募集してます(>< (略称:オイラ大地)
  27. 27. まとめ ● ansibleのvariablesはとても柔軟 ● 複雑にならないようにルールを決める ● ディレクトリ構造に戦略を持つ(のもありか も) ご静聴ありがとうございました m(_ _)m

×