如何检查Chef配方NOT_IF中是否存在目录?

时间:2015-10-09 14:56:52

标签: ruby chef chef-solo

在Chef的配方中,我有一个bash资源,基本上下载并安装了一个名为Revolution R的软件。我必须说我在Ruby中真的是一个菜鸟。

这是我的资源:

bash 'download_revolutionr' do
    code <<-EOH
    mkdir -p /tmp/RRO-#{rro_version}
    wget https://mran.revolutionanalytics.com/install/RRO-#{rro_version}-#{rro_os_platform}-#{rro_os_version}.x86_64.deb -P /tmp/RRO-#{rro_version}
    wget https://mran.revolutionanalytics.com/install/RevoMath-#{rro_version}.tar.gz -P /tmp/RRO-#{rro_version}
    tar -xzf /tmp/RRO-#{rro_version}/RevoMath-#{rro_version}.tar.gz -C /tmp/RRO-#{rro_version}
    EOH
  not_if { ::Dir.exists?("/tmp/RR0-" + rro_version) }
end

我的想法是,如果/ tmp / RRO-version目录中的磁盘上已有软件,请不要下载该软件。所以,我在Dir.exists中添加了not_if条件。但无论如何都要执行资源(并且下载了一个新的无用的软件副本)。

知道这有什么问题吗?

1 个答案:

答案 0 :(得分:2)

我建议您查看ark cookbook以处理远程存档包。

include_recipe "ark"

ark 'RevoMath' do
  url 'https://mran.revolutionanalytics.com/install/RevoMath-1.0.1.tar.gz'
end

将tar包内容安装到 /usr/local/RevoMath-1.0.1 目录中。可以覆盖这些默认值。