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

时间:2016-04-07 20:11:08

标签: puppet hierarchy hiera

我已经在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甚至没有尝试resolv fqdn变量。我不明白为什么。

[root@localhost hieradata]# puppet -V
3.8.6

[root@localhost hieradata]# hiera -v
1.3.4

1 个答案:

答案 0 :(得分:1)

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

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

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

Hiera documentation中更详细地介绍了所有这些内容,这些内容似乎最近发布了一个重要且早该进行的更新。