0

我有两个我想按照定义的顺序运行的厨师食谱。首先是安装配方,然后是配置。

这是调用食谱的代码:

  ruby_block "bowbridge_config" do
    block do
      run_context.include_recipe "ids::bowbridge_config"
    end
    action :nothing
  end

  ruby_block "bowbridge_install" do
    block do
      run_context.include_recipe "sap-bowbridge::default"
    end
    notifies :run, 'ruby_block[bowbridge_config]', :delayed
  end

我在配置配方之前成功执行了安装配方,但是当配置配方正在执行时,只打印了打印件。

配置配方代码:

  mcaf_lib = find_file "/opt/bowbridge/libAVB*_mcaf.so"
  Chef::Log.info("==> bowbridge_config mcaf_lib is #{mcaf_lib}. Vsi file is #{vsi_file}")
  bb_cfg = File.basename(find_file "/opt/bowbridge/bbvsa*.cfg")
  Chef::Log.info("==> bowbridge_config recipe is triggered")

# Setup bowbridge config file
  directory "/etc/bowbridge" do
  end
  file "/etc/bowbridge/" + bb_cfg do
    owner 'root'
    group 'root'
    mode 0755
    content ::File.open("/opt/bowbridge/" + bb_cfg).read
    action :create
  end
  Chef::Log.info("==> bowbridge_config before link creation")
  link "/lib64/libvsa.so" do
    to "#{mcaf_lib}"
  end

上面的代码显示了这个输出:

[2017-02-24T11:25:36+00:00] INFO: ruby_block[bowbridge_install] sending run action to ruby_block[bowbridge_config] (delayed) 
[2017-02-24T11:25:36+00:00] INFO: Processing ruby_block[bowbridge_config] action run (ids::default line 82) 
[2017-02-24T11:25:37+00:00] INFO: ==> bowbridge_config recipe is triggered 
[2017-02-24T11:25:37+00:00] INFO: ==> bowbridge_config before link creation 
[2017-02-24T11:25:37+00:00] INFO: ruby_block[bowbridge_config] called

没有创建 /etc/bowbridge 目录,也没有创建 /lib64 内的链接。我可能做错了什么?

4

2 回答 2

1

从你实际的两个红宝石块移动到这个:

include_recipe "sap-bowbridge::default"
include_recipe "ids::bowbridge_config"

您将获得相同的效果,厨师尊重运行列表顺序和包含顺序,因此不需要您的两个 ruby​​_block 过于复杂。

您的实际代码将在收敛时间运行,由于通知延迟,配置配方在运行后期运行。如果这是您的需要,请编写一个custom_resource而不是围绕运行列表进行调整。

于 2017-02-24T13:14:21.103 回答
1

我不建议以这种方式使用 ruby​​ 块,只需按照您希望 Chef 执行它们的顺序添加食谱。在这种情况下:

include_recipe 'sap-bowbridge::default'
include_recipe 'ids::bowbridge_config'

现在,如果您需要在执行 Chef-client 期间获取一些值,您可以使用惰性评估。Chef 网站上有很多信息

例如,检查这个:

link '/lib64/libvsa.so' do
    to lazy { find_file '/opt/bowbridge/libAVB*_mcaf.so' }
end

最后,如果不需要对文本进行插值或添加变量,请尝试使用简单的引号' '而不是双引号,也与此相关,请使用:" "

"/etc/bowbridge/#{bb_cfg}"

而不是

"/etc/bowbridge/" + bb_cfg
于 2017-02-24T14:53:30.277 回答