Ich baue eine Art Gewohnheit, und ich bin nicht in der Lage den Zugang zum hiera Umfang erhalten von einem defaultto BlockZugang hiera Umfang von Puppet benutzerdefinierten Typ
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
Aber ich bekomme
Error: undefined method `hiera' for Puppet::Parser::Functions:Module
ich verwende eigentlich Puppet 3.8 und zukünftige Parser
Als Abhilfe können, verwenden wir
$my_vals = hiera_hash('mytype_vals')
create_resource(my_type, $myvals, {myparam => hiera('myparam')})
Das funktioniert gut, aber my_type
Objekte werden voraussichtlich überall im Katalog auszuprägen, ein myparam
wird erwartet, dass das gleiche über alle Instanzen hinweg sein. Daher sollte eine mehrfache Vorgabewertdeklaration nicht notwendig sein.
würde Ein anderer Ansatz
My_type{
myparam => hiera('myparam')
}
Im Knoten manifestieren zu platzieren sein. Das würde den Trick auch tun, aber wir entwickeln ein Modul, und Hauptmanifest ist außerhalb unseres Bereichs
Ich kann das "undefined method" -Problem nicht ohne weiteres erklären, aber ich denke nicht, dass dieser Ansatz entweder (1) Sinn macht oder (2) für Sie funktionieren könnte, selbst wenn Sie den Hiera-Aufruf machen könnten. Hauptsächlich mit Letzterem zu sprechen, muss Ihr Typ sowohl auf dem Master * als auch auf dem Agenten * bewertet werden; Im letzteren Fall steht Ihnen (wahrscheinlich) kein Hiera zur Verfügung. –
Für den zweiten Punkt verwenden wir eine Masterless-Architektur und verwenden Puppet-Apply, so dass Knoten Zugriff auf ihre Hiera-Informationen haben. Zum ersten werde ich versuchen, unseren Anwendungsfall in der Frage zu erklären –