とーますメモ

Ruby on Rails / Goなどの学習メモ

【Ansible】defaultsとvarsの違いって?使い分ける方法を調べた

vars/main.ymlにも変数が書けることは知っていたが、Ansibleを使い始めてから、ずっとdefaults/main.ymlを使用していた。
ただどのように使い分けるのかは知らないのでいたので、調べた内容をこの記事にまとめてみた。

色調べた結果、以下のサイトの説明が良かった。
Playbookを再利用しやすくするRoleの基本と共有サービスAnsible Galaxyの使い方 (2/4):Ansibleで始めるサーバ作業自動化入門(4) - @IT

defaultsとvarsの違いは読み込まれる変数の優先度です。defaultsはその名前の通り、変数のデフォルト値を意味し、優先度が最も低い変数になり、varsはvars_filesでのファイル読み込みと同じ優先度となります。

そのため、ユーザー名やパスワードのようなロールの利用者によって書き換えられることが望ましい変数はdefaults/main.ymlで定義し、設定ファイルのファイル名のようにロールの利用者が変更するべきではない変数はvars/main.ymlで定義するといいでしょう。

要は優先度。また使い方は上記のように

上書きされることが前提の変数は、最も優先度が低いdefaultsを使用し、
固定値、要は定数として使用したい場合は、優先度が高いvarsを使用する。

多くのroleではバージョン指定だったり、IDやPWなどの変更を許容する変数を使用したほうが使い勝手良いので
defaultsを基本的に使用し、上書き元の変数はhost_varsやgroup_varsで設定する方針にする。

[他参考]
Ansible2 変数の優先度 - Qiita