我正在构建自定义类型,但我无法从默认块访问 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')
}
在节点清单中。这也可以解决问题,但我们正在开发一个模块,主要清单超出了我们的范围
答案 0 :(得分:2)
您无法从提供商访问hiera数据,因为提供商运行代理端,而hiera运行主端。
你已经提到你在评论中没有主人,这是无关紧要的,因为还有一个"主人"运行编译Puppet目录并评估hiera值和"代理"运行使用提供程序应用目录。
想象一下Puppet作为一系列步骤运行:
所以最好的办法是将提供程序包装在一个define类型中。使用define类获取hiera默认值并将它们传递给提供者,同时允许覆盖默认值。