ruby 块不执行代码,只打印输出

ruby block not executing code, only printing output

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

这是调用食谱的代码:

  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 中的 link。我可能做错了什么?

从你实际的两个 ruby 块移动到这个:

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

你会得到同样的效果,厨师尊重 运行 列表顺序和包含顺序,所以你的两个 ruby_block.

不需要太复杂

您的实际代码将 运行 在收敛时间,由于通知延迟,配置配方 运行 在 运行 晚了。如果那是你的需要,写一个 custom_resource 而不是调整 运行 列表。

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

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

现在,如果您需要在 Chef-client 执行期间获取一些值,您可以使用惰性求值。 Chef 网站上有plenty of information

举个例子,检查这个:

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

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

"/etc/bowbridge/#{bb_cfg}"

而不是

"/etc/bowbridge/" + bb_cfg