我正在尝试使用 puppet 设置一个新节点,但是它失败并出现错误,这让我相信 hiera 没有找到正确的数据源:
Server Error: Evaluation Error: Error while evaluating a Function Call, undefined method `empty?' for nil:NilClass at ${line 4 in some selfwritten class}
我也遇到了这个错误,但我不记得我做了什么更改(如果有的话)导致了此错误:
Server Error: Evaluation Error: Error while evaluating a Function Call, Unknown alias: 3B4007E7596ADF847ECA510D57069DBF2B3DB006 at ${line 4 in the same selfwritten class}
puppet 抱怨的类中的行如下所示:
$network = hiera("network")
这是课堂上的第一句话。相同的查找在不同的节点上起作用。
我的 /etc/puppetlabs/puppet/hiera.yaml 看起来像这样
---
:backends:
- yaml
:hierarchy:
- "nodes/%{::trusted.certname}"
- "customer/%{customer}"
- "preview/%{preview}"
- "test/%{test}"
- common
:yaml:
# datadir is empty here, so hiera uses its defaults:
# - /etc/puppetlabs/code/environments/%{environment}/hieradata on *nix
# - %CommonAppData%\PuppetLabs\code\environments\%{environment}\hieradata on Windows
# When specifying a datadir, make sure the directory exists.
:datadir:
此新节点在其清单中
$customer='foo'
虽然工作节点有
$customer='bar'
我有每个文件的一个 yaml 文件,并且 yamllint 没有显示 hiera.yaml 或下面两个文件的错误或警告。
ls /etc/puppetlabs/code/environments/production/hieradata/customer/
foo.yaml bar.yaml
各自的 yaml 文件中的第一行为该值网络定义了一个字符串:
network: "172.28.11"
我尝试使用 puppet lookup 来调试这个问题,但目前还没有成功
puppet lookup --environment production --debug --explain --node foo-app1.domain.tld --compile network
<snip lots of unrelated stuff>
Debug: hiera(): Looking for data source customer/foo
Error: Could not run: Evaluation Error: Error while evaluating a Function Call, Unknown alias: 3B4007E7596ADF847ECA510D57069DBF2B3DB006 at {same class and line}
如果我运行该命令时不使用 --compile ,它会退出而不会出现错误,但也不会查找客户数据源
- 所有节点都运行 Debian Jessie (8)
- Puppetserver 是 Jessie 官方 Puppetlabs Repo 的 2.5.0 版本
- 我尝试过 Jessie (3.7.2) 和 Backports (4.8.2) 的 puppet 代理版本 - 没有区别
那么:为什么这个节点无法通过 hiera 查找?我该如何修复它?如何正确使用 puppet 查找从工作节点获取此值?(以帮助调试)