你如何使厨师资源成为可选的?

时间:2012-11-01 23:18:55

标签: chef configuration-management

我有一个厨师食谱的资源,我想成为可选的。也就是说,当配方运行时,如果资源失败,我希望其他所有内容继续运行。我当然还想知道当然这个资源出现了故障,只是它不是一个关键资源而且没有任何依赖它,所以我宁愿继续运行其余部分。

我习惯使用Puppet,你必须明确地声明你的依赖项,只有当依赖项失败而不是一次失败导致文件的其余部分不运行时才会跳过资源。

不知道为什么关闭这个问题并不是一个真正的问题(即使在阅读了常见问题解答后),但我会添加一些示例代码来说明我的问题,希望其他人可以投票重新开启或者可以回答。< / p>

我正在使用厨师来设置开发环境,其中一部分就是克隆一些git repos到位。没有什么取决于他们,偶尔会有一些私人回购,一些开发者无法访问。如果它无法克隆,我希望其他资源继续运行。

所以对于以下资源:

["foo", "bar", "baz"].each do |repo|
  git repo do
    repository  "git@github.com/example/#{repo}"
    reference   "master"
    action      :sync
    depth       1
    user        'dev'
    group       'dev'
    destination "#{node[:src_dir]}/#{repo}"
  end
end

如果运行它的用户没有克隆foo的权限,我希望foo失败,但bar和baz仍然可以克隆。怎么可能?

2 个答案:

答案 0 :(得分:6)

您可以设置ignore_failure true

答案 1 :(得分:0)

一种可能性是创建自己的提供程序类,其中包含子类Chef::Provider::Git并更改子类中不喜欢的行为。您可以在资源中使用provider属性方法来设置该资源的提供程序类 - 在本例中为您的提供程序类。您可能会将提供者类放在库文件中。