【问题标题】:How to check if a directory exists in a Chef recipe NOT_IF?如何检查 Chef 配方 NOT_IF 中是否存在目录?
【发布时间】:2015-10-10 05:00:26
【问题描述】:

在 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 条件。但无论如何都会执行该资源(并下载一个新的无用软件副本)。

知道这有什么问题吗?

【问题讨论】:

  • 不确定我是否正确地看到它,但“RRO”文件夹名称似乎在保护语句“::Dir.exists?(”/tmp/RR0- " + rro_version)"
  • 除了上面的@IsabelHM 注释外,只​​需像其余代码一样使用插值:::Dir.exists?("/tmp/RR0-#{rro_version}")
  • 抱歉错字。但错误实际上只是在这里,而不是在真正的代码中。但是,我很快就发现了错误:这是一个非常愚蠢的权限问题

标签: ruby chef-infra chef-solo


【解决方案1】:

我建议查看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 目录中。这些默认值可以被覆盖。

【讨论】:

  • tnx!这绝对是一个比我更惯用的解决方案。
猜你喜欢
  • 1970-01-01
  • 2012-09-12
  • 2013-08-24
  • 2011-02-15
  • 2023-02-22
  • 2011-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多