Puppet无法从hiera中找到数据项



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

从<<p> strong> 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。用于物理FreeBSD主机。

现在我想在每个主机上安装CA-Certificates包,并为该任务创建一个类:

class certificates ( $packageName = hiera('ca_package') ){
  # Install CA-Certificates
  package { $packageName:
    ensure   => installed,
  }
}

这个类包含在common.yaml

classes:
    - certificates

ca_package-变量定义在osfamily/FreeBSD.yaml:

---
rootuser: root
rootgroup: wheel
sshservicename: sshd
ca_package: 'security/ca_root_nss'

当我对该变量进行分层测试时,一切正常:

# 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/表现/init。节点Pp:2puppet.fqdn

我做错了什么?

调试hiera的最好方法是使用下面的命令:

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

寻找关键的ca_package,那么你应该知道如何修复。

第二,你的主机名是puppet.fqdn,这对我来说很奇怪。

检查您的客户端上的因子变量'osfamily'是否为'FreeBSD'。或者,您可以在puppetserver (logback.xml)上启用调试,并查看日志,以查看它经过的层次结构以及在哪里无法获得ca_package。

调试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

相关内容

  • 没有找到相关文章

最新更新