4

我对如何在厨师中使用环境运行列表有点困惑。如您所见,下面的 role.json。在 env_run_lists 中,您有 _default,然后我们已经有了默认的 run_list 之一。有什么区别?并且在运行环境run_list之前每次都会运行默认的吗?

{
  "name": "webserver",
  "default_attributes": {
  },
  "json_class": "Chef::Role",
  "env_run_lists": {
    "_default": [

    ],
    "production": [

    ],
    "dev": [
      "role[base]",
      "recipe[apache]",
      "recipe[apache::copy_dev_configs]"
    ]
  },
  "run_list": [
    "role[base]",
    "recipe[apache]"
  ],
  "description": "The webserver role",
  "chef_type": "role",
  "override_attributes": {
  }
}
4

2 回答 2

3

我同意这很令人困惑,特别是因为文档对于我通过查看源代码可以看到的行为似乎是不正确的。

源代码中我们可以看到,当Role对象被构造时,它会run_list根据 _default 环境对属性的内容进行键控,然后将散列与env_run_lists属性的内容合并(覆盖 _default 键的值)。

这在实践中意味着如果您指定一个run_list属性,那么您不需要在属性中包含 _default 环境env_run_list。如果您选择在env_run_list属性中包含 _default 环境,那么它将覆盖run_list属性中定义的任何内容。

要指出的另一件明显的事情是,如果您的节点不属于角色中定义的任何环境(_default 或其他),它将回退到使用 _default environment 的 run_list

于 2013-06-21T13:59:57.947 回答
2

这在实践中意味着,如果您指定 run_list 属性,则无需在 env_run_list 属性中包含 _default 环境。

我没有 50 名声望,所以我无法评论 Jared Russell 的回答,但如果我的角色定义中有这个:

common_run_list = ["recipe[something]", "recipe[something_else]"]

run_list(common_run_list)

env_run_lists(
    "dev" => common_run_list + ["recipe[another_thing]"]
)

然后我收到以下错误:

[2014-02-04T16:38:57-08:00] 错误:env_run_lists 中需要 _default 键。

因此,即使指定了我的 run_list,我也必须在 env_run_lists 中指定 _default 键。

于 2014-02-05T00:47:52.887 回答