如何检查 Chef 食谱 NOT_IF 中是否存在目录?
How to check if a directory exists in a Chef recipe NOT_IF?
在 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目录里面已经有软件就不要下载了。因此,我添加了 not_if 条件和 Dir.exists。但是无论如何都会执行资源(并且会下载一个新的无用的软件副本)。
知道这有什么问题吗?
我建议查看 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 目录中。这些默认值可以被覆盖。
在 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目录里面已经有软件就不要下载了。因此,我添加了 not_if 条件和 Dir.exists。但是无论如何都会执行资源(并且会下载一个新的无用的软件副本)。
知道这有什么问题吗?
我建议查看 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 目录中。这些默认值可以被覆盖。