如何重写这个 YAML 使其更有条理,然后使用 hiera 函数在 Puppet 中引用它?
目前,我正在使用一种看起来非常扁平且难以阅读的 hieradata 语法。
service::proxy::behind_reverse_proxy: true
service::proxy::proxy_timeout: 300
service::proxy::serverlist:
- host1.fqdn
- host2.fqdn
例如,并在params.pp
文件中抓取这些
$behind_reverse_proxy = hiera('service::proxy::behind_reverse_proxy', 'False')
$serverlist = hiera('service::proxy::serverlist')
我想我可以像这样重写 YAML 以使其更具可读性......
service::proxy:
behind_reverse_proxy: true
proxy_timeout: 300
serverlist:
- host1.fqdn
- host2.fqdn
并根据更新了params.pp
文件
- Hiera Key.subkey 语法
- 与结构化数据交互
$behind_reverse_proxy = hiera('service::proxy.behind_reverse_proxy', 'False')
$serverlist = hiera('service::proxy.serverlist')
然而,在puppet agent -t
导致
服务器上的错误 400:在任何 Hiera 数据文件中找不到数据项服务::p roxy.serverlist,并且未提供默认值
我认为这些是相关的
[user@server ~]$ facter -y | grep 'version'
facterversion: 2.4.4
puppetversion: 3.8.2
跟进我关于如何访问重组数据的评论:
service::proxy: behind_reverse_proxy: true proxy_timeout: 300 serverlist: - host1.fqdn - host2.fqdn
在您的清单中,而不是这个...
$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模块。 您很有可能已经在其他地方使用该模块,但即使没有,将其引入堆栈也可能非常值得。
我从未使用过 Hiera,但我认为问题是当你想要映射(哈希(时,你有一个序列(数组(。
在下面的 YAML 中,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 文档中的示例似乎支持这一点。