¿Arreglando servicios que han sido deshabilitados en / etc / default / with puppet?

13

Estoy usando puppet (teóricamente) para que npcd se inicie después de la instalación, sin embargo, en Ubuntu, ese servicio viene instalado con la configuración predeterminada en / 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"

Creo que este bloque de configuración de marionetas se encargaría de las cosas:

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

Pero, por desgracia, no lo hace, y salvo reescribir el archivo en / etc / default, no estoy seguro de qué hacer. ¿Existe una manera directa de habilitar el servicio que no estoy viendo?

Para el registro, estoy usando Ubuntu 12.04.2 y la versión de títeres 3.1.0.

Matt Simmons
fuente
¿Por qué no simplemente reescribir /etc/default/npcdcon un filerecurso? El filedepende del package, y el servicedepende del file. Siempre desconfío de editar archivos a través sedo augeassi puedo evitarlo.
larsks

Respuestas:

12

Actualizar ese archivo y luego reiniciar el servicio es la única forma. Puede insertar un nuevo archivo y luego hacer que el servicio lo requiera; de esa manera, cuando se actualicen los contenidos, el servicio se iniciará correctamente.

Si no desea reemplazar el archivo por completo, puede usar la herramienta Puppet augeas para modificar la línea única en el archivo predeterminado.

Hay algunos servicios en Debian y sus derivados que no se inician automáticamente después de instalar el paquete, a menos que esté habilitado en / etc / default. Un poco molesto.

Editar: FYI, el script de inicio en realidad está leyendo los valores de ese archivo (solo lo obtiene normalmente).

Luke
fuente
1
Interesante. Tengo la intención de presentar un error. Si configura "enable" en "true", solo tiene sentido que, de hecho, active el script (además de varios enlaces simbólicos para ejecutar niveles).
Matt Simmons
Creo que Puppet no tiene una manera fácil de saber si un servicio necesitaría o no la actualización de los archivos "predeterminados", por lo que no lo han incorporado; podría ser más fácil presentar un error con la distribución. Sin embargo, dudo que tenga alguna tracción :-)
Lucas
use un tipo definido llamado "servicio predeterminado" que tiene un recurso de servicio, y también un recurso ejecutivo que actualiza el archivo en su lugar usando sed si es necesario, o un recurso de archivo que usa augeas, depende de usted.
Sirex
@MattSimmons Las personas que hacen estos paquetes deberían estar usando los enlaces simbólicos y update-rc.dpara habilitar / deshabilitar el servicio, no, no /etc/defaultes una forma estándar de administrar los servicios, por lo que está fuera del control de Puppet.
Shane Madden
8

Por el simple hecho de que revisé algunos de los demonios estándar en mis máquinas 12.04. Tienes que administrar el archivo, no hay manera de evitarlo en este momento.

snmpd

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

coleccionar

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

marioneta

# 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
fuente
6

Creo que una de las formas factibles de hacerlo es usar la herramienta augeas con títeres, por ejemplo

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

consulte el manual para más detalles

DukeLion
fuente
0

Yo uso sed para modificar el archivo. Augeas parece exagerado.

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

Idea tomada de aquí:

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

Entonces, en tu caso

sed -i /etc/default/npcd -e 's/RUN="no"/RUN="yes"/'
dmourati
fuente
1
si crees que las augeas son una exageración, ¿no es una marioneta también una exageración? :) Su solución también está bien, pero asume que tiene el archivo y necesita alinearlo, ¿y si no está allí? simplemente fallará sin decirte nada. Creo que las augeas son tan robustas, convenientes y útiles que vale la pena instalarlas si está usando una marioneta
DukeLion
Mi ejemplo fue de bootstrapping puppet a través de cloud-init. Miré las augeas e inmediatamente decidí evitarlo si era posible. Hasta ahora no he necesitado augeas ni he necesitado arrancar otro servicio además del títere para comenzar = sí.
dmourati
Tengo mucha curiosidad sobre tu punto de vista. Puedo ver su punto de vista, pero ¿no son las augeas y los títeres los que usan la misma ideología de proporcionar una interfaz abstracta de nivel superior para la gestión unificada? Entonces, si no te gustan las augeas, ¿cómo es que te gustan las marionetas? ¿Por qué no ansible entonces?
DukeLion
Creo que el mejor enfoque es editar archivos de configuración de fragmentos o fragmentos como en apache conf.d, sysctl.d, sudoers.d, etc. Intentar abrirme paso a través de otros archivos de configuración me atrae. En el caso más simple, donde los archivos de configuración fragmentados con directorios .d no existen, use sed / perl / whatever. Por lo tanto, no hay necesidad de augeas.
dmourati
0

Hacer esto con el augeastipo en Puppet es una forma (como lo sugiere @DukeLion).

Otra forma es usar el augeasprovidersmódulo , con el shellvarproveedor:

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

Esto es mejor porque Augeas será utilizado limpiamente por el proveedor de Ruby. También gestionará las citas y comentarios automáticamente.

Phaphink
fuente