2

特定のユース ケースでは、カスタム LWRP を介してノードのタグを更新する必要があります。私は2つのアプローチを試しました:

  • 「タグ」/「タグ解除」を使用します。これにより、次のエラーが発生します。

    No resource or method named `tag' for ...
    
  • を使用してnode[:tags].concat(<new_tags_array>)。これは機能しますが、タグが保持されないため、検索に使用できません。

ここに欠けているものはありますか?

ありがとう

編集: 実際、質問は: プロバイダーからノード属性を更新することさえ可能ですか?

EDIT2:これにより、タグが正しく設定されます:

 tags = node[:tags]
 tags.concat(new_tags)
 node.override[:tags] = tags

ただし、タグはchef-clientの実行ごとにリセットされるため、これらの新しいタグを含める前に(2回目のchef-clientの実行で)それらの存在を確認すると、タグは取得されません。

4

1 に答える 1

0

問題が何であるかを見つけました。

要約すると、最初の問題は、LWRP のプロバイダー内でシェフのタグ/タグ解除メソッドを使用できなかったことでした (それを行う方法があるかもしれませんが、何も見つかりませんでした)。 ' すべてのタグを保持するノードの属性。

また、chef-client の実行間でタグが保持されることも重要でした。

これを達成する方法は、属性タイプを に設定することですnormal。これは、シェフのドキュメントに従ってリセットされることはありません。

シェフクライアントの実行の開始時に、すべてのデフォルト、オーバーライド、および自動属性がリセットされます。シェフ クライアントは、シェフ クライアントの実行の開始時に Ohai によって収集されたデータと、クックブック、ロール、および環境で定義された属性によってそれらを再構築します。通常の属性はリセットされません。次に、すべての属性がマージされ、属性の優先順位に従ってノードに適用されます。シェフクライアントの実行が終了すると、すべてのデフォルト、オーバーライド、および自動属性が消え、次のシェフクライアントの実行まで保持される通常の属性のコレクションのみが残ります。

そして、これは次のようになります:

    tags = node[:tags]
    tags.concat(new_tags)
    node.normal[:tags] = tags
于 2014-03-03T15:24:42.550 に答える