2012-11-14 45 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

問題是如何添加節點屬性,而不是如何添加節點屬性將配方添加到節點的運行列表中。 –

相關問題