【问题标题】:what will be execution sequence of chef cookbook/recipes/attributes?厨师食谱/食谱/属性的执行顺序是什么?
【发布时间】:2015-02-16 08:38:35
【问题描述】:

假设我正在使用两本食谱食谱 A 和 B ,每本食谱中都有 a,b,c 食谱。 如果我将两本食谱都分配给一个节点,那么食谱和食谱的执行顺序是什么?哪个食谱 A 或 B 将首先运行,a、b、c 的顺序是什么。如果我将 var 定义为变量并在配方中使用它,则此问题也适用于 a、b、c、d 四个属性文件中的属性文件,然后将使用哪个属性文件变量。请给我一些建议我是新手厨师。

【问题讨论】:

标签: chef-infra


【解决方案1】:

这比最初看起来要复杂一些。我有一本使用 chefspec 测试来演示它的食谱,但遗憾的是它被损坏了。当我修复它时,我会尝试在此处添加它。这是给你的答案。

属性

  1. 在任何配方执行之前,所有属性文件都会执行。
  2. 仅当存在同名食谱的食谱时,才会执行属性文件。
    • include_attribute 中包含的属性文件将运行,无论是否存在相应的配方。
  3. 不会对任何属性文件进行多次评估。
  4. 默认情况下,在单个说明书中,所有属性文件都将按字典顺序进行评估。
    • include_attribute 中包含的属性文件将在首次包含它们时进行评估,无论名称如何
  5. 我相信每个食谱的属性文件都会在加载该食谱时进行评估(我相信这是按字典顺序) - 我还没有确认这一点。

食谱

配方将按照它们在您的运行列表中出现的顺序执行。 - 如果一个配方被另一个使用include_recipe 包含,理论上它可以执行两次

【讨论】:

    【解决方案2】:

    完成 Tejay 答案:

    @DisplayNameismissing 的链接解释得很粗略:runlist 被扩展,每个依赖项都被解析,cookbooks 以相反的顺序加载(最深的依赖首先)

    假设我有 2 本食谱

    A 取决于 B 和 C X 取决于 Y

    我的运行列表是 X 然后是 A

    菜谱(以及其他属性)的加载将是 Y -> X -> C -> B -> A

    对于 include_recipe,它不能运行两次,如果它被多次包含将被忽略,因为它已经在运行列表中。

    使用版本 11.16 和更高版本的 Chef 客户端,使用日志级别的 info 运行将显示在运行开始时完成的操作(针对订单)

    【讨论】:

      【解决方案3】:

      您的食谱将按照您在运行列表中指定的顺序执行。 如果您没有指定要执行的配方,它将查找默认配方​​并执行它。

      假设您有两个说明书 A 和 B。您已将两个说明书添加到角色 C。当您有一个与此角色关联的节点时,说明书将按照您在角色中指定的顺序执行。假设我们在角色中首先指定了 A。然后它会在 A 中寻找默认配方​​。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多