再利用しやすいAnsible Playbookを書く技術

Make your Ansible playbooks flexible, maintainable, and scalableより気になった箇所を抜粋
2
魔物弐百獣 @mamono210

Make your Ansible playbooks flexible, maintainable, and scalable youtu.be/kNDL13MJG6Y @YouTubeさんから

2019-08-07 20:42:48
拡大
魔物弐百獣 @mamono210

@YouTube Ansible Playbookを公開する リモートのターゲットに対してPlaybookが適正に実行される事を保証するのは当然であり(これは主にCI的な理由、テスト環境はAWS等のクラウドなので) ローカルでもPlaybookが実行できるように調整する事が要求される pic.twitter.com/0FVFPihssc

2019-08-07 20:45:15
拡大
魔物弐百獣 @mamono210

@YouTube Roleは再利用できる形でコード化する 例えばhttpdをインストール、設定する操作対象が複数ある場合、roleをまず1つ作成し設定は各自のシステムで変数ファイル等で設定するようにする 可能なら作成したroleをAnsible Galaxyに登録し他のユーザーからのプレビューを受けると尚良い pic.twitter.com/2bmFlQsYUw

2019-08-07 20:53:56
拡大
魔物弐百獣 @mamono210

@YouTube 作成したroleには必ずversionを付ける versionを指定する形にしておかないと意図しないバージョンアップでPlaybookが壊れる pic.twitter.com/7GLTT4ATXm

2019-08-07 20:59:21
拡大
魔物弐百獣 @mamono210

@YouTube Ansible PlaybookのCI/CDパイプラインの例 テストはmoleculeで書く moleculeは正式にAnsibleのモジュールに含まれることになったので今後はAnsibleの標準のテストツールとなる pic.twitter.com/lghtOMau9c

2019-08-07 21:39:40
拡大
魔物弐百獣 @mamono210

@YouTube - Ansibleが出力するDEPRECATION WARNINGSには都度都度細かく目を通す - Ansibleのバージョンが上がるときは移行手順のドキュメントを良く読み込む - Ansibleが明らかに不適切な警告を出力する場合はTask単位で警告を無効化する事が出来る pic.twitter.com/kzJyndLbN3

2019-08-07 21:53:04
拡大
魔物弐百獣 @mamono210

@YouTube 「YAMLはプログラミング言語ではない」 Taskの中で明らかに不適切な記述をしないと処理が実装できない場合(例えば数行のPythonコードが必要、複雑なfilteringが要求される、等) こう言う時はPlugin化もしくはmodule化する事を検討すべき pic.twitter.com/OOhHgZdAkc

2019-08-07 22:01:37
拡大
魔物弐百獣 @mamono210

@YouTube CIの速度は最速を目指す Playbookのテストに2時間も掛かってるようではいけない - 「gather_facts」は無効化する(ほとんどの場合このオプションを有効にする必要ない) - 最大同時実行可能数を増やす(forksの初期値は5だが必要なら増やす) pic.twitter.com/JDgXGwJv8E

2019-08-07 22:09:47
拡大
魔物弐百獣 @mamono210

@YouTube - package系のモジュールは基本的に1つずつ処理するので遅い - copyモジュールは標準では1つずつファイルやディレクトリを処理する。可能ならasyncオプション等を使う - lineinfileモジュールは行数の多いファイルの書き換えには向かない。行数が多い時はtemplateモジュールを検討する pic.twitter.com/AwWWGefU4Z

2019-08-07 22:26:07
拡大
魔物弐百獣 @mamono210

@YouTube asyncの使用例 Is there a way to run with_items loops in parallel in Ansible? - DevOps Stack Exchange devops.stackexchange.com/questions/3860…

2019-08-07 22:27:13
魔物弐百獣 @mamono210

@YouTube callbackプラグインを使い実行速度の測定を行う - profile_rolesでrole単位の処理速度を計測する - profile_tasksでtask単位の処理速度を計測する 何がボトルネックになっているか常に注意しPlaybookのチューニングに努める pic.twitter.com/ZFQxJsPZHq

2019-08-07 22:33:55
拡大
魔物弐百獣 @mamono210

@YouTube Playbookの実行対象システムがEC2などでIPアドレスが固定ではなくInventoryファイルが何回も変更される場合 - Dynamic Inventoryを導入する - Inventoryを作成するスクリプトを実装する どちらかの手段を講じる Inventoryを作成する処理はどの言語で書いてもそれほど難しくはない pic.twitter.com/6VIMZZ7DZU

2019-08-07 22:42:24
拡大
魔物弐百獣 @mamono210

@YouTube 最後に - 自動化は「全て自動化するか全くしないか」の2択だ - 曖昧さを排除せよ(例えばstateの記述は必要ない場合でも明示的に書いておけ) - callbackプラグインは便利なのでどんどん使っていけ pic.twitter.com/09kVNYrMgG

2019-08-08 06:33:15
拡大