簡體   English   中英

從Puppet自定義類型訪問hiera范圍

[英]Access hiera scope from Puppet custom type

我正在構建一個自定義類型,我無法從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和未來的解析器

作為一種解決方法,我們使用

  $my_vals = hiera_hash('mytype_vals')
  create_resource(my_type, $myvals, {myparam => hiera('myparam')})

這工作正常,但my_type對象應該在目錄中的任何地方實例化, myparam在所有實例中都應該是相同的。 因此,不需要多個默認值聲明。

另一種方法是放置

My_type{
  myparam => hiera('myparam')
}

在節點清單中。 這也可以解決問題,但我們正在開發一個模塊,主要清單超出了我們的范圍

您無法從提供者訪問hiera數據,因為提供者運行代理端,而hiera運行主端。

你已經提到你在評論中運行了無主,這是無關緊要的,因為仍然有一個“主”運行編譯Puppet目錄並評估hiera值和一個使用提供程序應用目錄的“代理”運行。

想象一下Puppet作為一系列步驟運行:

  • 代理向主人發送事實列表
  • Master編譯站點清單以查找要包含在節點中的類列表
  • Master評估所有參數和hiera變量
  • Master將模塊編譯到目錄中
  • Master將代理發送給代理
  • 代理通過向提供者提供參數來應用目錄

因此,最好的辦法是將提供程序包裝在一個define類型中。 使用define類獲取hiera默認值並將它們傳遞給提供程序,同時允許覆蓋默認值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM