Kann Puppet ein Shell-Skript ausführen (das vom Master heruntergeladen wird), ohne es zu speichern?

7

Ich habe einen Schritt in einem Puppet-Modul, der ungefähr Folgendes ausführt, um einige Anwendungsschlüssel einzurichten:

file { '/root/setup_app_keys.sh':
  ensure => file,
  owner  => 'root',
  group  => 'root',
  mode   => '0700',
  source => 'puppet:///modules/app_module/setup_app_keys.sh',
}

exec { 'setup_app_keys':
  unless  => '/etc/pki/tls/private/app-foo.key',
  command => '/root/setup_app_keys.sh',
  user    => 'root',
  group   => 'root',
}

Das setup_app_keys.shSkript ist etwas zu lang, um in einen (lesbaren) Einzeiler umgewandelt zu werden. Daher speichere ich es im Dateisystem des Computers und führe es von dort aus aus. Es erstellt seine Dateien in /etc/pki...und es funktioniert gut genug.

Das nervige ist, dass das Shell-Skript im Grunde genommen eine einmalige Verwendung ist. Es sollte während der gesamten Lebensdauer des Computers nie wieder ausgeführt werden, und dennoch muss es auf dem Dateisystem verbleiben, in dem Puppet es gespeichert hat. Wenn es gelöscht wird, erstellt Puppet es erneut hilfreich.

Ich denke, es muss eine Möglichkeit geben, dies execausschließlich mit neu zu schreiben , damit ich das Skript bei Bedarf vom Puppenmeister herunterladen, einmal ausführen und dann das Skript verwerfen kann (oder es gar nicht erst speichern kann). Aber alles, was ich versucht habe, hat die Form:

command => 'puppet:///modules/app_module/setup_app_keys.sh',

oder

command => 'curl http://__[various puppetmaster URLs]__ | sh',

und keiner der Ansätze scheint zu funktionieren. Frage ich zu viel oder ist dieser Ansatz fehlerhaft?

Smitelli
quelle
2
dafür denke ich ist besser du verwendest ansible oder mcollective
c4f4t0r
@ c4f4t0r Bitte posten Sie dies als Antwort
030

Antworten:

3

Sie können versuchen, Ihre vor der Ausführung filein einen Übergangszustand zu versetzen . Der Endzustand wäre

ensure => absent

Dies schneidet Altersmaterial zum Zeitpunkt des Schreibens. Ihr Kilometerstand kann variieren.

Felix Frank
quelle
2

Sie können in Ihrem 'exec' hinzufügen

require => File["/root/setup_app_keys.sh"],
refreshonly => true,

Daher wird es nur erneut ausgeführt, wenn Sie das Skript ändern

oder Sie können nach dem letzten Lauf Ihre 'Datei' hinzufügen

ensure  => purged,
Fndiaz
quelle
2

dafür denke ich ist besser du verwendest ansible oder mcollective, für so etwas benutze ich ansible.

Weitere Informationen dazu.

http://docs.ansible.com/intro_getting_started.html
c4f4t0r
quelle
1

Sie können den Befehl über die Vorlage ausführen:

exec { 'my-command':
     command     => template('template-for-my-command.erb')
}
Mikhail Koshel
quelle