Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Puppet自定义类型访问hiera范围_Puppet_Hiera - Fatal编程技术网

从Puppet自定义类型访问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)

我正在构建自定义类型,无法从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) 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信息。首先,我将尝试在问题中解释我们的用例