puppet hiera 没有解析层次结构中的变量

puppet hiera is not resolving variables from hierarchy

我在 hiera.yaml 中定义了这样的东西:

:backends:
  - yaml
:hierarchy:
  - "%{::fqdn}"
  - "%{fqdn}"
  - global
:yaml:
  :datadir: "/etc/puppet/hieradata"

(我不知道哪个是正确的,所以这就是为什么我有两个...)

但是当我运行hiera -c ../hiera.yaml allowUsers --debug

这是输出

DEBUG: 2016-04-07 22:07:02 +0200: Hiera YAML backend starting
DEBUG: 2016-04-07 22:07:02 +0200: Looking up allowUsers in YAML backend
DEBUG: 2016-04-07 22:07:02 +0200: Looking for data source global
DEBUG: 2016-04-07 22:07:02 +0200: Found allowUsers in global
["vagrant", "root"]

所有内容都在同一个目录中

[root@localhost hieradata]# ll
total 16
-rw-r--r--. 1 root root 28 Apr  7 20:14 centos-puppet.yaml
-rw-r--r--. 1 root root 45 Apr  7 20:39 facts.yaml
-rw-r--r--. 1 root root 83 Apr  7 20:42 global.yaml
-rw-r--r--. 1 root root 28 Apr  7 20:15 production.yaml

还有

[root@localhost hieradata]# facter fqdn
centos-puppet

所以即使在层次结构中 fqdn 名称更高,看起来 hiera 甚至没有尝试解析 fqdn 变量。我不知道为什么。

[root@localhost hieradata]# puppet -V
3.8.6

[root@localhost hieradata]# hiera -v
1.3.4

当您在命令行上 运行 hiera 时,您需要手动指定您希望它识别的任何事实。有几个选项,但对于一次性的,最简单的是直接在命令中指定它们:

hiera allowUsers -c ../hiera.yaml --debug fqdn=centos-puppet

当以这种方式传递事实时,事实名称必须与任何插值标记完全匹配才能被识别。因此,上面的形式应该触发 "%{fqdn}" 层级被识别。如果您改为指定 ::fqdn=centos-puppet 那么它会使 "%{::fqdn}" 级别被识别。但是请注意,当 Hiera 被 Puppet 调用时,这两者并没有那么明显——在这种情况下,%{fqdn} 解析 fqdn 针对当前范围,很可能(但不一定)相同的结果作为 "%{::fqdn}".

所有这些都在 Hiera documentation 中进行了更详细的介绍,它似乎最近得到了一个重要的、迟来的更新。