[英]Chef recipes - use node name in attributes
在廚師食譜中,我有以下代碼:
if (node['server1']['PT1'] == true)
setup('PT1')
elsif (node['server1']['PT2'] == true)
setup('PT2')
end
我正在檢查屬性以查看PT1或PT2的值是否等於true。 如果我將server1
硬編碼到代碼中,則此方法可以正常工作,但我想知道具體取決於運行此代碼的服務器。 如何將node['server1']
node.name
為node.name
類的node.name
以便在屬性文件中查找其他服務器。 我的屬性的一個示例是:
default['server1'][...]...
default['server2'][...]...
default['server3'][...]...
default['server4'][...]...
如果我可以動態查看不同的服務器,那將是理想的結果。
取決於您的命名約定。 看起來ohai不會自動收集節點名稱信息,但確實會收集很多信息。
如果您對節點名有一個標准,例如使用其主機名或fqdn作為節點名,則只需查詢一下即可。
node['hostname']... node['fqdn']...
如果使用更深奧的方法來命名與主機信息無關的節點,您仍然可以查詢位於節點上的client.rb,這就是節點知道如何識別Chef服務器的方式。 在Windows上,它位於C:/chef/client.rb
,在UNIX上,它位於/etc/chef/client.rb
。 我將文件的解析交給您。
要查看什么ohai的完整范圍( node
之下的所有內容)登錄到自舉計算機上,然后在您的shell中鍵入ohai
。 它相當多,所以您可能需要輸出到文本文件並使用編輯器滾動/搜索它。
編輯1:在測試廚房中,位置會更改。 它變為<your kitchen cache location>\\client.rb>
EX,如果您在Windows上使用vagrant及其默認值,則它將變為c:\\users\\vagrant\\appdata\\local\\temp\\kitchen\\client.rb
EDIT2:回到原始示例,如果node ['server']的內容可以是PT1或PT2,則可以執行以下操作
setup(node['server'])
您可以通過各種機制來控制服務器的內容。 如果您通過主機名控制它,則可以執行attributes/default.rb ... node['server']= node['hostname']
或更簡單,如果您的標准允許它的recipes/default.rb ... setup(node['hostname'])
盡管通常您可以在運行列表中定義的單獨配方中控制要設置的內容。
您甚至可以使它完全動態:
node['whatever'][node.name].each do |key, value|
setup(key) if value == true
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.