Beheben von Diensten, die in / etc / default / with puppet deaktiviert wurden?

13

Ich verwende puppet, um npcd (theoretisch) zum Starten bei der Installation zu bringen. Unter Ubuntu wird dieser Dienst jedoch mit der Standardeinstellung in / etc / default / npcd von RUN = "no" installiert:

 $ cat /etc/default/npcd 
 # Default settings for the NPCD init script.

 # Should NPCD be started? ("yes" to enable)
 RUN="no"

 # Additional options that are passed to the daemon.
 DAEMON_OPTS="-d -f /etc/pnp4nagios/npcd.cfg"

Ich würde denken, dass dieser Block der Marionettenkonfiguration sich um Dinge kümmern würde:

    service { "npcd":
       enable   => true,
       ensure   => "running",
       require  => Package["pnp4nagios"],
    }   

Aber leider nicht, und nachdem ich die Datei in / etc / default neu geschrieben habe, bin ich mir nicht sicher, was ich tun soll. Gibt es eine einfache Möglichkeit, den Dienst zu aktivieren, den ich nicht sehe?

Für die Aufzeichnung verwende ich Ubuntu 12.04.2 und Puppet Version 3.1.0.

Matt Simmons
quelle
Warum nicht einfach /etc/default/npcdmit einer fileRessource umschreiben ? Das filehängt vom ab package, und das servicehängt vom ab file. Ich bin immer misstrauisch, Dateien über zu bearbeiten sedoder augeaswenn ich es vermeiden kann.
Larsks

Antworten:

12

Das Aktualisieren dieser Datei und der anschließende Neustart des Dienstes ist die einzige Möglichkeit. Sie können eine neue Datei pushen und dann den Dienst dazu bringen, dies zu erfordern. Auf diese Weise wird der Dienst ordnungsgemäß gestartet, wenn der Inhalt aktualisiert wird.

Wenn Sie die Datei nicht vollständig ersetzen möchten, können Sie das Puppet augeas-Tool verwenden, um nur die einzelne Zeile in der Standarddatei zu ändern.

Es gibt einige Dienste in Debian und seinen Derivaten, die nach der Installation des Pakets nicht automatisch gestartet werden, es sei denn, sie sind in / etc / default aktiviert. Irgendwie nervig.

Bearbeiten: Zu Ihrer Information, das Init-Skript liest tatsächlich die Werte aus dieser Datei (bezieht sie normalerweise nur aus der Quelle).

Luke
quelle
1
Interessant. Ich möchte einen Fehler melden. Wenn Sie "enable" auf "true" setzen, ist es nur sinnvoll, dass das Skript tatsächlich aktiviert wird (zusätzlich zu verschiedenen Symlinks, um Ebenen auszuführen).
Matt Simmons
Ich denke, es gibt keine einfache Möglichkeit für Puppet zu wissen, ob für einen Dienst die "Defaults" -Datei aktualisiert werden muss oder nicht, damit sie das nicht eingebrannt haben. Möglicherweise ist es einfacher, einen Fehler in der Distribution zu melden. Ich bezweifle jedoch, dass du Traktion bekommst :-)
Luke
Verwenden Sie einen definierten Typ mit dem Namen "defaulted_service", der über eine Service-Ressource verfügt, und eine Exec-Ressource, die die Datei bei Bedarf mit sed aktualisiert, oder eine Dateiressource, die augeas verwendet.
Sirex
@MattSimmons Die Leute, die diese Pakete erstellen, sollten die Symlinks und update-rc.dzum Aktivieren / Deaktivieren des Dienstes verwenden, nicht /etc/default- es ist keine Standardmethode zum Verwalten von Diensten, daher liegt dies außerhalb der Kontrolle von Marionetten.
Shane Madden
8

Zum Teufel habe ich ein paar der Standard-Daemons auf meinen 12.04-Maschinen überprüft. Sie müssen die Datei verwalten, um sie zu diesem Zeitpunkt nicht zu umgehen.

snmpd

# snmpd control (yes means start daemon).
SNMPDRUN=yes

gesammelt

# 0: start collectd on boot, 1: do not start collectd on boot
# default: 0
DISABLE=0

Marionette

# Start puppet on boot?
START=yes

mdadm

# START_DAEMON:
#   should mdadm start the MD monitoring daemon during boot?
START_DAEMON=true

Haproxy

# Set ENABLED to 1 if you want the init script to start haproxy.
ENABLED=1
kashani
quelle
6

Ich denke, eine der möglichen Möglichkeiten, dies zu tun, ist die Verwendung eines Augeas-Werkzeugs mit einer Marionette, z

augeas { "npcd_default":
  changes => [
    "set /files/etc/default/npcd/Run yes",
  ],
}

Einzelheiten finden Sie im Handbuch

DukeLion
quelle
0

Ich benutze sed, um die Datei zu ändern. Augeas scheint übertrieben.

sed -i /etc/default/puppet -e 's/START=no/START=yes/'

Idee von hier übernommen:

http://www.codelord.net/2010/12/19/ using-puppet-to-automatically-configure-new-ec2-instances/

Also, in deinem Fall

sed -i /etc/default/npcd -e 's/RUN="no"/RUN="yes"/'
dmourati
quelle
1
Wenn du denkst, dass Augeas ein Overkill ist, ist Puppet dann auch ein Overkill? :) Ihre Lösung ist auch in Ordnung, aber Sie gehen davon aus, dass Sie die Datei haben und sie benötigen. Was ist, wenn sie nicht vorhanden ist? es wird einfach scheitern, ohne dir etwas zu sagen. Ich glaube, Augeas ist so robust, praktisch und zweckmäßig, dass es sich lohnt, ihn zu installieren, wenn Sie eine Marionette verwenden
DukeLion
Mein Beispiel war Bootstrapping Puppet via Cloud-Init. Ich sah mir Augeas an und beschloss sofort, es zu vermeiden, wenn es überhaupt möglich war. Bisher brauchte ich weder augeas noch musste ich einen anderen Dienst als puppet booten, um zu starten = yes.
Dmourati
Ich bin sehr gespannt auf Ihre Sichtweise. Ich verstehe Ihren Standpunkt, aber nicht, dass Augeas und Puppet dieselbe Ideologie der Bereitstellung einer abstrakten Benutzeroberfläche auf oberster Ebene für ein einheitliches Management verwenden? Also, wenn Sie Augeas nicht mögen, wie kommt es, dass Sie Marionette mögen? Warum dann nicht einsehbar?
DukeLion
Ich denke, der bessere Ansatz ist die Bearbeitung von Stub- oder Fragmentkonfigurationsdateien wie in apache conf.d, sysctl.d, sudoers.d usw. Der Versuch, sich durch andere Konfigurationsdateien zu arbeiten, spricht mich einfach an. Verwenden Sie im einfachsten Fall, in dem fragmentierte Konfigurationsdateien mit .d-Verzeichnissen nicht vorhanden sind, sed / perl / whatever. Daher sind keine Augeas erforderlich.
Dmourati
0

Dies mit dem augeasTyp in Puppet zu tun, ist eine Möglichkeit (wie von @DukeLion vorgeschlagen).

Eine andere Möglichkeit besteht darin, das augeasprovidersModul zusammen mit dem shellvarAnbieter zu verwenden:

shellvar { 'npcd_default':
  ensure   => present,
  target   => '/etc/default/npcd',
  variable => 'RUN',
  value    => 'yes',
  comment  => 'We want npcd to run',
}

Dies ist besser, da Augeas vom Ruby-Anbieter sauber verwendet wird. Es wird auch das Zitieren und Kommentieren automatisch verwalten.

ℝaphink
quelle