【问题标题】:How to not execute chef resource if directory is empty?如果目录为空,如何不执行厨师资源?
【发布时间】:2017-03-01 14:10:34
【问题描述】:

我有一个如下所示的资源:

execute 'run_command' do
  command "chown -R user:user * "
  not_if Dir["/home/user/dir1/*"].empty?
end

如果/home/user/dir1为空,我想确保资源不会被执行

【问题讨论】:

  • 你不会真正节省那么多时间; chown 相当快。为什么重要?
  • 目录为空时,命令不起作用并抛出错误
  • 错误是什么?
  • 关于“chmod 很快”,请阅读idempotency
  • 如果目录不存在,是否会出现错误?

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


【解决方案1】:

只需关闭标准错误。例如:

execute 'chown a directory' do
  command 'chown -R user:group /path/to/directory 2>&-'
end

【讨论】:

  • 从幂等性的角度来看,这是一种非常糟糕的风格(原因,@meallhour 正在寻找有效的守卫)。
  • @StephenKing 感谢自行车脱落。请查找“收敛”。我不会进一步争论,但欢迎您为 OP 留下您自己的答案。
  • 我无法在我有的时间内重现该问题。这就是为什么我没有留下答案。由于您似乎不了解厨师的这一方面,因此我试图让您尽可能友好地了解这一点。
【解决方案2】:

试试这个:

not_if { Dir.entries("/home/user/dir1/").select {|entry| ::File.join("home","user","dir1",entry) and !(entry =='.' || entry == '..') }.empty? }

【讨论】:

    猜你喜欢
    • 2015-06-13
    • 2014-05-28
    • 2019-04-20
    • 2015-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多