Führen Sie den Befehl puppet exec nur aus, wenn sich die Ausgabedatei geändert hat

8

Ich verwende einen Befehl exec, um ein Shell-Skript auszuführen, das bestimmte Konfigurationsdateien anderer Pakete ändert. Der Befehl exec wird immer dann ausgelöst, wenn sich Eingabeparameter wie IP-Adressen, Ports oder URLs ändern oder wenn das Shell-Skript selbst geändert wurde.

Ich muss ein Shell-Skript verwenden, da sich die Konfigurationsdateien des Softwarepakets zwischen den Versionen geringfügig unterscheiden. Ich denke, es ist einfacher, die Konfigurationsdatei per sed-Skript zu aktualisieren, als unterschiedliche Puppenvorlagen für jede bestimmte Version bereitzustellen.

Diese Konfiguration erkennt jedoch nicht, wenn eine der Konfigurationsdateien außerhalb von Puppet geändert wurde. Puppet kennt die Dateien nicht, die vom Shell-Skript geändert wurden.

Was ich suche, ist eine Möglichkeit, den Befehl exec von den Prüfsummen beliebiger anderer Dateien abhängig zu machen:

exec { "my_command.sh":
  only_if_file_has_changed => [ 
    "/etc/mysoftware/config.xml", 
    "/etc/othersoftware/defaults", 
  ]
}

Ist das möglich? Bitte beraten.

nn4l
quelle
Was genau versuchst du zu tun? Es gibt wahrscheinlich einen besseren Weg.
Michael Hampton
Ich habe die Frage mit einer Erklärung aktualisiert.
nn4l
Dies ist das Problem, das augeas löst.
Michael Hampton

Antworten:

11

Es würde so funktionieren:

exec { 'my_command.sh':
  command   => '/bin/my_command.sh',
  subscribe => [ 
    File['/etc/mysoftware/config.xml'], 
    File['/etc/othersoftware/defaults'], 
  ],
  refreshonly => true,
}

Die offensichtliche Einschränkung hierbei ist, dass die Dateien /etc/mysoftware/config.xmlund /etc/othersoftware/defaultsauch über Puppet geändert werden müssen.
Wenn sie durch etwas anderes (außerhalb von Puppet) verändert werden, siehe Felix 'Antwort.
Sie können Package['xxx']natürlich auch eine andere passende Abhängigkeit abonnieren .

Schwindler
quelle
Das ist fantastisch. Vielen Dank.
Guillaume Roderick
7

Puppet kann dies durch seinen Audit- Metaparameter lösen .

file { [ "/etc/mysoftware/config.xml", 
         "/etc/othersoftware/defaults" ]:
    audit => 'content',
    notify => Exec['my_command'],
}
Felix Frank
quelle