如何将Puppet类中定义的变量传递给Hiera的.yaml配置文件
问题解答
首先明确:Hiera YAML配置属于Puppet的静态数据源,加载优先级早于类逻辑执行,本身无法直接读取类运行时定义的变量,但可以通过以下两种符合Puppet设计规范的方式实现需求:
- 方式一:调整为类参数传递(推荐最佳实践)
将需要共用的变量设置为类参数,由Hiera统一管理值,类直接读取参数值即可,若需要在YAML的其他配置项引用该值,可使用Hiera插值语法。
类定义修改示例:
YAML配置示例:class my_module::my_class ( # 此处为参数默认值,没有匹配的Hiera配置时生效 $current_date = '2021-10-12' ) { # 类内部直接使用$current_date即可 }# 给类参数赋值,优先级高于类内默认值 my_module::my_class::current_date: '2021-10-12' # 其他配置项引用该值时使用lookup插值 my_module::my_class::date_from_class: "%{lookup('my_module::my_class::current_date')}" - 方式二:自定义函数返回动态值
如果变量是类内部动态生成的(比如基于Facts、运行时逻辑计算得到),可以将生成逻辑封装为Puppet自定义函数,在YAML中通过插值调用函数获取值。
YAML调用示例:my_module::my_class::date_from_class: "%{my_module::get_custom_date()}"
注意:Hiera数据在Catalog编译的早期阶段就完成加载,类执行过程中无法修改Hiera的配置值,因此不建议尝试反向从类往Hiera传值的逻辑。
内容的提问来源于stack exchange,提问作者suomi
相关产品推荐
相关产品推荐

