Wie wird der Pfad festgelegt, wenn ein einzelnes Puppenmodul angewendet wird?

12

Ich versuche, ein einzelnes Modul wie folgt auszuführen:

puppet apply --verbose --modulepath=moduleshere --noop -e 'include myclass'

Ich erhalte jedoch diese Art von Fehler, der angibt, dass der Pfad nicht festgelegt ist

Parameter unless failed: '[ -e "${logfile}" ]' is not qualified and no path was specified. Please qualify the command or specify a path.

Ich möchte den Pfad nicht an jedem solchen Ort explizit angeben, und er funktioniert einwandfrei, wenn er als Teil eines vollständigen Puppenspiels ausgeführt wird. Wie kann ich den Pfad angeben, wenn ein einzelnes Modul ausgeführt wird?

Ziege Hess
quelle
1
Könnten Sie bitte die entsprechende Antwort akzeptieren?
Kenorb

Antworten:

15

Die Befehle in einer ExecRessource müssen entweder vollständig qualifiziert sein (dh /usr/bin/teststattdessen test) oder das pathAttribut dieser ExecRessource muss festgelegt werden.

Wenn Sie das Puppet-Manifest (die Puppet-Manifeste) ändern können, können Sie einfach die folgende Definition hinzufügen, um ein Standardattribut pathfür alle ExecRessourcen festzulegen /bin:

Exec { path => "/bin" }

Als (mehr oder weniger) schmutzige Umgehung können Sie auch einfach den Standard pathfür jede ExecRessource in der Befehlszeile festlegen :

$ puppet apply --verbose -e 'Exec { path => "/bin" }' your_manifest.pp

Dokumentationshinweise:

joschi
quelle
2

Das ... sollte nicht Teil eines vollen Laufs sein. Es wird ein vollständiger Pfad zur ausführbaren Datei im unlessBefehl benötigt. Vielleicht haben Sie einen Pfad in einer globalen Datei festgelegt, der Teil Ihrer vollständigen Läufe ist?

Versuchen Sie es unless => '/usr/bin/[ -e "${logfile}" ]'stattdessen.

Shane Madden
quelle
1

Ich stimme Shane zu, dass der Standardpfad wahrscheinlich in einem Manifest mit globalem Gültigkeitsbereich festgelegt ist. Sie könnten dasselbe tun, aber Sie können es nicht als Argument übergeben, also verwenden Sie entweder stdin:

$ puppet apply -v --modulepath=moduleshere --noop <<EOF
Exec { path => "/bin:/sbin:/usr/bin:/usr/sbin" }
include myclass
EOF

Oder setzen Sie die Exec- und Include-Zeilen in example.ppund verwenden Sie dann puppet apply -v ... example.pp.

Dominic Cleal
quelle
1

Sie müssen einen vollständig qualifizierten Pfad verwenden.

Zum Beispiel entweder:

exec { "sample":
  command => "/usr/bin/test",
}

oder:

exec { "sample":
  path    => ['/usr/bin', '/usr/sbin', '/bin'],
  command => "test",
}
Kenorb
quelle