使用hiera数据源的puppet主机资源

我试图实现使用hiera作为数据源的puppet /etc/hosts处理,但是我当前的实现需要重复数据,因为我只能将string数组作为$name传递给主机资源。

有没有办法避免这种数据重复? 或者也许有可能使用模板,但保持对/etc/hosts文件进行本地修改的能力?

 class hosts ($hosts = hiera("hosts"), $hostsdefs = hiera("hostsdefs")) { define hostentry( ) { host{ $name: ip => $hostsdefs[$name][ipaddress], host_aliases => $hostsdefs[$name][host_aliases] } } hostentry{ $hosts: } } 

用于hiera的YAML数据:

 ---- hosts: - host1.example.com - host2.example.com hostsdefs: host1.example.com: ipaddress: 10.0.0.1 host_aliases: host1 host2.example.com: ipaddress: 10.0.0.2 host_aliases: host2 

我能够使用create_resource函数find以下解决scheme

 class hosts ($hosts = hiera_hash("hosts")) { create_resources( 'host', $hosts ) } 

它需要稍微修改我的原始数据(更改哈希键到ip来匹配资源参数):

 ---- hosts: host1.example.com: ip: 10.0.0.1 host_aliases: host1 host2.example.com: ip: 10.0.0.2 host_aliases: host2