Bei einem puppet agent
Anruf von einem neuen Bild erhalte ich eine err: Could not find class custommod
Fehlermeldung. Das Modul selbst ist /etc/puppet/modules/custommod
dasselbe wie alle anderen Module, die wir aufrufen, aber dieses ist hartnäckig.
[site.pp]
node /clunod-wk\d+\.sub\.example\.local/ {
include base
include curl
include custommod
class{ "custommod::apps": frontend => "false}
[...]
}
Wenn der Puppenmeister mit Debug-Ausgabe ausgeführt wird, werden die Informationen für Basis und Curl eindeutig gefunden:
debug: importing '/etc/puppet/modules/base/manifests/init.pp' in environment production
debug: Automatically imported base from base into production
debug: importing '/etc/puppet/modules/curl/manifests/init.pp' in environment production
debug: Automatically imported curl from curl into production
err: Could not find class custommod for clunod-wk0130.sub.example.local at /etc/puppet/manifests/site.pp:84 on node clunod-wk0130.sub.example.local
Linie 84 ist include custommod
Eine abgekürzte Verzeichnis- und Dateistruktur:
/etc/puppet
|- manifests
| |- site.pp
|
|- modules
|- base
| |- manifests
| |- init.pp
|
|- curl
| |- manifests
| |- init.pp
|
|- custommod
|- files
| |- apps
| |- [...]
|
|- manifests
|- init.pp
|- apps.pp
Ich habe die Rechtschreibung überprüft:}
Der Inhalt von init.pp
im custommod-Verzeichnis ist völlig unauffällig:
class custommod {
}
Die Absicht ist, eine leere Klasse für die Datei apps.pp zu erstellen, in der sich das Fleisch befindet.
class custommod::apps {
[lots of stuff]
}
Nur, es kommt nie zur Apps-Datei. Wenn ich das auskommentiere, include custommod
wird der obige Fehler class{ "custommod::apps": frontend => "false}
stattdessen in der Zeile generiert .
Was fehlt mir bei meiner Suche, um herauszufinden, wie dieser Fehler erzeugt wird? Ich muss beachten, dass dieses Repo gut funktioniert, wenn es lokal über ausgeführt wird puppet apply
.
quelle
could not retrieve catalog from remote server:
Fehler angezeigt. Dies ist wahrscheinlich der Grund.custommod
Leerzeicheninit.pp
nicht mehr einzuschließen - vielleicht sollten Sie es sogar ganz löschen , da es nicht benötigt werden sollte.strace
und herauszufinden, welche Dateien auf diese Weise gelesen werden sollen.Antworten:
Also ... das ist ein bisschen peinlich, aber ...
Umgebungen.
Genau dort in meiner
/etc/puppet.conf
Datei ist dies:Nachdem
strace
ich darauf geworfen hatte , um herauszufinden, wo es nach Akten suchte, bemerkte ich etwas. Es wurde nach Unterbringung gesucht/etc/puppet/environments/production/modules
, und da dort ein Verzeichnis (leer) war, ging es dann nicht zur Überprüfung/etc/puppet/modules
. Offensichtlich wird beim Importieren eines Moduls nicht die Datei (init.pp), sondern die Verzeichnispräsenz überprüft.Entfernen Sie das leere Verzeichnis, die Dinge beginnen zu funktionieren.
Führen Sie den Marionettenagenten in einer anderen Umgebung aus.
Moral der Geschichte:
quelle
puppet config print modulepath
.Ich bin auf dasselbe Problem gestoßen, hatte aber eine andere Lösung
Wenn Sie ein Marionettenmodul wie folgt generieren:
Es wird ein Modul
example_module
mit demfoo
Namen des Namensraums erstellt. Alle Manifeste befinden sich in einem Verzeichnis namensfoo-example_module
Der Name der in der init.pp definierten Klasse muss mit dem Ordnernamen übereinstimmen.
Einfache Lösung:
Wenn Sie Puppet-Lint ausführen, wird die folgende Meldung angezeigt:
Wenn Sie ein Puppetfile mit r10k oder Librarian-Puppet verwenden, müssen Sie möglicherweise auch den Namensraum entfernen, damit die Dateien ohne das Präfix 'foo' in Ihrem Modulverzeichnis abgelegt werden.
Vor:
nach:
quelle
Ein weiteres Problem kann auftreten, wenn Ihr Modul eine ungültige
metadata.json
Datei enthält.Stellen Sie sicher, dass die
metadata.json
Datei alle erforderlichen Felder enthält (siehe https://docs.puppet.com/puppet/latest/reference/modules_metadata.html#allowed-keys-in-metadatajson ).quelle
Stieß auf ein ähnliches Problem mit Puppet 3.7.1 für Fedora: Class Puppet für my.server konnte nicht gefunden werden
Lösung:
Dann klappt es.
quelle
Ich hatte ein ähnliches Problem. In meinem Fall lautete der Klassenname "onehost :: change_IoT_password_reminder". Nachdem ich strace benutzt habe, habe ich festgestellt, dass Puppet nach einer Datei modules / onehost / manifests / change_iot_password_reminder.pp gesucht hat. Es scheint, dass die Verwendung von Großbuchstaben in Klassennamen keine gute Idee ist, auch wenn es nicht der erste Buchstabe der Klasse ist.
quelle