2

我正在尝试为我的 Puppet 设置构建 Hiera 配置。我的主机是 FreeBSD 和 Debian 系统。因此我有一个基于::osfamily. 但由于我广泛使用 Jails,我想进一步细分我的 FreeBSD 主机,使用::virtual.

来自hiera.yaml

:hierarchy:
    - "osfamily/%{::osfamily}"
    - "%{::virtual}/%{::osfamily}"
    - common

还有我的数据目录树:

hieradata/
|-- common.yaml
|-- osfamily
|   |-- Debian.yaml
|   `-- FreeBSD.yaml
|-- physical
|   `-- FreeBSD.yaml
|-- jailed
`-- virtual

在我的理解中,木偶应该应用osfamily/FreeBSD.yaml的所有内容,然后从物理/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(甚至在监狱中)抱怨说数据项ca_package不可用。

错误:无法从远程服务器检索目录:服务器上的错误 400:无法在任何 Hiera 数据文件中找到数据项 ca_package,并且 /usr/local/etc/puppet/modules/certificates/manifests/init.pp 中未提供默认值: 2 在节点 puppet.fqdn 上

我究竟做错了什么?

4

3 回答 3

0

检查客户端上的因子变量“osfamily”是否为“FreeBSD”。或者,您可以在 puppetserver (logback.xml) 上启用调试并查看日志以查看其通过的层次结构以及未能获取 ca_package 的位置。

于 2015-09-10T06:50:51.130 回答
0

调试 hiera 的最佳方法是使用以下命令:

puppet master --debug --compile hostname --osfamily=FreeBSD |grep hiera

寻找钥匙ca_package,然后你应该知道如何修复。

其次,您的主机名是puppet.fqdn,这对我来说很奇怪。

于 2015-09-09T12:11:40.937 回答
0

调试 Hiera 的最佳方法是lookup在 Puppet 服务器节点上运行命令:

$ puppet lookup --environment production --explain --node fqdn.example.com ca_package

ca_package您要查找的 hiera 密钥在哪里。--explain如果Puppet 正在寻找密钥,该标志有助于验证路径。

也可以手动定义合并行为:

puppet lookup --merge deep --environment production --node fqdn.example.com
于 2021-03-30T10:58:26.920 回答