gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 12:46:37 25 4
gpt4 key购买 nike

我正在构建自定义类型,但无法访问 希拉 范围来自 默认为 堵塞

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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com