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