在大厨中,有没有办法只在文件A ==文件B时做某事?

时间:2018-02-06 14:16:59

标签: chef

我试图整理一个简单的方法来将应用程序推送到节点。目前,我在配方采用zip文件,将其放入节点然后解压缩文件的位置。

我现在想做的是:

Vault.StateStatus.UNCONSUMED

我在删除解压缩目录的部分遇到问题。我知道厨师支持not_if和only_if条件,但我不知道如何提问(文件A与文件B相同吗?)

这可能吗?

1 个答案:

答案 0 :(得分:1)

如果您正在使用remote_file,那么一切都会变得更简单一些。默认情况下,文件仅在更改时下载,因此基于此,您可以创建通知链,如下所示:

remote_file File.join(Chef::Config["file_cache_path"], "file.zip") do
  source   "http://url/to/archive.zip"
  notifies :run, "execute[remove old directory]", :immediately
end

execute "remove old directory" do
  command "rm /path/to/your/directory"
  action  :nothing
  notifies :run, "execute[unzip new directory],": immediately
end

execute "unzip new directory" # here you can use any combination of other resources, like unzip/7z/ark
  command "unzip #{File.join(Chef::Config["file_cache_path"], "file.zip")} /path/to/your/directory"
  action  :nothing
end

此解决方案有一些注意事项,例如,如果删除过程失败,则必须从缓存中删除存档以再次运行它。

作为替代方案,您可以尝试ark食谱,它可以下载和解压缩档案。我不确定你是否想要添加另一本食谱来维持一次执行相当简单的任务。