如何重写此YAML以使其更具结构化,然后使用Puppet引用它 hiera </跨度> 功能?
目前,我正在使用hieradata语法,看起来非常扁平,难以阅读……
$ behind_reverse_proxy = hiera </跨度> (‘service :: proxy :: behind_reverse_proxy’,‘False’)$ serverlist = hiera </跨度> ( ‘服务::代理::服务器列表’)
我想我可以像这样改写YAML,以使其更具可读性……
我从未使用过Hiera,但我认为问题在于,当你想要一个映射(哈希)时,你有一个序列(数组)。
在下面的YAML中,值为 service::proxy key是一个包含三个元素的序列,每个元素都是一个键的映射:
service::proxy
service::proxy: - behind_reverse_proxy: true - proxy_timeout: 300 - serverlist: - host1.fqdn - host2.fqdn
但是,您可能想要的是 service::proxy 是三个键的映射:
service::proxy: behind_reverse_proxy: true proxy_timeout: 300 serverlist: - host1.fqdn - host2.fqdn
您链接的Hiera文档中的示例似乎支持这一点。
跟进我对如何访问重组数据的评论:
在你的清单中,而不是......
$behind_reverse_proxy = hiera('service::proxy.behind_reverse_proxy', 'False') $serverlist = hiera('service::proxy.serverlist')
......你可以这样做:
$proxy_info = merge( { 'behind_reverse_proxy' => false, 'serverlist' => [] }, hiera('service::proxy', {}) ) $behind_reverse_proxy = $proxy_info{'behind_reverse_proxy'} $serverlist = $proxy_info{'serverlist'}
该 merge() 功能不是内置的,而是来自Puppet(以前的PuppetLabs)广泛使用 stdlib模块 。您很可能已经在其他地方使用该模块,但即使不是,将它引入您的堆栈也许是值得的。
merge()