Wie behebt man den Puppet-Fehler „Vollqualifizierter Parameterpfad“?

Wie behebt man den Puppet-Fehler „Vollqualifizierter Parameterpfad“?

Ich erhalte regelmäßig, aber zufällig, die folgende Fehlermeldung, wenn ich den Puppet-Client auf (nicht daemonisierten) Maschinen ausführe:

Fehler: Konnte nicht erstellt werden: Parameterpfad fehlgeschlagen: Dateipfade müssen vollständig qualifiziert sein
Warnung: Cache wird bei fehlgeschlagenem Katalog nicht verwendet
Warnung: Konfiguration konnte nicht instanziiert werden: Parameterpfad fehlgeschlagen: Dateipfade müssen vollständig qualifiziert sein

Es scheint einigermaßen klar zu sein, was es bedeutet – dass ich keinen vollqualifizierten Pfad in einem Parameter habe. Es sagt mir jedoch nichtWoIch kann das finden, um es zu beheben, oder sogar herausfinden, welcher Parameter falsch ist :(

(Wenn ich die Debug-Option verwende, funktioniert es durchgehend, es scheint also ein Problem mit dem Zwischenspeichern der Manifeste zu geben … Es wäre trotzdem schön, dies für den Produktionseinsatz loszuwerden.)

Hinweis: Ich kann dies nicht dauerhaft erreichen. :/

Antwort1

[Beantworte meine eigene Frage, nachdem ich eine Weile dazu gekommen bin, an der Konfiguration herumzubasteln]

Ich konnte dies natürlich auf eines der Module zurückführen, die ich geschrieben habe, aber es lag an der Verwendung einer Variablen, die nicht wie erwartet funktionierte.

Was passiert ist, war:

$variable_dir = "/etc/puppet/bar"

class foo {
  file { $variable_dir:
    ensure => directory
  }
}

define some-define() {
   # Trimmed for brevity
   exec { "some-$name":
     # command, creates, timeout etc here
     require => File[$variable_dir],
   }
}

..was im Grunde genommen zu einiger Verwirrung führte, da File[] eine Variable verwendete. Ich habe diese jetzt durch den expliziten Wert der Variable ersetzt und alles funktioniert einwandfrei, aber es war eine Überraschung! Ich gehe davon aus, dass mein Verständnis von Umfang und wann Variablen definiert/verwendet werden können, nicht mit Puppet übereinstimmt, also werde ich lernen, dass einvielbesser...

Es scheint dasselbe Verhalten verursacht zu haben wie die Verwendung nicht vollständig qualifizierter Pfade in Dateizeichenfolgen, da die Variable nicht gefunden oder der Wert nicht abgerufen werden konnte. Jedenfalls ziemlich seltsam.

Bearbeiten: Es ist durchaus möglich, dass die Variable nicht im Gültigkeitsbereich gefunden wurde und daher leer war und definitiv kein vollqualifizierter Pfad. Erklärt jedoch nicht, warum dies nicht konsistent war ...

Antwort2

Wenn Sie Ihre Puppet-Konfiguration testen möchten, können Sie dies tun, indem Sie

puppetd --test

Dadurch erhalten Sie eine viel ausführlichere Ausgabe und es sollte Ihnen zeigen, wo es fehlschlägt. Wenn Sie wirklich verzweifelt sind, können Sie anhängen, --debugum noch mehr Ausgabe zu erhalten.

Wenn Sie in Ihren Dateien suchen möchten, .ppsuchen Sie nach einem

file { "path/to/file":
    ...
}

in dem ein Element fehlt /(d. h. es müsste /path/to/filestattdessen heißen)

Antwort3

Sie können den tatsächlichen Pfad in die Pfadeigenschaft eingeben, dann funktioniert es. Bei mir funktioniert Folgendes:

$variable_dir = "/etc/puppet/bar"

class foo {
  file { 'variable_dir':
    path => ${variable_dir},
    ensure => directory
  }
}

define some-define() {
   # Trimmed for brevity
   exec { "some-$name":
     # command, creates, timeout etc here
     require => File['variable_dir'],
   }
}

Antwort4

Der vollständige Pfad sollte im Schlüsselnamen angegeben werden, sofern Sie keinen pathParameter verwenden.

Zum Beispiel:

file { '/full/path':
  ensure => directory,
  recurse => true,
}

oder:

file { 'my name':
  path => "/full/path",
  ensure => directory,
  recurse => true,
}

Wenn Sie eine Variable verwenden, stellen Sie sicher, dass sie definiert ist. Wenn sie sich in einer anderen Klasse befindet, verwenden Sie die Standardsyntax $class::variable. Für weitere Informationen führen Sie Puppet mit -vddem Parameter (verbose+debug) aus.

verwandte Informationen