Chef - 在安装pkg之前查询YUM回购

时间:2017-10-29 17:33:47

标签: ruby regex chef chef-recipe

我想在调用安装块之前查询他的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的运行时运行?”

感谢

1 个答案:

答案 0 :(得分:1)

这不是厨师的工作方式。你没有对系统状态作出反应,你宣布它应该是什么,然后Chef强制执行。如果应该安装软件包,那么在深度方向上它会执行测试和修复循环但是高级别,然后使用package资源。如果您需要先设置特定的仓库,我们会拥有yum_repository资源。如果这应该是每个主机(或每个角色,这是更好的)可配置可能使用节点属性使整个部分有条件。