Chef infra 默认运行列表和'_默认值';chef中的环境运行列表?
对于如何在chef中使用环境运行列表,我有点困惑。 如您所见,下面是role.json。在env_run_列表中,您有默认值,然后我们已经有了默认的run_列表。有什么区别?在运行环境run_list之前,是否每次都会运行缺省值Chef infra 默认运行列表和'_默认值';chef中的环境运行列表?,chef-infra,Chef Infra,对于如何在chef中使用环境运行列表,我有点困惑。 如您所见,下面是role.json。在env_run_列表中,您有默认值,然后我们已经有了默认的run_列表。有什么区别?在运行环境run_list之前,是否每次都会运行缺省值 { "name": "webserver", "default_attributes": { }, "json_class": "Chef::Role", "env_run_lists": { "_default": [ ],
{
"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": {
}
}
我同意这是相当令人困惑的,尤其是因为通过查看来源,我所看到的行为似乎不正确 从阅读中,我们可以看到,当构建
角色
对象时,它会根据默认环境对运行列表
属性的内容进行键控,然后将哈希与环境运行列表
属性的内容合并(覆盖默认键的值)
这在实践中意味着,如果指定run\u列表
属性,则不需要在env\u run\u列表
属性中包含默认环境。如果选择在env\u run\u列表
属性中包含默认环境,则它将覆盖run\u列表
属性中定义的任何内容
需要指出的另一件显而易见的事情是,如果您的节点不是角色中定义的任何环境的一部分(_default或其他)
这在实践中意味着,如果指定了run_list属性,则不需要在env_run_list属性中包含默认环境
我没有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_列表中指定_default键,即使指定了我的run_列表