我怎样才能避免"写两次"在我的hiera数据?

时间:2015-05-06 18:16:40

标签: puppet hiera

有没有更好的格式化hiera数据的方法? 我想避免将所有内容写两次"问题。

以下是我现在所拥有的:

[root@puppet-el7-001 ~]# cat example.yaml 
---
controller_ips: 
 - 10.0.0.51
 - 10.0.0.52
 - 10.0.0.53
controller::horizon_cache_server_ip: 
 - 10.0.0.51:11211
 - 10.0.0.52:11211
 - 10.0.0.53:11211

我想知道在hiera中是否有像Perl的地图功能一样的功能。 如果是这样,我可以做类似的事情:

controller::horizon_cache_server_ip: "%{hiera_map( {"$_:11211"}, %{hiera('controller_ips')})}"

由于

2 个答案:

答案 0 :(得分:2)

这取决于您使用的是哪个木偶版本。我傀儡3.x,您可以执行以下操作:

common::test::var1: a
common::test::var2: b

common::test::variable:
 - "%{hiera('common::test::var1')}"
 - "%{hiera('common::test::var2')}"

common::test::variable2:
 - "%{hiera('common::test::var1')}:1"
 - "%{hiera('common::test::var2')}:2"

在puppet 4.0中,您可以尝试使用stdlib中ziphash函数的组合,内置函数map。 类似的东西:

$array3 = zip($array1, $array2)
$my_hash = hash($array3)
$my_hash.map |$key,$val|{ "${key}:${val}" }

答案 1 :(得分:1)

突变是一个问题。由于YAML的引用功能,使用相同的数据更简单。

controller_ips: &CONTROLLERS
 - 10.0.0.51
 - 10.0.0.52
 - 10.0.0.53
controller::horizon_cache_server_ip: *CONTROLLERS

您需要更多逻辑,以便可以独立存储端口。

controller::horizon_cache_server_port: 11211

清单需要以允许您将IP与端口组合的方式进行结构化。