7

我在厨师食谱中有一个资源,我想成为可选的。也就是说,当配方运行时,如果资源失败,我希望其他一切继续进行。当然,我仍然想知道该资源是否存在故障,只是它不是关键资源,没有任何东西依赖于它,所以我宁愿继续运行其余部分。

我习惯于使用 Puppet,您必须显式声明您的依赖项,并且仅当它们的依赖项失败而不是一次失败导致整个文件的其余部分无法运行时才会跳过资源。

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

我正在使用 chef 来设置开发环境,其中一部分只是克隆一些 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 仍然克隆。这怎么可能?

4

2 回答 2

6

你可以设置ignore_failure true

于 2012-11-02T21:38:55.220 回答
0

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

于 2012-11-02T21:36:00.993 回答