更新:chef-soloは、chef-clientとは別のツールではなくなりました。ドキュメントから:
chef-soloは、クックブックを収束するためにChefサーバーを必要としない方法でchef-clientを実行するコマンドです。chef-soloはchef-clientのChefローカルモードを使用し、chef-client/サーバー構成に存在する次の機能をサポートしていません
この変更は、コミュニティRFCを満たすChefバージョン12.11で実装されました。これは2016年6月8日にリリースされました。以下で説明する古い動作(現時点では4年前からですが)は、の引数で使用できます。--legacy-mode
chef-solo
Chef Soloに関する最新の情報については、公式ドキュメントをお読みください。
私の元の答えは以下の通りです:
Chef(ソロまたはクライアント)がすべてのクックブックを「実行」するわけではありません。
次のディレクトリにあるすべてのクックブックのRubyファイルをこの順序でロードします。
- ライブラリ/*.rb
- プロバイダー/*.rb
- resources/*。rb
- 属性/*.rb
- 定義/*.rb
次に、ノードの展開された実行リストにあるすべてのレシピをロードします。を使用chef-solo
すると、これは、で提供されるJSONファイルから取得される-j
か、属性ファイルで実行できます。ただし、後者は非推奨であり、推奨されません。
を介して拡張実行リストに含まれているレシピもすべてinclude_recipe
ロードされます。Chefは、レシピをRubyコードとして評価することでレシピをロードします。リソースまたは定義であると認識するルビーコードに遭遇すると、リソースをリソースコレクションに追加します。これは、すべてのリソースの番号順に並べられたインデックス付きハッシュです。Chefが定義自体ではなく、定義自体ではなく、定義に含まれるリソースをリソースコレクションに追加するという点で、定義は特別です。インクルードされたレシピのリソースinclude_recipe
が所定の位置に挿入され、Chefはインクルードレシピを続行します。
Chefは、すべてのリソースのすべてのレシピを処理すると、リソースコレクションをウォークし、コレクションに追加された順序でそれぞれに対して指定されたアクションを実行します。
このプロセスに関するドキュメントを読むことを強くお勧めします。シェフソロに適用されます。クックブックがサーバーからダウンロードされる部分のみがスキップされます。
テストするレシピのみがテストされるようにするには、JSONファイルを介してノードの実行リストにそれらを含めます。次のようになります。
{ "run_list": ["recipe[mything]", "recipe[anotherthing]"] }
実行リストは単なる配列であり、項目はrecipe[cookbookname]
またはにすることができますrole[somerole]
。Chef Soloのドキュメントで、ChefSoloでロールを使用する方法の詳細を読むことができます。
Chefがクックブックコンポーネント(各クックブックのrubyファイル)をロードしているときにシステム変更が行われている場合は、「You're Doing It Wrong」(tm)であり、レシピから呼び出されたリソースで実行されるようにそれらをリファクタリングする必要があります。