【发布时间】:2016-02-10 14:21:52
【问题描述】:
这是试图更多地了解厨师资源集合的工作原理,更重要的是如何使用 ruby 代码操作它。
Chef 有两个阶段,编译和执行阶段。在编译阶段,所有调用资源的东西都会获得自己的资源集合,然后按顺序执行。用于控制集合中的位置的内置方法是 :delayed、:immediately、:notifies 和 :subscribes。
延迟的资源将被放置在其资源集合的末尾,立即按顺序放置,通知将被通知的资源放置在通知资源之后,订阅的资源将放置在其订阅的资源之后。
问题的核心是我们如何才能覆盖此行为以将资源放置在最初不属于所谓的资源的资源集合中。
换句话说,如果配方 foo 调用包含资源 oof 的资源栏,我们如何将资源 oof 放置到配方 foo 的资源集合中。
我不希望这个问题有一个简单的答案,而且面包屑对我来说是完全可以接受的。
【问题讨论】:
-
抱歉没有帮助的评论,但我会将其移至 serverfault。
-
我不同意,这完全是关于代码的。
-
在您的示例中,
bar资源在运行时声明oof,对吗?所以oof可能在资源集合中,但直到 bar 的操作实际运行。您是否尝试过在编译时运行bar资源的操作?否则,如果您尝试在配方foo中引用资源,您可能会不走运——因为当foo配方正在运行时,该资源还不存在。我建议您参考@StephenKing 的答案,因为它确实是您正在寻找的面包屑。
标签: ruby chef-infra