我目前正在尝试重建所描述的示例这里
问题是,当我尝试获取 ntp::servers 变量时出现以下错误,我无法理解。
hiera ntp::servers ::fqdn=debian
/usr/lib/ruby/vendor_ruby/hiera/backend.rb:18:in `[]': can't convert Symbol into Integer (TypeError)
from /usr/lib/ruby/vendor_ruby/hiera/backend.rb:18:in `datadir'
from /usr/lib/ruby/vendor_ruby/hiera/backend.rb:98:in `datasourcefiles'
from /usr/lib/ruby/vendor_ruby/hiera/backend/yaml_backend.rb:16:in `lookup'
from /usr/lib/ruby/vendor_ruby/hiera/backend.rb:206:in `block in lookup'
from /usr/lib/ruby/vendor_ruby/hiera/backend.rb:203:in `each'
from /usr/lib/ruby/vendor_ruby/hiera/backend.rb:203:in `lookup'
from /usr/lib/ruby/vendor_ruby/hiera.rb:60:in `lookup'
from /usr/bin/hiera:225:in `<main>'
我考虑了故障排除要点
- 您的 hiera.yaml 文件与我们提供的示例相符
- 您已将符号链接放置到命令行工具需要找到的位置(/etc/hiera.yaml)
- 您已保存了 kermit.example.com 数据源文件,扩展名为 .yaml
- 您的数据源文件的 YAML 格式正确
- 如果你修改了 hiera.yaml,则需要重新启动 Puppet Master
我的 /etc/puppet/hiera.yaml。(有点不同,但也可以工作)
:backends:
- yaml
- puppet
:yaml:
- :datadir: /etc/puppet/hieradata
:puppet:
- :datadir: data
:hierarchy:
- "node/%{::clientcert}"
- "%{::environment}"
- common
符号链接正确
ls -l /etc/hiera.yaml
lrwxrwxrwx 1 root root 22 Sep 15 15:33 /etc/hiera.yaml -> /etc/puppet/hiera.yaml
我的示例文件:/etc/puppet/hieradata/node/debian.yaml
ntp::restrict:
-
ntp::autoupdate: false
ntp::enable: true
ntp::servers:
- 0.us.pool.ntp.org iburst
- 1.us.pool.ntp.org iburst
- 2.us.pool.ntp.org iburst
- 3.us.pool.ntp.org iburst
我不知道该用什么工具来检查 YAML 是否正确。我从网站上复制了它,所以我认为没问题。
为确保万无一失,Puppetmaster 也已重新启动。
那么 hiera 工具给出的错误可能是什么问题呢?
答案1
您选择了更安全的路径,即使用%{::clientcert}
而不是,这是值得称赞的。但请确保在执行查找时%{::fqdn}
为 而不是 提供一个值。::fqdn=debian
此外,:datadir
后端puppet
还有一个:datasource
选项(请参阅文档)。
我建议puppet
暂时删除后端。如果你发现你确实需要它,再添加它。大多数用户不会。