根据人偶中的变量检索事实信息

时间:2018-09-28 16:24:22

标签: linux puppet

我有这些事实:

"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中的变量信息查找事实的价值?

或者,如果您对如何实现主要目标有最佳的想法,将不胜感激。

1 个答案:

答案 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 : }