2017-09-28 188 views
0

在廚師的食譜我有下面的代碼使用節點名稱:廚師食譜 - 在屬性

if (node['server1']['PT1'] == true) 
    setup('PT1') 
elsif (node['server1']['PT2'] == true) 
    setup('PT2') 
end 

我檢查我的屬性,看看是否值等於爲任何PT1或PT2真。這工作正常,如果我硬編碼到代碼,但我想知道動態取決於運行它的服務器。如何將node['server1']替換爲node.name之類的內容以在屬性文件中查找不同的服務器。我的屬性的一個例子是:

default['server1'][...]... 
default['server2'][...]... 
default['server3'][...]... 
default['server4'][...]... 

如果我可以動態地看不同的服務器上,這會是理想的結果。

+0

什麼的'node'爲例值,其中類對象的? –

+0

對不起,我的屬性以'default'而不是'node'開頭。我計劃讓不同的服務器名稱成爲您看到'server1,server2等'屬性的第一部分。該計劃是傳遞服務器名稱並將其與該屬性進行匹配。 – user081608

回答

1

你甚至可以使這個完全動態:

node['whatever'][node.name].each do |key, value| 
    setup(key) if value == true 
end 
1

取決於您的命名約定。它看起來不像奧海自動收集節點名稱信息,但它收集了大量的信息。

如果您的節點名稱周圍有標準,例如使用它們的主機名或fqdn作爲節點名稱,那麼您可以簡單地查詢該節點名稱。

node['hostname']... node['fqdn']...

如果使用的是更深奧的方法,您的節點是如何知道怎樣來命名都無關,與你仍然可以查詢該client.rb位於您的節點上的主機信息,這是你的節點確認自己的廚師服務器。在Windows上,它位於C:/chef/client.rb,在UNIX上它在/etc/chef/client.rb。我將把文件的解析留給你。

要查看ohai(在node下可用的所有東西)的完整範圍,請登錄到引導程序的計算機並在您的shell中輸入ohai。它相當多,所以你可能想輸出到一個文本文件,並使用編輯器來滾動/搜索它。

編輯1: 在測試廚房的位置變化。它成爲<your kitchen cache location>\client.rb> EX,如果你使用的流浪漢與Windows和它的默認值就變成c:\users\vagrant\appdata\local\temp\kitchen\client.rb

EDIT2: 要帶回來給你的原來的例子,如果你的節點[「服務器」]的內容可以是PT1或PT2那麼你可以做以下

setup(node['server'])

和你能控制的是通過任何各種各樣的機制是什麼服務器中的內容。如果您是通過主機控制它,那麼你可以做 attributes/default.rb ... node['server']= node['hostname'] 或者更簡單地說,如果你的標準是這樣的,允許其 recipes/default.rb ... setup(node['hostname']) 雖然通常你控制什麼是在你運行列表中定義不同的食譜被加以設定。

+0

如果需要,我可以將其更改爲相同的主機名。因此,如果我的話,我的配方中的'node ['hostname'] [PT1]',如果主機名是'server1',它會找到屬性'default ['server1'] ['PT1]'?我認爲這將尋找在'默認[「主機」]'在開始實際屬性,而不是將其轉換。 – user081608

+0

EDITTING匹配您的編輯:節點[「主機」]返回當前的服務器廚師的主機名上運行。如果你的主機名是server1它會返回「服務器1」和Server2上的相同代碼將返回「服務器2」。 ohai只知道它的當前節點。 – JackChance