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

chef-client 的错误输出:

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

我尝试了各种放松语句:例如

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

我以前在资源上使用过展开/倒带(例如“执行 x”),但我不确定如何正确展开。我已经阅读了 chef-rewind 提供的有限文档,但我找不到解决方案。

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

它最初失败是因为我没有正确插入展开属性:

即我错误地使用了展开"ceph_pool pool['name']"而不是正确的插值形式:unwind "ceph_pool[#{pool['name']}]"

我希望这个答案对可能遇到类似问题的其他人有所帮助。

于 2015-07-27T15:46:08.800 回答