在调用install块之前,我想查询一下YUM repo,以确保pkg可用。
我在recipee的开头使用了以下代码
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的运行时运行?”
谢谢
发布于 2017-10-30 02:55:44
这并不是厨师的工作方式。你不会对系统状态做出反应,你声明了它应该是什么,然后Chef强制执行它。在深度上,它执行测试和修复循环,但在高层次上,如果应该安装软件包,则使用package资源。如果您需要先设置一个特定的存储库,我们有yum_repository资源。如果这应该针对每个主机(或每个角色,哪个更好)进行配置,则可以使用一个节点属性来使整个部分具有条件。
https://stackoverflow.com/questions/47003198
复制相似问题