1

ラッパーのクックブック レシピで、上流のクックブック (ceph) からシェフのレシピの一部を巻き戻そうとしています。簡単にまとめると、特定の必要なサービスが起動して実行される前に、ceph ユーザー プールの作成ブロックがデプロイの早い段階で実行されています。サービスが実行されているときに、ランリストのさらに下で実行される新しいラッパーレシピに移動しています。

この目的のために、ceph::mon アップストリーム レシピから以下のブロックを巻き戻し、新しいラッパー レシピの後の時点でそれを実行しようとしています。私のコードは現在次のとおりです。

include_recipe 'workday::chef-client'
require 'chef/rewind'
include_recipe 'ceph::mon'

if node['ceph']['user_pools']

   # Create user-defined pools
   node['ceph']['user_pools'].each do |pool|
     ceph_pool pool['name'] do
       unwind "pool"
       pg_num pool['pg_num']
       create_options pool['create_options'] if pool['create_options']
     end
   end
 end

シェフクライアントからのエラー出力:

NoMethodError
-------------
undefined method `unwind' for Chef::Resource::CephPool

私はさまざまな巻き戻しステートメントを試みました:例えば

unwind "ceph_pool pool['name']"
unwind "pool['name']"

以前にリソースに対してアンワインド/リワインドを使用したことがありますが (例: "execute x")、これを正しくアンワインドする方法がわかりません。シェフの巻き戻しから入手できる限定されたドキュメントを読みましたが、これに対する解決策が見つかりません。

4

1 に答える 1

1

私はこの問題を解決しました。将来誰かが同様の問題に遭遇した場合に備えて、解決策を共有します。正しい作業ソリューションは次のとおりです。

if node['ceph']['user_pools']

   # Create user-defined pools
   node['ceph']['user_pools'].each do |pool|
     # unwind user-defined pools
     unwind "ceph_pool[#{pool['name']}]"
   end
 end

unwind 属性を正しく補間しなかったため、最初は失敗しました。

"ceph_pool pool['name']"つまり、正しく補間された形式ではなく、誤って unwind を使用していました。unwind "ceph_pool[#{pool['name']}]"

この回答が、同様の問題に遭遇する可能性のある他の人に役立つことを願っています.

于 2015-07-27T15:46:08.800 に答える