我对如何在厨师中使用环境运行列表感到困惑。 正如您可以看到以下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": {
}
}
答案 0 :(得分:3)
我同意这很令人困惑,特别是因为documentation似乎与我通过查看来源可以看到的行为不一致。
从阅读source我们可以看到,当构造Role
对象时,它会根据_default环境键入run_list
属性的内容,然后将哈希与内容合并env_run_lists
属性的值(覆盖_default键的值)。
这在实践中意味着,如果您指定run_list
属性,则不需要在env_run_list
属性中包含_default环境。如果您选择在env_run_list
属性中包含_default环境,那么它将覆盖run_list
属性中定义的任何内容。
要指出的另一个显而易见的事情是,如果您的节点不属于角色中定义的任何环境(_default或其他)it will fall back to using the run_list for the _default environment。
答案 1 :(得分: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键。
所以我必须在env_run_lists中指定_default键,即使我指定了run_list。