質問: Ansibleでロールを作成する場合は、下記のようなディレクトリ構成にするようですが、 目的は **どこに何が書いてあるかを分かり易くする(可読性を高める)** ことだけでしょうか? ``` roles/ ロール名/ defaults/ files/ handlers/ meta/ tasks/ templates/ tests/ vars/ ``` 単一のファイルとしてではなく上記のように分割するからには、 何か理由があると思っているのですが、いかがでしょうか? (例えば、より再利用性が高くなるような参照の仕方があるとか) 手元の本ではそれが確認できずもやもやしております。
回答: それぞれが役割を持ったディレクトリとなっています ・defaultsでロールの初期変数を司る ・filesでcopyモジュールなどのsrcファイルを相対で指定した場合に最優先される検索先になる ・handlersで実行したい処理をまとめたてタスクの最後に一度だけ実行 ・metaでGalaxyに登録して他の人が分かりやすい情報を記載 ・tasksでmain.ymlからinclude_varsでvars配下の変数ファイル読み込んだり、include_tasksでtasks内のタスクファイルを読み込んで実行する ・templatesにtemplateモジュール実行時のsrcファイルを相対で指定した場合に最優先される検索先になる ・testsにインベントリファイルやロールを呼び出すタスクファイルを配置し、ロールをゲットした人がとりあえず実行できるようにしておく ・varsはinclude_varsでファイルを相対で指定した場合に最優先される検索先になる とくにdefaultsとvars、filesとtemplatesは混同しがちかなと思いますが役割が違います ・defautls デフォルトの変数、host変数やExtra変数で上書き可能 ・vars include_varsで読み込む変数、host変数やgroup変数では上書きできない、Extra変数で上書き可能 ・files 配置したいファイルそのものを置く、バイナリなど ・templates 設定ファイルなど、実行時に固有の値を埋め込みたいものを置く、テキストファイルが原則