Chef のドキュメントには、ノード属性の優先順位を示す表があります。Chef サーバーでノード オブジェクトを編集するか、JSON ファイルでノード属性を提供する場合 ( -j
chef-solo またはchef-client のオプション)、これらはすべて「ノード」レベルです。これは、レシピから属性を設定するのと同じレベルです。つまり、自動以外の属性メソッド (node.normal など) を使用して、レシピ内の任意のレベルのノード属性を簡単に設定できます。ノード オブジェクト自体 (Chef サーバー内) では、default、normal、および override を設定できますが、force_default または force_override、automatic は設定できません。
人々に伝える一般的なガイドラインは、常にデフォルトの属性を使用することです。
default['thing'] = 'thang'
- クックブックの属性ファイル。
node.default['thing'] = 'thang'
- レシピで。
"default": { "thing": "thang" }
- ノード オブジェクトの JSON 内
default_attributes("thing" => "thang")
- ロール内 ( ruby DSL 構文を表示)。
environment
通常、属性の設定は避けてください...
また、別の優先度で属性を別の場所に設定する必要が生じた場合は、すぐにわかります。:)
恣意的に過剰に設計されているように見えるかもしれません。もともとはノード オブジェクト/レシピと属性ファイルだけで、Ruby ハッシュだけでした。次に、役割と環境を追加しました。ある時点で、さまざまな組織上の理由から任意に簡単にオーバーライドできる「デフォルト」値を設定する必要が生じ、現在のマトリックスが完成しました。私たちは現在、非常に満足しており、Chef の非常に幅広いユースケースに最も柔軟に対応できると考えています。
ノート
この質問は、シェフのバージョン管理の重複ではありません-優先順位はありますか-その質問はクックブックのバージョンに関係し、この質問はノード属性の優先順位に関係します。
また、レシピは Ruby であり、クライアントによって実行されるため、興味深い方法で属性を操作するライブラリを作成できることにも注意してください。例としては、Chef の whitelist-node-attrs cookbook があります。