我已经在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
答案 0 :(得分:1)
在命令行上运行hiera
时,需要手动指定要识别的任何事实。有几种选择,但对于一次性,最简单的方法是直接在命令中指定它们:
hiera allowUsers -c ../hiera.yaml --debug fqdn=centos-puppet
当以这种方式传递事实时,事实名称必须完全匹配任何插值令牌才能被识别。因此,上述表单应触发使"%{fqdn}"
层次结构级别被识别。如果您改为指定::fqdn=centos-puppet
,则会识别"%{::fqdn}"
级别。但请注意,当Puppet调用Hiera时,这两者并不是那么明显 - 在这种情况下,%{fqdn}
会针对当前范围解析fqdn
,很可能(但不一定)相同的结果为"%{::fqdn}"
。
Hiera documentation中更详细地介绍了所有这些内容,这些内容似乎最近发布了一个重要且早该进行的更新。