簡體   English   中英

up-腳本或文件中資源的值

[英]puppet - value of a resource from a script or from file

如何將腳本getAgentList.sh的輸出作為Puppet中的數組getAgentList.sh給變量list_of_agents exec包含的腳本可以產生下面列出的輸出,也可以寫入文件。

exec { 'get agent list':
  path    => '/usr/bin:/bin:/tmp:/usr/sbin',
  command => 'bash /opt/getAgentList.sh'
}

getAgentList.sh輸出:

devagent1: devagent1.example.com
devagent2: devagent2.example.com
testagent3: testagent3.example.com

我可以使用Hiera將其傳遞給資源。 但是,我想獲取這些在運行時生成的值,並在變量中使用它來附加代理。

$list_of_agents.each |String $index, String $value| {
  agent { "${index} Agent":
    home  => "/opt/agent",
    trans => "http://${value}:80",
  }
}

您將為此使用外部事實: https : //docs.puppet.com/facter/3.9/custom_facts.html#external-facts

不幸的是,可執行外部事實的輸出僅限於簡單數據類型,如String 您正在嘗試構造一個Hash ,但是您無法執行該操作,因為腳本的stdout必須采用以下格式:

key1=value1
key2=value2
key3=value3

如果要散列,則必須將文件用於外部事實。 一個yaml示例將是:

list_of_agents:
  devagent1: devagent1.example.com
  devagent2: devagent2.example.com
  testagent3: testagent3.example.com

json:

{
  "list_of_agents": {
    "devagent1": "devagent1.example.com"
    "devagent2": "devagent2.example.com"
    "testagent3": "testagent3.example.com"
  }
}

這些文件和可執行腳本將放置在模塊的facts.d目錄中。

旁注是您的:

$list_of_agents.each |String $index, String $value|

問題的開始意味着您期望使用數組。 如果需要,您可以將數據結構操作為數組,並且代碼仍然可以正常工作,但是當前它是已格式化的哈希。

另一個注意事項是,這對於節點分類器或CMDB確實是一項工作: https : //docs.puppet.com/puppet/5.3/nodes_external.html 這些將動態,輕松地存儲您要在此問題中使用的數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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