hiera()函数和YAML子项

时间:2017-07-06 18:55:55

标签: puppet hiera

如何重写此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文件

$behind_reverse_proxy = hiera('service::proxy.behind_reverse_proxy', 'False')
$serverlist = hiera('service::proxy.serverlist')

但是puppet agent -t导致了

  

SERVER上的错误400:无法在任何Hiera数据文件中找到数据项service :: proxy.serverlist,并且未提供默认值

我认为这些是相关的

[user@server ~]$ facter -y | grep 'version'
facterversion: 2.4.4
puppetversion: 3.8.2

2 个答案:

答案 0 :(得分:1)

我从未使用过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文档中的示例似乎支持这一点。

答案 1 :(得分:1)

跟进我对如何访问重组数据的评论:

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 module。您已经在其他地方使用该模块的可能性很大,但即使不是,也可以将它引入您的堆栈。