我有这些事实:
"interfaces": "enp1s0f0,enp1s0f1,enp8s0,enp9s0,lo",
"ipaddress": "10.Z.Y.X",
"ipaddress_enp8s0": "10.Z.Y.X",
"ipaddress_lo": "127.0.0.1",
"main_ip": "10.Z.Y.X",
因此,基于main_ip的事实,我需要检索托管它的接口。
我尝试了以下方法来比较ip:
split($::interfaces, ',').each | String $value | {
notify { "ipaddress_${value}" : }
}
但是我无法使用我提供的变量来检索事实的值... 能否请我给我建议,如何使用puppet中的变量信息查找事实的价值?
或者,如果您对如何实现主要目标有最佳的想法,将不胜感激。
答案 0 :(得分:1)
在任何最近的Puppet中,您都可以通过the $facts
hash访问节点事实。这至少可以追溯到Puppet 4(最新的是Puppet 6)。我不记得它是否在Puppet 3中可用。在支持它的版本中,您应该几乎可以执行注释中描述的内容:
notify { $facts["ipaddress_${value}"] : }
(注意标点符号的差异。)
至少可以追溯到Puppet 3,也可以使用Puppet瑞士军刀:ERB模板来完成。在这里,自动提供给模板的scope
对象是关键。
$myfact = inline_template('<%= scope.lookupvar("ipaddress_#{@value}") %>')
notify { $myfact : }