【问题标题】:Deleting file at end of Chef run在 Chef 运行结束时删除文件
【发布时间】:2016-05-09 02:54:07
【问题描述】:

我想在 Chef 运行结束时删除文件。
我正在使用以下file resource 来实现这一目标

file "#{home_dir['data']}/file1.txt" do
  action :delete
  retries 3
  retry_delay 50
  only_if { ::File.exist? "#{home_dir['data']}/file1.txt" }
end

如果有更好的方法,请告诉我。

【问题讨论】:

  • 这不是真的(肯定)在最后,而是在厨师运行期间。
  • @mealhour 你不要使用 if 和 only_if .. 它已经是幂等的。对于你的问题,这是在厨师运行期间完成的

标签: ruby chef-infra chef-recipe chef-solo


【解决方案1】:

这是正确的,但您不需要only_if,文件资源在内部已经是幂等的。你也可能不需要retries,除非你真的预计unlink()会失败(比如这是一个奇怪的网络文件系统),但它不会伤害任何东西。

编辑:如果您的食谱中有两次相同的资源类型+名称,如何避免资源克隆。

file "delete #{home_dir['data']}/file1.txt (or some other unique name)" do
  path "#{home_dir['data']}/file1.txt"
  action :delete
end

path 属性在未指定时默认使用名称,但可以单独更改它们以避免冲突。

【讨论】:

  • 它不工作。我有其他部分正在创建"/path/to/file.txt" 现在最后我想删除该文件。 file "#{home_dir['data']}/file1.txt" do action :delete retry_delay 50 end这行不通
  • 虽然我把file resource放在最后,但它似乎在其他命令之前运行
  • 如果您的配方代码中有两次相同的资源类型+名称对,您可能会遇到资源克隆问题。您应该会看到打印的警告。我已经在答案中添加了如何避免它们。
  • 谢谢!它似乎正在工作,但我看到了随机行为。有时,文件会被删除,有时则不会。请提出这种随机行为的原因是什么??
  • 没有随机性。查看您的日志并检查每个点的状态。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-26
  • 1970-01-01
  • 1970-01-01
  • 2016-04-10
  • 2018-02-25
相关资源
最近更新 更多