我正在尝试根据特定标志加载 hiera 文件。
Hiera 层次结构配置是
:hierarchy:
- "%{environment}/%{::fqdn}"
- "%{environment}/%{nodetype}"
- "%{environment}/%{calling_module}"
- "%{environment}"
- "common/%{calling_module}"
- "common"
事实上,我们希望在“节点类型”级别分解一些配置。目标是避免将相同的层次“块”放在文件中:
- 环境/测试/myhost1.example.com.yaml
- 环境/测试/myhost2.example.com.yaml
- 环境/测试/myhost3.example.com.yaml
但相反,但共同的部分是:
- environment/test/nfs-server.yaml 所有 nfs 服务器相关的通用配置
- environment/test/backend-server.yaml 与所有后端服务器相关的通用
之后,所有服务器都将通过 fqdn yaml 文件获取自己的特定值。(这部分没问题)
目前,我不知道如何向 hiera 上下文提供“nodetype”数据。
我试图将它放入主清单文件中(是的,我阅读了文档并且我知道这是一个坏主意但即使绝望尝试,它仍然不起作用)
node 'nfs1.example.com', 'nfs2.example.com' {
$nodetype= 'nfs-server'
但文件环境/测试/nfs-server.yaml没有被 hiera 加载。
我也尝试使用自定义事实,但使用自定义事实
modules/hosts/facts.d/host-fact-test.txt
文件被发送到代理的主机,但在这里,hiera 不使用专用文件。
Notice: /File[/var/lib/puppet/facts.d/host-fact-test.txt]/ensure: defined content as '{md5}d7492faae1bfe55f65f9958a7a5f6df9'
如果我使用通知puppet 命令,值正常
if $nodetype== 'nfs-server' {
notify {"Running with \$nodetype ${nodetype} ID defined":
withpath => true,
}
}
结果:
Notice: /Stage[main]/attemps/Notify[Running with $nodetype nfs-server ID defined]/message: Running with $nodetype nfs-server ID defined
Stack 是 Ubuntu 14 上的 Puppet 开源版本,因此版本如下:
- 木偶 3.8.4
- hiera 1.3.4
- 因素 2.4.4
有什么想法或建议可以使其发挥作用(或实现类似的行为)吗?
答案1
Puppet 主进程通常不使用 中的配置/etc/hiera.yaml
,这可能会造成混淆。使用 Puppet 时3.x
,通常是/etc/puppet/hiera.yaml
。
您可以确保使用(以 root 身份)
puppet master --configprint hiera_config
在主机上。