我试图实现使用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