从Puppet自定义类型访问hiera范围
我正在构建自定义类型,无法从defaultto块访问hiera范围从Puppet自定义类型访问hiera范围,puppet,hiera,Puppet,Hiera,我正在构建自定义类型,无法从defaultto块访问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)
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和future解析器
作为解决方法,我们使用
$my_vals = hiera_hash('mytype_vals')
create_resource(my_type, $myvals, {myparam => hiera('myparam')})
这很好,但是myu type
对象应该在目录中的任何位置实例化,而myparam
应该在所有实例中都是相同的。因此,不需要多个默认值声明
另一种方法是放置
My_type{
myparam => hiera('myparam')
}
在节点清单中。这也可以做到,但我们正在开发一个模块,主清单不在我们的范围内您不能从提供者访问hiera数据,因为提供者运行代理端,hiera运行主端 您在评论中提到运行masterless,这与此无关,因为仍然存在编译Puppet目录并计算hiera值的“master”运行和使用提供程序应用目录的“agent”运行 将木偶运行想象为一系列步骤:
- 代理向master发送一份事实列表
- Master编译站点清单以查找要为节点包含的类的列表
- Master评估所有参数和hiera变量
- Master将模块编译成目录
- 主机将目录发送给代理
- 代理通过向提供程序提供参数来应用目录
因此,最好是将提供程序包装为define类型。使用define类获取hiera默认值并将其传递给提供者,同时允许覆盖默认值。我无法立即解释“未定义方法”的问题,但我认为这种方法(1)没有意义,(2)即使您能够进行hiera调用,也不适用于您。主要是对后者而言,你的类型需要在主机和代理上进行评估;在后一种情况下,您(可能)没有可用的Hiera。对于第二点,我们使用无主架构,并使用puppet apply,因此节点可以访问其Hiera信息。首先,我将尝试在问题中解释我们的用例