1

我们有一个 Chef 环境设置。我们的部署工作正常,节点属性被角色和环境正确覆盖。

为了测试即将发生的更改,我们希望更改部署中 1 个特定节点的设置。我们不想为该测试编写不同的配方、角色或环境,因为实际上只有 1 个设置不同。

我尝试通过 Chef Manage 的 Web UI 并将特定节点的属性设置如下:

{
    "tags": null,
    "our_app":{
        "url": "http://test-server"
    }
}

在我们的食谱中,attributes/default.rb设置如下:

default[:our_app][:url] = ''

在我们的环境文件中,我们覆盖设置如下:

override_attributes({
    "our_app" => {
        "url" => "http://default-server",
    }
})

.erb我们在配方中使用以下模板:

{
    "serverUrl": "<%= node[:our_app][:url]%>"
}

但是,当我们在该节点上运行 chef-client 时,它仍然会http://default-server在输出中结束。

我理解文档中解释的属性优先级。但我不确定如何实现我想要的。

override_attributes()应该在我的环境文件中使用吗?

有没有办法拥有特定于节点的覆盖属性

4

1 回答 1

2

不,没有办法拥有特定于节点的覆盖。节点特定的数据始终是(也是唯一的)normal级别。一般来说,您根本不应该使用覆盖级别,当然也不应该使用自称为默认值的东西。

此外,我们真的建议不要再使用角色/环境。您应该一有机会就切换到 Policyfile 系统。

于 2018-07-30T22:53:30.240 回答