Marionette: Paket entfernen und sicherstellen, gestoppt

7

Ich bin ziemlich neu bei Puppet, aber es gefällt mir bisher sehr gut. Im Moment richte ich es ein, um eine kleine Architektur zu automatisieren.

Ich habe jedoch ein Problem: Ich möchte ein Paket entfernen und sicherstellen, dass es gestoppt wird. Um dies zu erreichen, habe ich den folgenden Eintrag in meinem Manifest:

package { 'supervisor':
    ensure => absent,
}

service { 'supervisor':
    ensure     => stopped,
    enable     => false,
    hasstatus  => true,
}

Das Problem dabei ist, dass ich nach dem einmaligen Anwenden des Manifests auf den Knoten beim nächsten Durchlauf den folgenden Fehler erhalte:

debug: Service[supervisor](provider=debian): Could not find supervisor in /etc/init.d
debug: Service[supervisor](provider=debian): Could not find supervisor.sh in /etc/init.d
err: /Stage[main]/Screenly_core/Service[supervisor]: Could not evaluate: Could not find init script for 'supervisor'

Gibt es eine Möglichkeit, eine bedingte Anweisung auszuführen, sodass die Stop-Prozedur nur ausgeführt wird, wenn das Paket tatsächlich vorhanden war (und dann vor dem Entfernen des Pakets ausgeführt wird)?

vpetersson
quelle
Ich glaube, Sie fragen sich, was in der Marionettenterminologie als "Abonnieren" bezeichnet wird. Auf die gleiche Weise, wie in den Beispielen ntp nach der Installation oder Aktualisierung neu gestartet wird, können Sie hier tun, was Sie wollen.
Sirex
2
Versuchen Sie es hier: docs.puppetlabs.com/learning/ordering.html
Sirex
5
Ist es nicht genug, nur das Paket zu entfernen? Es sollte automatisch gestoppt werden.
Khaled
@ Khaled Ich bin nicht sicher. Vielleicht, aber ich bin eher sicher als leid.
Vpetersson
@Sirex Bestellung hilft hier nicht. Um einen Dienst zu stoppen, benötigen Sie ein Init-Skript, das normalerweise Teil des Pakets ist. Sie möchten das Paket jedoch gleichzeitig deinstallieren. Für mich sieht es so aus, als wäre es mit normalen Puppenmitteln nicht lösbar.
Slaven Rezic

Antworten:

3

Auf Debian-basierten Systemen (und ich nehme auch auf RPM-Systemen an) stoppt das Entfernen eines Pakets seine Dienste, bevor Dateien gelöscht werden (Vorphase in Deb-Paketen).

Was Sie jedoch fragen, können Sie erreichen, indem Sie eine Abhängigkeit mit 'require' einfügen.

package { 'supervisor':
    ensure => absent,
    require => Service["supervisor"],
}

service { 'supervisor':
    ensure     => stopped,
    enable     => false,
    hasstatus  => true,
}
Hayalci
quelle
Danke @hayalci. Ich denke, es sollte umgekehrt sein: Paket {'Supervisor': sicherstellen => nicht vorhanden,} Service {'Supervisor': sicherstellen => gestoppt, aktivieren => falsch, hasstatus => wahr, erfordern => Paket [" Supervisor "],} Ich erhalte jedoch immer noch Fehler, nur weniger.
Vpetersson