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