Puppet 使用hiera创建变量名

Puppet 使用hiera创建变量名,puppet,hiera,Puppet,Hiera,我希望Puppet根据与环境关联的hiera文件创建不同的变量名。我想这样做是因为我想使用与特定网络接口关联的ip地址。理想情况下,网络接口将位于hiera文件中。通过这种方式,您可以将ip_地址变量名与hiera文件中定义的网络接口连接起来,这类似于 ::ipaddress{$network\u interface\u from\u hiera\u file} 这可能吗 现在我有一个如下的例子,但我认为有一个更好的实现。如果网络接口发生变化,我将不得不添加另一个案例 if $environme

我希望Puppet根据与环境关联的hiera文件创建不同的变量名。我想这样做是因为我想使用与特定网络接口关联的ip地址。理想情况下,网络接口将位于hiera文件中。通过这种方式,您可以将ip_地址变量名与hiera文件中定义的网络接口连接起来,这类似于

::ipaddress{$network\u interface\u from\u hiera\u file}

这可能吗

现在我有一个如下的例子,但我认为有一个更好的实现。如果网络接口发生变化,我将不得不添加另一个案例

if $environment == 'production' {
  $client_address = $::ipaddress_enp130s0f0
} else {
  $client_address = $::ipaddress_eth2
} 

听起来像是在Puppet中寻找
eval
,就像在shell和Perl其他语言中一样,据我所知,没有

我可能只会使用一个自定义事实,它总是返回我关心的IP地址。当然,然后您需要解决如何将自定义事实输出到您的车队的问题

另一种解决方案可能是使用Hiera的分层查找:

在hiera.yaml中:

:hierarchy:
  - %{::node_environment}
  - common
共同点。yaml:

---
myclass::client_address: "%{::ipaddress_eth2}"
在production.yaml中:

---
myclass::client_address: "%{::ipaddress_enp130s0f0}"
最后,请注意,您可以从Hiera中查找值,请参阅。这可能会有帮助