如何将属性值中的模式与配方匹配" only_if"或"除非"使用红宝石正则表达式?

时间:2017-09-15 12:03:56

标签: ruby chef

如何使用ruby regex模式将属性值中的模式与配方only_ifunless进行匹配?

我正在尝试匹配rpm -qa | grep #{rpmpackage}

的结果

1 个答案:

答案 0 :(得分:0)

我想您要检查是否安装了rpm,如果没有,则要安装它:

一些例子:

rpm_installed = "rpm -qa | grep -q '^runit'"
cookbook_file "#{Chef::Config[:file_cache_path]}/runit-2.1.1.tar.gz" do
  source 'runit-2.1.1.tar.gz'
  not_if rpm_installed
  notifies :run, 'bash[rhel_build_install]', :immediately
end

对于下一个问题,您可以使用:upgrade来安装软件包和/或确保软件包是最新版本,而不是每次都删除软件包,并且您也可以使用allow_downgrade true进行降级一个包,以满足所要求的版本要求。

带有mysql rpm文件的远程文件示例:

%w{
        mysql-community-common-5.7.16-1.el7.x86_64.rpm
        mysql-community-libs-5.7.16-1.el7.x86_64.rpm
}.each do |pkg|
        remote_file "/tmp/#{pkg}" do
        source "https://install.mysql.com/#{pkg}"
        end

       rpm_package pkg do
        source "/tmp/#{pkg}"
        action :upgrade
       end

end

如果不起作用,请尝试将allow_downgrade trueaction :install一起使用,每次都不需要删除rpm包,allow_downgrade true应该有效。

%w{
        mysql-community-common-5.7.16-1.el7.x86_64.rpm
        mysql-community-libs-5.7.16-1.el7.x86_64.rpm
}.each do |pkg|
        remote_file "/tmp/#{pkg}" do
        source "https://install.mysql.com/#{pkg}"
        end

       rpm_package pkg do
        source "/tmp/#{pkg}"
        action :install
        allow_downgrade true
       end

end
相关问题