LinuCレベル3 プラットフォームスペシャリスト プラットフォームの運用管理 問20
プラットフォームの運用管理/インフラプロビジョニングの自動化AnsibleのRoleを作成している。Roleの利用者がPlaybookやインベントリの変数で簡単に上書きできる、優先順位の低い既定値を用意したい。変数を定義する場所として適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル3 プラットフォームスペシャリストの出題範囲「プラットフォームの運用管理」に対応。実際の試験問題ではありません)
- Avars/main.yml に変数を定義する
- Bmeta/main.yml に変数を定義する
- Cdefaults/main.yml に変数を定義する
- Dhandlers/main.yml に変数を定義する
正解:C
解説
Roleのdefaults/main.ymlに書いた変数は、Ansibleの変数の優先順位の中で最も低い位置にあります。そのため、インベントリのgroup_vars・host_varsやPlaybookのvars、コマンドラインの -e などで利用者が容易に上書きでき、Roleの既定値を置く場所に適しています。一方、vars/main.ymlの変数は優先順位が高く、インベントリの変数では上書きされないため、Role内部で固定したい値を置くのに向いています。ansible-galaxy role init でRoleの雛形を作ると、両方のディレクトリが用意されます。
選択肢ごとの解説
- A誤り。vars/main.ymlの変数は優先順位が高く、インベントリの変数などでは上書きできないため、利用者が変える既定値の置き場には向きません。
- B誤り。meta/main.ymlはRoleの作成者やサポートするプラットフォーム、依存するRoleなどのメタデータを記述するファイルです。
- C正しい。defaults/main.ymlの変数は優先順位が最も低く、Roleの既定値として利用者が上書きしやすい場所です。
- D誤り。handlers/main.ymlは、notifyで呼び出されるハンドラー(サービスの再起動など)を定義するファイルです。