如何在hiera.yaml的:hierarchy中配置Foreman主机组的正确路径?
首先给你吃个定心丸:你当前的版本组合(Hiera 3.3.2、Puppet 4.10.9、Foreman 1.15.6)是兼容的,不需要立刻升级。那个Satellite的配置思路其实也适用于Foreman(毕竟Satellite基于Foreman构建),问题大概率出在变量传递、路径结构或者配置细节上。
下面是一步步的解决方法:
1. 确认hostgroup变量是否正确传递
Foreman默认会把主机组信息作为自定义fact传递给Puppet,但有时候可能因为配置问题没生效。你可以在目标主机上执行以下命令验证:
facter -p hostgroup
如果返回空或者不是你预期的主机组名称(比如web/prod),那你需要在Foreman里检查:
- 主机组是否正确关联到目标主机;
- Foreman的
Settings > Puppet里是否开启了Add host group parameters to facts选项; - 有没有自定义的fact优先级覆盖了默认的hostgroup变量。
2. 正确配置Hiera层级
你的hiera.yaml里的:hierarchy部分需要这样写(注意格式和路径结构):
--- :backends: - yaml :yaml: :datadir: /etc/puppetlabs/code/environments/%{::environment}/hieradata :hierarchy: # 优先加载对应主机组的配置 - "hostgroup/%{::hostgroup}" # 然后是操作系统相关配置 - "os/%{::operatingsystem}" # 最后是通用配置 - common
这里的关键是:
- 路径里的
%{::hostgroup}会直接替换成主机组的名称,比如主机组是web/prod,Hiera会去查找hieradata/hostgroup/web/prod.yaml; - 确保
hieradata目录下存在对应的子目录和文件,比如hostgroup/web/prod.yaml,并且文件权限让Puppet进程能读取(通常是puppet:puppet权限)。
3. 排查Hiera查找日志
如果配置后还是不生效,开启Puppet的debug日志看看Hiera到底在找什么:
puppet agent --test --debug | grep hiera
你应该能看到类似这样的日志:
Debug: hiera: Looking up 'your_key' in yaml backend
Debug: hiera: Looking for data source hostgroup/web/prod
Debug: hiera: Found 'your_key' in hostgroup/web/prod
如果日志里根本没出现hostgroup相关的查找,说明变量没传递成功;如果出现了但提示找不到文件,那就是路径或文件不存在的问题。
关于Satellite的疑问
那个文档里的配置逻辑完全适用于Foreman,因为Satellite本质是Foreman的商业版,核心的Hiera集成逻辑是一致的。你不需要因为这个换版本,重点还是变量和路径的正确性。
内容的提问来源于stack exchange,提问作者patok

