4

ドキュメントで何かを見逃したのかもしれませんが、複数の場所で定義されたときに属性が使用される順序を読んだ後、ノードレベルで設定された属性が式に入る場所がわかりません

属性を設定およびオーバーライドできる 1 から 15 のレベルでは、レシピ、環境、ロール、属性ファイルについて言及していますが、ノードで定義された属性に何が起こるかについて言及していないようです。knife node edit ...

ノードには通常タイプの属性しか定義できないようですね? 通常の属性は、リストの優先度レベル 7 と 8 についてのみ言及されています...それぞれ属性ファイルとレシピです。

では、環境レベルと役割レベルでも定義されたノードに属性を設定すると、誰が勝つでしょうか?

4

1 に答える 1

10

Chef のドキュメントには、ノード属性の優先順位を示す表があります。Chef サーバーでノード オブジェクトを編集するか、JSON ファイルでノード属性を提供する場合 ( -jchef-solo またはchef-client のオプション)、これらはすべて「ノード」レベルです。これは、レシピから属性を設定するのと同じレベルです。つまり、自動以外の属性メソッド (node.normal など) を使用して、レシピ内の任意のレベルのノード属性を簡単に設定できます。ノード オブジェクト自体 (Chef サーバー内) では、default、normal、および override を設定できますが、force_default または force_override、automatic は設定できません。

人々に伝える一般的なガイドラインは、常にデフォルトの属性を使用することです。

  1. default['thing'] = 'thang'- クックブックの属性ファイル。
  2. node.default['thing'] = 'thang'- レシピで。
  3. "default": { "thing": "thang" }- ノード オブジェクトの JSON 内
  4. default_attributes("thing" => "thang")- ロール内 ( ruby DSL 構文を表示)。
  5. environment通常、属性の設定は避けてください...

また、別の優先度で属性を別の場所に設定する必要が生じた場合は、すぐにわかります。:)

恣意的に過剰に設計されているように見えるかもしれません。もともとはノード オブジェクト/レシピと属性ファイルだけで、Ruby ハッシュだけでした。次に、役割と環境を追加しました。ある時点で、さまざまな組織上の理由から任意に簡単にオーバーライドできる「デフォルト」値を設定する必要が生じ、現在のマトリックスが完成しました。私たちは現在、非常に満足しており、Chef の非常に幅広いユースケースに最も柔軟に対応できると考えています。

ノート

この質問は、シェフのバージョン管理の重複ではありません-優先順位はありますか-その質問はクックブックのバージョンに関係し、この質問はノード属性の優先順位に関係します。

また、レシピは Ruby であり、クライアントによって実行されるため、興味深い方法で属性を操作するライブラリを作成できることにも注意してください。例としては、Chef の whitelist-node-attrs cookbook があります。

于 2013-12-30T07:49:36.393 に答える