Puppet 3升级至5后Hiera配置异常,寻求解决建议
我之前也碰到过Puppet 3升5后Hiera出问题的情况,毕竟Hiera 5和老版本的配置逻辑变化不小。结合你给出的环境信息,给你列几个重点排查方向:
1. 确认Hiera配置文件的位置是否正确
Puppet 5的Hiera 5要求环境级的hiera.yaml必须放在对应环境的根目录下,比如你的production环境,路径应该是/etc/puppetlabs/code/environments/production/hiera.yaml,而不是你现在的/etc/puppetlabs/code/environments/hiera.yaml(这个位置是全局级配置,优先级比环境级低,而且容易导致环境隔离失效)。
2. 检查Hiera层级路径的有效性
你配置的路径是environments/%{environment}/data/%{trusted.certname}.yaml,这里有两个关键点:
- 确认对应环境的data目录存在,比如production环境要确保
/etc/puppetlabs/code/environments/production/data/目录存在 - 检查
%{trusted.certname}变量是否能正确解析:可以在节点上运行facter trusted.certname看返回值,然后确认data目录下是否有对应名称的yaml文件(注意Linux下文件名区分大小写) - 也可以临时把路径改成
data/%{trusted.certname}.yaml试试,因为Hiera 5会自动基于当前环境的根目录去查找,不用写全路径前缀
3. 补全/修正data_hash配置
你提供的hiera.yaml里data_hash: yaml_dat...看起来没写完,Hiera 5读取yaml文件需要正确设置data_hash: yaml_data,这个拼写一定要准确,否则Hiera无法解析数据文件。
4. 验证文件权限是否正确
Puppet Master的运行用户(通常是puppet或pe-puppet)需要对data目录和里面的yaml文件有读取权限。可以用以下命令检查:
ls -ld /etc/puppetlabs/code/environments/<你的环境名>/data/ ls -l /etc/puppetlabs/code/environments/<你的环境名>/data/<节点证书名>.yaml
如果权限不对,用chown和chmod调整,比如:
chown -R puppet:puppet /etc/puppetlabs/code/environments/<你的环境名>/data/ chmod -R 0640 /etc/puppetlabs/code/environments/<你的环境名>/data/
5. 用命令行测试Hiera查找
直接在Master上用puppet lookup命令测试,能快速定位是配置问题还是Manifest调用问题:
puppet lookup --node <你的节点证书名> --environment <你的环境名> <你要查找的配置key>
如果这个命令能返回预期的值,那问题大概率出在Manifest里的调用方式;如果返回空或错误,那就是Hiera配置或数据文件的问题。
6. 确认Manifest里的查找方式兼容
Puppet 5虽然兼容老的hiera()函数,但Hiera 5的特性更适配lookup()函数(包括lookup()的参数、合并策略等)。如果你的Manifest里还在用老的hiera(),可以试试换成lookup(),比如:
# 老方式 $config_value = hiera('my_config_key') # 新方式 $config_value = lookup('my_config_key')
7. 检查节点的环境匹配
确认你的节点确实属于你配置中指定的环境(%{environment}变量),可以在节点上运行puppet agent --configprint environment看返回值,避免因为环境不匹配导致找不到对应的数据文件。
内容的提问来源于stack exchange,提问作者Linux For Everyone

