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

Chef infra 如何使用Chef覆盖节点上的属性?,chef-infra,chef-attributes,Chef Infra,Chef Attributes,我们有一个厨师环境设置。我们的部署工作正常,节点属性由角色和环境正确覆盖 为了测试即将进行的更改,我们希望在部署中更改一个特定节点上的设置。我们不想为该测试编写不同的配方、角色或环境,因为实际上只有1种设置不同 我尝试通过Chef Manage的web UI设置特定节点的属性,如下所示: { "tags": null, "our_app":{ "url": "http://test-server" } } default[:our_app][:url]

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

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

我尝试通过Chef Manage的web UI设置特定节点的属性,如下所示:

{
    "tags": null,
    "our_app":{
        "url": "http://test-server"
    }
}
default[:our_app][:url] = ''
override_attributes({
    "our_app" => {
        "url" => "http://default-server",
    }
})
在我们的食谱中,
attributes/default.rb
设置如下:

{
    "tags": null,
    "our_app":{
        "url": "http://test-server"
    }
}
default[:our_app][:url] = ''
override_attributes({
    "our_app" => {
        "url" => "http://default-server",
    }
})
在我们的环境文件中,我们覆盖设置,如下所示:

{
    "tags": null,
    "our_app":{
        "url": "http://test-server"
    }
}
default[:our_app][:url] = ''
override_attributes({
    "our_app" => {
        "url" => "http://default-server",
    }
})
我们在配方中使用以下
.erb
模板:

{
    "serverUrl": "<%= node[:our_app][:url]%>"
}
{
“服务器URL”:”
}
然而,当我们在该节点上运行chef client时,它仍然以
http://default-server
在输出中

我理解这一点。但我不知道如何实现我想要的

我不应该在我的环境文件中使用
override\u attributes()


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

没有,没有办法拥有特定于节点的覆盖。特定于节点的数据总是(并且是唯一处于)
normal
级别。通常,您不应该使用覆盖级别,当然也不应该将其本身称为默认值


此外,我们确实建议不再使用角色/环境。一旦有机会,您应该立即切换到保单文件系统。

谢谢。不幸的是,我无法控制它当前的设置,我们当前的标准是roles/env。所以我正在努力解决这个问题。我尝试将环境文件改为
default\u attributes()
,并设置节点的
override
属性。但这似乎也不起作用。覆盖显示在
刀编辑-a
命令和
刀显示-l
中,但它似乎没有被使用。您不能设置节点的覆盖属性,它没有这样的东西。您可以在节点对象中看到回显数据,该数据在成功聚合结束时保存回节点,用于搜索()和报告内容,但它不是输入。只有角色、环境和烹饪书可以设置为覆盖级别。因此,如果不在环境/角色/食谱中设置节点属性,我无法强制1个特定节点的节点属性?确实有,但前提是您已经小心地将大多数属性设置为
默认
级别,这是您应该做的<代码>覆盖
仅用于紧急情况,如
!CSS中的重要
。只需按常规将其置于节点对象中的
正常
级别。即“高于”
默认值,它将优先考虑。