puppet - 从 Puppet 自定义类型访问层次范围

标签 puppet 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')})

效果很好,但是 my_type对象应在目录中的任何位置实例化,myparam预计在所有实例中都是相同的。所以不需要多个默认值声明。

另一种方法是放置
My_type{
  myparam => hiera('myparam')
}

在节点 list 中。那也可以,但是我们正在开发一个模块,而主要 list 超出了我们的范围

最佳答案

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

您已经提到您在评论中运行 masterless,这无关紧要,因为仍然有一个“主”运行来编译 Puppet 目录并评估层次值,以及一个使用提供程序应用目录的“代理”运行。

想象一下 Puppet 运行为一系列步骤:

  • 代理向主人发送事实 list
  • Master 编译站点 list 以查找要为节点
  • 包含的类列表
  • 大师评估所有参数和分层变量
  • Master将模块编译成目录
  • 主人发送目录给代理
  • 代理通过向提供者提供参数来应用目录

  • 因此,您最好的选择是将提供程序包装在定义类型中。使用定义类来获取层次默认值并将它们传递给提供者,同时允许覆盖默认值。

    关于puppet - 从 Puppet 自定义类型访问层次范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35129327/

    相关文章:

    list 中的 Puppet Hiera 查找不起作用

    windows - Hiera 和类之间的依赖关系

    Ruby 1.9 const_defined? ("Timeout") 当 Timeout 不在常量列表中时返回 true

    puppet - 禁用 Puppet 代理运行间隔

    puppet - 如何创建一个只在 Puppet 中刷新的类

    puppet - 从 git repo 克隆后,如何使用 puppet 在 nodejs-application 上运行 npm install

    puppet - 如何使用 Hiera 使用文件的 'content' 属性构建配置文件?

    puppet - 在 Hiera 中做基础数学

    puppet - 在 puppet hiera 设置中将 hiera 文件放在哪里

    ruby - Puppet:迭代模板中的 hiera_hash