3

有没有更好的方法来格式化我的 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 的 map 函数的功能。如果是这样,那么我可以做类似的事情:

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

谢谢

4

2 回答 2

2

这取决于您使用的是哪个 puppet 版本。我puppet 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 中的zip散列函数和内置函数map的组合。就像是:

$array3 = zip($array1, $array2)
$my_hash = hash($array3)
$my_hash.map |$key,$val|{ "${key}:${val}" }
于 2015-05-06T20:21:37.307 回答
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 与端口结合起来。

于 2015-05-07T21:25:38.330 回答