根据人偶中的变量检索事实信息
retrieve fact info based on variable in 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中的变量信息找到事实的价值吗?
或者,如果您对如何实现主要目标有任何最佳想法,我们将不胜感激。
在任何较新的 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 : }
我有这些事实:
"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中的变量信息找到事实的价值吗?
或者,如果您对如何实现主要目标有任何最佳想法,我们将不胜感激。
在任何较新的 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 : }