Correction des services qui ont été désactivés dans / etc / default / avec marionnette?

13

J'utilise une marionnette pour (théoriquement) faire démarrer npcd lors de l'installation, mais sur Ubuntu, ce service est installé avec le paramètre par défaut dans / etc / default / npcd de RUN = "no":

 $ 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"

Je pense que ce bloc de configuration de marionnettes s'occuperait des choses:

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

Mais hélas, ce n'est pas le cas, et à moins de réécrire le fichier dans / etc / default, je ne sais pas quoi faire. Existe-t-il un moyen simple d'activer le service que je ne vois pas?

Pour mémoire, j'utilise Ubuntu 12.04.2 et la version marionnette 3.1.0.

Matt Simmons
la source
Pourquoi ne pas simplement réécrire /etc/default/npcdavec une fileressource? Le filedépend du package, et le servicedépend du file. J'ai toujours peur de modifier des fichiers via sedou augeassi je peux l'éviter.
larsks

Réponses:

12

La mise à jour de ce fichier, puis le redémarrage du service est le seul moyen. Vous pouvez pousser un nouveau fichier, puis rendre le service Exiger cela; de cette façon, lorsque le contenu est mis à jour, le service démarre correctement.

Si vous ne voulez pas remplacer entièrement le fichier, vous pouvez utiliser l'outil Puppet augeas pour simplement modifier la ligne unique dans le fichier par défaut.

Il y a quelques services dans Debian et ses dérivés qui ne démarrent pas automatiquement après l'installation du paquet à moins qu'il ne soit activé dans / etc / default. Un peu ennuyeux.

Edit: Pour info, le script init lit en fait les valeurs de ce fichier (il suffit de le trouver habituellement).

Luc
la source
1
Intéressant. J'ai envie de déposer un bug. Si vous définissez "enable" sur "true", cela n'a de sens que d'activer le script (en plus des différents liens symboliques pour exécuter les niveaux).
Matt Simmons
Je pense qu'il n'y a pas de moyen facile pour Puppet de savoir si un service aurait besoin que le fichier "par défaut" soit mis à jour pour qu'il n'ait pas intégré cela; pourrait être plus facile de déposer un bogue avec la distribution. Je doute cependant que vous obtiendrez une traction :-)
Luke
utilisez un type défini appelé quelque chose comme "defaulted_service" qui a une ressource de service, et aussi une ressource exec qui met à jour le fichier en place en utilisant sed si nécessaire, ou une ressource de fichier qui utilise augeas, jusqu'à vous.
Sirex
@MattSimmons Les personnes qui créent ces packages devraient utiliser les liens symboliques et update-rc.dpour activer / désactiver le service, pas /etc/default- ce n'est pas une façon standard de gérer les services, donc c'est hors du contrôle de la marionnette.
Shane Madden
8

Pour l'enfer, j'ai vérifié quelques-uns des démons standard sur mes machines 12.04. Vous devez gérer le fichier, aucun moyen de le contourner à ce stade.

snmpd

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

collecté

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

fantoche

# 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
la source
6

Je pense que l'un des moyens possibles de le faire est d'utiliser l'outil augeas avec une marionnette, par exemple

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

reportez-vous au manuel pour plus de détails

DukeLion
la source
0

J'utilise sed pour modifier le fichier. Augeas semble exagéré.

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

Idée tirée d'ici:

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

Donc, dans ton cas

sed -i /etc/default/npcd -e 's/RUN="no"/RUN="yes"/'
dmourati
la source
1
si vous pensez que les augeas sont une exagération, la marionnette n'est-elle pas une exagération aussi? :) Votre solution est également correcte, mais vous supposez que vous avez le fichier et que vous avez besoin de le mettre en ligne, alors si ce n'est pas le cas? il échouera sans rien vous dire. Je crois qu'augeas est tellement robuste, pratique et utile qu'il vaut la peine d'être installé si vous utilisez des marionnettes
DukeLion
Mon exemple vient de la marionnette d'amorçage via cloud-init. J'ai regardé les augeas et j'ai immédiatement décidé de l'éviter si possible. Jusqu'à présent, je n'ai pas eu besoin d'augeas ni de démarrer un autre service que marionnette pour commencer = oui.
dmourati
Je suis vraiment curieux de connaître votre point de vue. Je peux voir votre point, mais les augeas et les marionnettes n'utilisent-ils pas la même idéologie pour fournir une interface de haut niveau abstraite pour une gestion unifiée? Donc, si vous n'aimez pas les augeas, comment se fait-il que vous aimiez la marionnette? Pourquoi alors pas ansible?
DukeLion
Je pense que la meilleure approche consiste à éditer des fichiers de configuration de stub ou de fragment tels que dans apache conf.d, sysctl.d, sudoers.d, etc. Dans le cas le plus simple, où les fichiers de configuration fragmentés avec les répertoires .d n'existent pas, utilisez sed / perl / que ce soit. Il n'y a donc pas besoin d'augeas.
dmourati
0

Faire cela avec le augeastype dans Puppet est un moyen (comme suggéré par @DukeLion).

Une autre façon consiste à utiliser le augeasprovidersmodule , avec le shellvarfournisseur:

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

C'est mieux car Augeas sera utilisé proprement par le fournisseur Ruby. Il gérera également les devis et les commentaires automatiquement.

ℝaphink
la source