我们有一个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
结尾。
我了解attribute precedence as explained in the docs。但是我不确定如何实现自己想要的。
我应该不在环境文件中使用override_attributes()
吗?
是否可以使用特定于节点的替代属性 ?
答案 0 :(得分:1)
否,无法进行特定于节点的替代。特定于节点的数据始终(并且唯一处于normal
级别)。通常,您应该根本不使用覆盖级别,当然也不要使用任何将其称为默认值的东西。
我们还建议您不要再使用角色/环境。您应该尽快切换到Policyfile系统。