重装Ubuntu及Puppet后hiera.yaml配置错误致Agent运行失败
解决Puppet Agent运行时Hiera配置语法错误的问题
这问题我熟,完全是Hiera版本语法不兼容搞的鬼!你在hiera.yaml里明明声明了version: 5,但写的配置却是Hiera 3的旧格式,Puppet 4及以后版本用的Hiera 5语法和旧版本差异很大,服务器自然会抛出一堆类型错误。
先拆解报错里的核心问题:
- Hiera 5已经废弃了
:backends、:yaml这类带冒号的配置项,不需要再指定后端(默认支持YAML格式) hierarchy层级在Hiera 5里要求每个条目是结构体(Struct),你原来写的纯字符串不符合要求- 数据目录
datadir的配置位置也变了,不需要嵌套在:yaml下面
修复后的hiera.yaml配置示例
把你原有的配置替换成下面的内容,注意根据你的实际环境调整datadir路径:
--- # Hiera 5 Global configuration file version: 5 # 指定Hiera数据文件的存储目录,用环境变量适配不同环境 datadir: /etc/puppetlabs/code/environments/%{environment}/hieradata hierarchy: # 第一层级:节点专属配置,优先级最高 - name: "Per-node specific config" path: "nodes/%{::trusted.certname}.yaml" # 第二层级:全局通用配置 - name: "Common global config" path: "common.yaml"
如果你想简化层级写法(Puppet也支持),可以写成更简洁的版本:
--- # Hiera 5 Global configuration file version: 5 datadir: /etc/puppetlabs/code/environments/%{environment}/hieradata hierarchy: - "nodes/%{::trusted.certname}" - "common"
后续操作步骤
- 保存修改后的
hiera.yaml到/etc/puppetlabs/puppet/目录 - 确保
datadir指向的目录存在,并且给puppetserver权限:mkdir -p /etc/puppetlabs/code/environments/production/hieradata chown -R puppet:puppet /etc/puppetlabs/code/environments/production/hieradata - 重启puppetserver服务,让配置生效:
systemctl restart puppetserver - 重新运行puppet agent测试:
puppet agent -t
这样应该就能解决那些500服务器错误了,本质就是新旧Hiera配置语法的适配问题。
内容的提问来源于stack exchange,提问作者cclloyd
相关产品推荐
相关产品推荐

