Chef infra 如何在Chef客户端上设置节点属性?

Chef infra 如何在Chef客户端上设置节点属性?,chef-infra,Chef Infra,我正在使用将计算机配置为chef客户端。创建此客户端时,如何配置节点属性 我不想进行刀节点编辑。我的目标是在创建这个节点时设置一些节点属性,可能是通过向JSON文件添加一些内容 更新: 我正在创建数百个节点,它们将使用此脚本()引导chef客户端。脚本中的节点名称对于每个节点都是不同的。类似地,我想为将它们分组在一起的节点设置一个自定义属性 例如,我想将属于某个特定项目的所有节点分组在一起。我想我会在节点上添加一个属性“project_id”。这样我可以在以后搜索属于项目的所有节点。这对于部署尤

我正在使用将计算机配置为chef客户端。创建此客户端时,如何配置节点属性

我不想进行
刀节点编辑
。我的目标是在创建这个节点时设置一些节点属性,可能是通过向JSON文件添加一些内容

更新:

我正在创建数百个节点,它们将使用此脚本()引导chef客户端。脚本中的节点名称对于每个节点都是不同的。类似地,我想为将它们分组在一起的节点设置一个自定义属性

例如,我想将属于某个特定项目的所有节点分组在一起。我想我会在节点上添加一个属性“project_id”。这样我可以在以后搜索属于项目的所有节点。这对于部署尤其有用—同时尝试查找属于特定项目的所有db_主角色/webserver角色/memcached角色


所以我想做的是:脚本中应该有一些占位符(你在要点中看到了),我可以在其中向节点添加自定义属性,比如project_id或其他任何东西。这是可能的吗?

给客户端一个角色并在那里添加属性,或者使用chef-client的-j参数传递一个包含节点数据的.json文件。

以上两种方法都有效,或者您可以使用类似

Node[attribute_name]
为了保持json功能,您可以利用属性或标记

要添加属性,请在生成的json文件中使用类似的内容。属性名称和值可以通过参数或csv/xml输入在脚本中生成

{

    "test_attribute" : "testvalue"
}
在您链接到的示例中,它们在chef客户端哈希下设置属性

"chef_client": {
 "server_url": "http://ec2-23-20-173-176.compute-1.amazonaws.com:4000",
 "interval": "20"
}
这些属性被创建为普通节点属性,例如,
node[“chef_client”][“interval”]
可以访问这些属性


这有意义吗?

假设您想将配方鼠标添加到节点target1

knife node run_list add target1 "recipe[mouse]"

它应该可以处理所有属性。

下面是我创建chef客户端的步骤。为了设置属性,比如说“foo_属性”,我应该在节点上更改什么:“bar_值”?我已经用我想要实现的细节更新了这个问题。请参阅问题的“更新”部分。谢谢。我已经更新了这个问题,详细说明了我想要达到的目标。请参阅问题的“更新”部分。谢谢。更新了答案,埃米尔。我觉得这更像是你想要的我也试过了,对我没用。我认为,原因是——json文件用于chef solo,因此使用该文件设置的任何节点属性在chef solo运行后都不会保持不变(如果我错了,请纠正我)。chef solo将创建
/etc/chef/client.rb
,并使用此新文件作为配置文件启动chef client作为守护进程。你可以看到这张照片。看起来菜谱不允许设置自定义属性。我正在开源chef服务器上运行。使用-j文件确实为我保留了服务器上的节点信息。。我注意到的一件事是,它只有在chef客户机完全成功运行之后才被持久化。因此,要使其返回到所需的结果,您在设置属性方面尝试做些什么。你想在这个食谱还是其他食谱中使用它们?我知道这很古老,但是要澄清一下,答案是正确的。为了为chef solo添加属性覆盖,您需要添加-j参数,但不使用“default_attribute”、“override_attribute”等,如中的警告所述,但一点也不清楚。您只需将该属性作为“run\u list”属性的同级。此外,每次运行chef solo或需要自定义client.rb以通过json_属性指向文件时,都需要提供-j标志。问题是如何添加节点属性,而不是如何将配方添加到节点的运行列表中。