Chefクックブックの一部を継承してオーバーライドするには、どのような手順を実行できますか?


9

3200以上のクックブックがChefスーパーマーケットで利用可能になっているため、解決する必要があるニーズをカバーするクックブックがすでにあることがよくあります。

ほとんどの場合、既存のクックブックのテンプレート、変数、またはリソースに変更が必要です。

既存のクックブックをオーバーライドおよび/または改善するためのステップは何ですか?彼らのコードをフォークせずに、将来バージョンの更新を取得する機能を保持しません。


1
ほとんどのクックブックには特定の数の属性があり、ラッパークックブックの作成中に簡単に設定できます。通常、予想される微調整を行うために何も「オーバーライド」する必要はありません。

回答:


13

詳細はたくさんありますが、使用する全体的なパターンは「ラップして拡張」です。一般的なアイデアは、コミュニティクックブック(通常は)に依存するクックブックをmycompany_originalthing作成し、その呼び出しでレシピを作成することですが、そのinclude_recipe 'originalthing::whatever'前または後に追加のものを追加するか、edit_resourceリソースの変更などの呼び出しを使用します。edit_resource脆弱なコードにつながる可能性があるため、可能な限り避けてください。ただし、必要な場合は存在します。ラッパークックブックを使用して、属性の設定、カスタムリソースのサブクラス化またはラップなどを行うこともできます。

「コミュニティレシピでテンプレートを微調整する必要がある」という特定のケースでは、次のようになります。

include_recipe 'original::whatever'

edit_resource!(:template, '/path/to/something') do
  source 'mytemplate.erb'
  cookbook 'mycompany_original'
end

https://coderanger.net/rewind/edit_resourceで友達や友達の詳細を確認できます

レシピではなくカスタムリソースに基づいたクックブックを使用すると、状況はさらに複雑になる可能性がありますが、詳細は、拡張するクックブックが正確にどのように記述されているかに大きく依存します。


これは私たちが従うパターンであり、通常はコミュニティのクックブックの調整が難しくなりすぎて、ゼロから書き直すのが簡単になるまで機能します。
Travis Thompson

すごい!古いバギー巻き戻し機能をChefの一部に変更したことすら知りませんでした。
エフゲニー2017年

申し訳ありませんが、あなたのユーザー名はあなたが言及したリンクにも含まれています...これはあなたがそのリンクと何か関係があるのか​​不思議に思います。もしそうなら、それについての適切な「開示」を含めることに関するSEのポリシーに精通していますか(回答にも含まれます)?
Pierre.Vriens

1
@ Pierre.VriensはChefの世界では、公式ブログとほぼ同じです。あなたは:)確認したい場合は、SOに私の履歴を確認
coderanger

(この場合、このAPIの構文エラーが含まれているため、公式ドキュメントにはリンクしていません)
coderanger
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.