2012-11-14 48 views
3

我使用chef-client cookbook将机器配置为厨师客户端。如何在创建此客户端时配置节点属性?如何在Chef客户端上设置节点属性?

我不想做knife node edit。我的目标是在创建此节点时设置一些节点属性,可能是将某些内容添加到JSON文件中。

UPDATE:

我创建数百个将使用这个脚本(see the gist)来引导厨师的客户端节点。脚本中的Node_name对于每个节点都是不同的。同样,我想设置一个自定义属性到将它们组合在一起的节点。

举例来说,我想将属于一个特定项目的所有节点组合在一起。我在想我会给节点添加一个属性“project_id”。这样我可以稍后搜索属于某个项目的所有节点。这对于部署尤其有用 - 同时试图找出属于特定项目的所有db_master角色/ web服务器角色/ memcached角色。

所以我想要做的是:应该在脚本(你要点看到的),我可以添加自定义属性,如PROJECT_ID或任何到节点的一些占位符。那可能吗 ?

回答

1

要么给所述客户端的作用,并有添加属性或通过使用厨师客户端的-j参数包含节点数据的上传.json文件。

+0

下面是我正在做的创建厨师客户端的[一个要点](https://gist.github.com/4076949)。我在那里改变设置属性,比如说“foo_attribute”:“bar_value”到节点? – Emil

+0

我已经更新了我想要实现的细节的问题。请参阅问题的“更新”部分。谢谢。 – Emil

4

上述两种工作,或者你可以使用像

Node[attribute_name] 

什么能让你的JSON功能,您可以利用属性或标签

添加属性在配方创建他们使用像这样的你正在生成的json文件。可以在你的脚本由参数或CSV/XML输入

{ 

    "test_attribute" : "testvalue" 
} 

生成的属性名称和值在您连他们厨师的客户端哈希

"chef_client": { 
"server_url": "http://ec2-23-20-173-176.compute-1.amazonaws.com:4000", 
"interval": "20" 
} 

下设置属性的例子这些属性创建为正常的节点属性,例如可通过node["chef_client"]["interval"]访问。

这有道理吗?

+0

我已经更新了我想要实现的细节的问题。请参阅问题的“更新”部分。谢谢。 – Emil

+0

更新了答案Emil。认为它更像你正在寻找的 – PatrickWalker

+0

我也尝试过,没有为我工作。我想这是因为json文件是用于厨师独奏的,所以使用它的任何节点属性集都不会在厨师独奏后继续存在(请纠正我,如果我错了)。 chef-solo将创建'/ etc/chef/client.rb'并启动chef-client作为守护进程,使用这个新文件作为配置。你可以看到[chef-client cookbook](https://github.com/opscode-cookbooks/chef-client)。看起来配方不允许设置自定义属性。 – Emil

-4

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

knife node run_list add target1 "recipe[mouse]" 

它应该与所有属性一起使用。

+1

问题是如何添加节点属性,而不是如何添加节点属性将配方添加到节点的运行列表中。 –

相关问题