角色的 run_list 被 env_run_lists 覆盖

role's run_list is been overrided by env_run_lists

我似乎无法理解为什么 运行 厨师在不同的环境中会得到不同的 运行 结果。 我有以下设置:

一个node.json个文件

{"run_list:" ["role[webfront]"]}

一个webfront.json角色:

{
    "name": "webfront",
    "chef_type": "role",
    "json_class": "Chef::Role",
    "description": "The base role for systems that serve HTTP traffic",

    "default_attributes": {},

    "override_attributes": {},

    "run_list": [
            "recipe[apt]",
            "recipe[java]",
            "role[apache-server]",
            "role[node-server]"
    ],

    "env_run_lists" : {
            "sandbox" : [
                    "role[redis-server]"
            ],
            "dev": [
                    "role[redis-server]"
            ]
    }

}

如果我运行:

sudo chef-solo -c solo.rb -j node.json -E sandbox

如果我 运行 完全没有环境,我会得到不同的结果:

sudo chef-solo -c solo.rb -j node.json

当我包含 "sandbox" 环境时,厨师 运行

中仅包含 env_run_lists 食谱

这是为什么?

谢谢!

因为这就是该功能的工作原理。如果您假设特定于环境的 运行 列表被附加而不是替换默认值,那将大大限制该功能,因为您将无法从默认值或更改顺序中删除内容。