我正在尝试为我的Puppet设置构建Hiera配置。我的主机是FreeBSD和Debian系统。因此,我有一个基于::osfamily
的配置。但是由于我正在广泛使用Jails,我想用::virtual
进一步细分我的FreeBSD主机。
来自 hiera.yaml :
:hierarchy:
- "osfamily/%{::osfamily}"
- "%{::virtual}/%{::osfamily}"
- common
我的数据目录树:
hieradata/
|-- common.yaml
|-- osfamily
| |-- Debian.yaml
| `-- FreeBSD.yaml
|-- physical
| `-- FreeBSD.yaml
|-- jailed
`-- virtual
在我的理解中,puppet应该应用 osfamily / FreeBSD.yaml 所有内容,然后从 physical / FreeBSD.yaml 应用于物理FreeBSD主机。
现在,我想在每台主机上安装CA-Certificates软件包,并为该任务设置一个类:
class certificates ( $packageName = hiera('ca_package') ){
# Install CA-Certificates
package { $packageName:
ensure => installed,
}
}
该课程包含在 common.yaml
中classes:
- certificates
ca_package -Variable在 osfamily / FreeBSD.yaml 中定义:
---
rootuser: root
rootgroup: wheel
sshservicename: sshd
ca_package: 'security/ca_root_nss'
当我对该变量进行hiera测试时,一切正常:
# hiera -c /usr/local/etc/puppet/hiera.yaml ca_package ::osfamily=FreeBSD
security/ca_root_nss
#
但Puppet(甚至在Jails中)抱怨说数据项ca_package
不可用。
错误:无法从远程服务器检索目录:错误400开启 SERVER:无法在任何Hiera数据文件中找到数据项ca_package 没有默认提供 节点上的/usr/local/etc/puppet/modules/certificates/manifests/init.pp:2 puppet.fqdn
我做错了什么?
答案 0 :(得分:0)
调试hiera的最佳方法是使用以下命令:
puppet master --debug --compile hostname --osfamily=FreeBSD |grep hiera
查找密钥ca_package
,然后您应该知道如何修复。
其次,您的主机名是puppet.fqdn
,这对我来说很奇怪。
答案 1 :(得分:0)
检查因变量' osfamily'在您的客户端上是FreeBSD'。或者,您可以在puppetserver(logback.xml)上启用调试,并查看日志以查看其经历的层次结构以及未能获取ca_package的位置。
答案 2 :(得分:0)
调试 Hiera 的最佳方式是在 Puppet 服务器节点上运行 lookup
命令:
$ puppet lookup --environment production --explain --node fqdn.example.com ca_package
其中 ca_package
是您要查找的层次键。 --explain
标志有助于验证 Puppet 正在寻找密钥的路径。
也可以手动定义合并行为:
puppet lookup --merge deep --environment production --node fqdn.example.com