ich eine lokale Manifest Anwendung ein testen exec
und file
Ressource:Puppet Datei-Ressource läuft trotz Exec, es sei denn
class test_file {
exec { "touch /tmp/testfile":
path => ["/bin", "/usr/bin", "/sbin", "/usr/sbin"],
unless => "test -d /tmp 2>/dev/null",
}
file { "/tmp/success":
mode => "0777",
owner => "root",
group => "staff",
source => "file:///Users/Shared/success",
require => Exec["touch /tmp/testfile"],
}
}
Was ich geschehen erwarten: Die exec
läuft und beendet, weil die unless
Aussage gibt 0 zurück, so dass die Dateiressource nie ausgeführt wird und keine Datei in /tmp
erstellt wird.
Was passiert eigentlich: Die file
Ressource immer läuft, und kopiert die „Erfolg“ Datei zu /tmp
Ich habe die 4.10 und 5.3.2 auf macOS 10.11 und 10.12 mit beiden Puppen Agenten ausgeführt. .. mit den gleichen Ergebnissen. Ich versuche einfach, eine Bedingung auszuführen, die besagt, dass eine Datei nicht kopiert werden soll, wenn ein Befehl erfolgreich beendet wird. Alle Einsichten oder Richtungen würden geschätzt werden.
Er tut dies nur für das Training, also weiß ich nicht, ob er dieses erfundene Szenario wirklich in einer realen Umgebung machen will. In dieser Situation würde er wahrscheinlich eine "Datei" für die erste Aktion und eine "Exec" für die zweite Aktion verwenden. –
Das ist nicht ganz richtig. Die "Datei" mit einer "requirement" -Reqlationship auf dem "Exec" legt nicht nur die Reihenfolge der Anwendung fest, sondern verhindert auch, dass die "Datei" überhaupt angewendet wird, wenn ein Versuch unternommen wird, die "Exec" anzuwenden und fehlschlägt. Aber natürlich ist der Exec-Fehler anders, als wenn er nicht angewendet wird, weil er bereits synchron ist (wie in diesem Fall über seinen Befehl 'obwher' bestimmt). –
Ich habe eine Fußnote dazu hinzugefügt. –