Puppet无法从hiera中找到数据项

时间:2015-09-09 10:53:12

标签: puppet hiera

我正在尝试为我的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

我做错了什么?

3 个答案:

答案 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
相关问题