从 Puppet 自定义类型访问 hiera 范围



我正在构建一个自定义类型,但我无法从默认块访问 hiera 范围

module Puppet
  require 'puppet/parser/functions/hiera' 
  newtype(:my_type) do
    ensurable
    newparam(:myparam) do
      defaultto { Puppet::Parser::Functions.hiera('myparam') }
    end
    newproperty(:value) do
        desc "Value of the item."
    end
  end
end

但我得到

Error: undefined method `hiera' for Puppet::Parser::Functions:Module

我实际上正在使用Puppet 3.8和未来的解析器

作为解决方法,我们使用

  $my_vals = hiera_hash('mytype_vals')
  create_resource(my_type, $myvals, {myparam => hiera('myparam')})

这工作正常,但my_type对象应在目录中的任何位置实例化,则myparam应在所有实例中相同。因此,不需要多个默认值声明。

另一种方法是放置

My_type{
  myparam => hiera('myparam')
}

在节点清单中。这也可以解决问题,但我们正在开发一个模块,主清单超出了我们的范围

您无法从提供程序访问 hiera 数据,因为提供程序运行代理端,而 hiera 运行主机端。

您在评论中提到您运行无主,这无关紧要,因为仍然有一个编译 Puppet 目录并评估 hiera 值的"master"运行和一个使用提供程序应用目录的"代理"运行。

将木偶运行想象为一系列步骤:

  • 代理向主发送事实列表
  • Master 编译站点清单以查找要为节点包含的类列表
  • 主站评估所有参数和 hiera 变量
  • Master 将模块编译到目录中
  • 主设备将目录发送给代理
  • 代理通过将参数提供给提供程序来应用目录

因此,最好的办法是将提供程序包装在定义类型中。使用 define 类获取 hiera 默认值并将其传递给提供程序,同时允许覆盖默认值。

相关内容

  • 没有找到相关文章

最新更新