Einmaliges Ausführen von ‘exec’

Die exec-Ressource von Puppet sollte nach Möglichkeit gemieden werden. Nicht nur, weil man es eigentlich mit angepassten Puppet-Modulen hinbekommen sollte, sondern, weil “exec” einige Probleme macht. …zum Beisiel, dass die Funktion jedes mal ausgeführt wird. Wie man diesen Umstand elegant umgeht, wird im Folgenden gezeigt.

Die Ressource exec wird also jedes Mal ausgeführt…so heißt es jedenfalls. Man kann jedoch exec an Bedingungen hängen. Es gibt die Möglichkeit das Attribut “creates” dazu zu verwenden, um eine Datei zu erstellen. Es ist jedoch so, dass exec nur dann ausgeführt wird, wenn die Datei noch nicht existiert; nach dem impliziten Erstellen der Datei aber eben nicht mehr.

…und das sieht so aus:

exec { 'top':
  command  => '/usr/bin/top -n 5 -d 1  -b > /tmp/top',
  path     => '/usr/bin:/usr/sbin:/bin',
  provider => shell,
  creates  => '/tmp/top',
  #onlyif   => '',
}

In diesem Beispiel wird die Ausgabe von top in eine Datei geschrieben. Existiert die Datei, wird exec nicht erneut ausgeführt. Damit hat man sich von eben dieser Beschränkung befreit.

(Das Attribut “onlyif” bietet ebenfalls interessante Möglichkeiten, weshalb ich es hier angedeutet habe.)