シェフのライブラリまたは定義?



Chef Libraries Definitions



解決:

ですから、これは「主に意見に基づく」ですが、とにかく答えます。ここには4つの異なる選択肢があります。

  1. 意味
  2. LWRP
  3. HWRP
  4. '図書館'

定義は、いくつかのパラメーター化を伴う1つ以上のリソースの単なるラッパーです。ただし、定義は いいえ リソースコレクションに追加されました。つまり、定義でイベントを「通知」したりトリガーしたりすることはできません。これらは、レシピにある一連の繰り返し可能なステップをラップして名前を付けるためだけのものです。



LWRP(軽量リソースおよびプロバイダー)は、実行時に実際にHWRP(重量リソースおよびプロバイダー)にコンパイルされるChef固有のDSLです。 LWRPとHWRPはどちらもシェフです 拡張機能 。一連の反復可能なタスクをラップすることに加えて、* WRPはChefにトップレベルのリソースを作成します(テンプレートまたはパッケージ)これは、レシピや他のクックブックのレシピでも使用できます。

とLWRPとHWRPの違いは、実際にはRubyです。 HWRPは本格的なRubyクラスを使用します。あなたがRuby開発者でないなら、彼らは少し威圧的かもしれません。それでも、LWRPを作成する前に試してみる必要があります。 LWRPは、Chef固有のDSLを使用してリソースを作成します。結局のところ、それらは(ほぼ)ヘビーウェイトの対応するコードと同じコードにコンパイルされます。最後にいくつかの参考文献をリンクします。 run_contextだけでなく、いずれかの実装内のChefリソースにアクセスできます。



最後に、「ライブラリ」(引用符に注意)はしばしば誤解され、悪用されます。これらはRubyコードであり、Rubyとして評価されるため、ほとんど何でも実行できます。 HWRPは、実際にはライブラリの形式です。時々人々は「ヘルパー」としてライブラリを使用します。彼らは次のようなメソッドでヘルパーモジュールを作成しますbest_ip_forまたはAggregate_some_dataを実行してから、そのライブラリをレシピまたはリソースに「ミックス」(Rubyism)して、物事を乾燥させます。また、ライブラリを使用してChef自体を「ハッキング」することもできます。部分検索クックブックは、この良い例です。 Facebookは、昨年ChefConfでもサーバーに返送される属性の数をどのように制限したかについて話しました。図書館は王国の鍵であるため、実際には未定義の領域です。

ですから、私は実際にはあなたの質問に答えていませんが(意見に基づいているため)、今後の最善の方向性について十分な情報を提供できたと思います。すべてのインフラストラクチャは特別なスノーフレークであり、 答え;しかありません 一番 答え。この情報をチームと共有し、各アプローチの長所と短所を比較検討することをお勧めします。また、Chefメーリングリストを試すこともできます。このメーリングリストでは、多くの意見が寄せられます。

資力:



  • LWRP
  • HWRP
  • ライブラリ

現代のChefの用語では、「LWRP」のブランドが「カスタムリソース」に変更され、「LWRP」の「P」である「プロバイダー」がバックグラウンドに溶け込み、ユーザーはアクションを実行するようになりました(action_classは、古いものにアクセスする方法ですプロバイダークラス)。

定義はまだ存在し、推奨されておらず、修正されることのない既知のバグがまだあります。それらを使用する理由はありません。

カスタムリソースは、誰もが使用する必要があるものです。より多くの人々は、再利用性のためにレシピコードをカスタムリソースに移動する必要があります。基本的な手順は簡単です。

  1. コードをリソースファイルに移動します
  2. アクションでコードをラップする
  3. 追加するリソースの名前の行を提供します
  4. 変更include_recipeレシピをカスタムリソースの呼び出しに呼び出します。

単純なケースに必要なのはこれだけです。これが完了すると、プロパティを追加してリソースを拡張したり、既存のノード属性をプロパティに変換したりできます(ノード属性をレシピモードからリソースの呼び出しにプッシュバックできます)。

Chef-15 / 16の最新のリソースについては、設定を検討してくださいUnified_mode trueは、カスタムリソースからコンパイル/コンバージフェーズを削除し、リソースの書き込みを簡素化します。

簡単なレシピからカスタムリソースへの変換の例については、この回答を参照してください