我正在构建自定义类型,但无法访问 希拉 范围来自 默认为 堵塞
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')})
效果很好,但是
my_type
对象应在目录中的任何位置实例化,myparam
预计在所有实例中都是相同的。所以不需要多个默认值声明。另一种方法是放置
My_type{
myparam => hiera('myparam')
}
在节点 list 中。那也可以,但是我们正在开发一个模块,而主要 list 超出了我们的范围
最佳答案
您无法从提供者访问 hiera 数据,因为提供者运行代理端而 hiera 运行主端。
您已经提到您在评论中运行 masterless,这无关紧要,因为仍然有一个“主”运行来编译 Puppet 目录并评估层次值,以及一个使用提供程序应用目录的“代理”运行。
想象一下 Puppet 运行为一系列步骤:
因此,您最好的选择是将提供程序包装在定义类型中。使用定义类来获取层次默认值并将它们传递给提供者,同时允许覆盖默认值。
关于puppet - 从 Puppet 自定义类型访问层次范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35129327/