
Ich versuche, meine eigene Funktion zu erstellen. Ich erhalte ständig diese Meldung.
Fehler: Katalog konnte nicht vom Remote-Server abgerufen werden: Fehler 400 auf dem SERVER: Funktion „brent_k“ gibt keinen Wert unter /etc/puppet/modules/munin/manifests/init.pp:17 auf Knoten XYZ.com zurück.
Hier ist mein einfacher Code
xyz.com:/etc/puppet/modules/munin/lib/puppet/parser/functions# cat brent_k.rb
module Puppet::Parser::Functions
newfunction(:brent_k, :type => :rvalue) do |args|
val = 'ok'
val
end
end
Und dann habe ich in meinem Manifest
$a = brent_k()
Ich habe es return val
auch versucht. Wie kann ich das beheben?
Antwort1
Wenn Sie benutzerdefinierten Ruby-Code ändern, z. B. eine benutzerdefinierte Funktion, müssen Sie Puppetmaster neu starten. Wenn Sie Puppet unter Passenger ausführen, bedeutet dies, dass Sie Apache neu starten müssen. Andernfalls erhalten Sie die alte Version.
Darüber hinaus gibt es einen ziemlich schlimmen Fehler, der auftritt, wenn Sie in Ihrem Puppetmaster mehrere Umgebungen hosten und in der anderen Umgebung eine gleichnamige Funktion haben. In diesem Fall können Sie nicht sicher sein, welche Funktion der Umgebung verwendet wird, wenn Sie den Funktionsnamen aufrufen! Es wird in allen Umgebungen der gleiche Funktionsnamespace verwendet ... (dies ist in Puppet 2.7.22 bestätigt, bei 3.x bin ich mir nicht sicher)
Antwort2
In der Dokumentation heißt es:
Der Puppet-Master speichert benutzerdefinierte Funktionen im Cache. Wenn Sie eine vorhandene Funktion bearbeiten (z. B. während Sie sie entwickeln), müssen Sie den Puppet-Master neu starten, bevor die neue Version verwendet werden kann.
https://puppet.com/docs/puppet/latest/writing_custom_functions.html
Hinweis zum Neustart des Puppet-Masters:
Führen Sie den folgenden Befehl aus, um Puppet Master neu zu starten:
$ service puppetmaster restart
Restarting puppet master
puppetmaster not configured to start, please edit /etc/default/puppetmaster to enable
.
Sie werden feststellen, dass der Dienst stoppt, aber nicht startet.
In diesem Fall führen Sie, wie Steve Shipway erwähnte, wahrscheinlich Puppet Master unter Passenger aus und müssen Apache2 neu laden, um Puppet Master tatsächlich neu zu starten:
$ service apache2 reload