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
我有两个厨师食谱,我想按定义的顺序 运行。首先是安装配方,然后是配置。
这是调用食谱的代码:
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