我想在调用安装块之前查询他的YUM repo以确保pkg可用
我在我的食谱开头使用以下代码
ruby_block 'shellout' do
block do
cmd = Mixlib::ShellOut.new('yum search httpd | grep -w httpd.x86_64 |tr -d "\n\r"'
cmd.run_command
Chef::Log.warn("printing #{cmd.stdout}")
if cmd.stdout =~ /httpd/i
Chef::Log.warn("pkg found in yum #{cmd.stdout}")
elsif cmd.stdout =~ /error/i
Chef::Log.warn("yum returned an error #{cmd.stdout}")
else
Chef::Log.warn("pkg not in repo ? yum search returns #{cmd.stdout}")
end
end
end
然而,尽管pkg在repo中,但代码不起作用。
1)我做错了什么?
2)有更简单的方法吗?
3)如果答案是“因为你的代码没有在运行时运行,我怎么强迫它在Cf的运行时运行?”
感谢
答案 0 :(得分:1)
这不是厨师的工作方式。你没有对系统状态作出反应,你宣布它应该是什么,然后Chef强制执行。如果应该安装软件包,那么在深度方向上它会执行测试和修复循环但是高级别,然后使用package
资源。如果您需要先设置特定的仓库,我们会拥有yum_repository
资源。如果这应该是每个主机(或每个角色,这是更好的)可配置可能使用节点属性使整个部分有条件。