如何使用Chef覆盖节点上的属性?

时间:2018-07-30 21:56:19

标签: chef chef-attributes

我们有一个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()吗?

是否可以使用特定于节点的替代属性

1 个答案:

答案 0 :(得分:1)

否,无法进行特定于节点的替代。特定于节点的数据始终(并且唯一处于normal级别)。通常,您应该根本不使用覆盖级别,当然也不要使用任何将其称为默认值的东西。

我们还建议您不要再使用角色/环境。您应该尽快切换到Policyfile系统。