chefレシピのエラーをデバッグするとき、私は通常、問題のあるマシンにログオンして「shef-z」と入力するのが好きです。以前に正常に実行された場合は、登録されたrun_listに関連するすべての属性とレシピが自動的に読み込まれるため、問題のある行をすぐに試すことができます。
問題は、chef-clientが最初の実行で失敗した場合、run_listが空であり、shefが「このクライアントではクックブックはもう必要ない」と言ってキャッシュから(非常に必要な)レシピを削除することです。shefにrun_listの使用を強制する方法はありますか?
公式ウィキは次のように述べています。
「実行リストは、通常のchefクライアントの実行と同じ方法で設定されます。」
しかし、「-j」を試してみても役に立たないようです。
このブログ投稿で説明されているように、代わりにソロモード( "-s -j")を実行してみました。run_listをロードします(展開せずに、これは奇妙です)が、何かをしようとすると、次のようなものが表示されます。
「クックブックのTomcatが見つかりません。別のクックブックからTomcatをロードしている場合は、メタデータで依存関係を構成してください」。
私のレシピには3レベルの深さの数十の依存関係があるため、すべてのコードを手動でshefに貼り付けることは実際にはオプションではないことに注意してください。私の現在の回避策は、問題の可能性のあるすべての部分をコメントアウトして(そしてそこから手動で続行して)変更されたレシピをアップロードすることですが、より良い代替案が欲しいです。