簡體   English   中英

廚師食譜-在屬性中使用節點名稱

[英]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.namenode.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM