Servizi di riparazione che sono stati disabilitati in / etc / default / with puppet?


13

Sto usando Puppet per (teoricamente) ottenere npcd per iniziare dopo l'installazione, tuttavia su Ubuntu, quel servizio viene installato con l'impostazione predefinita in / etc / default / npcd di 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"

Penserei che questo blocco di configurazione delle marionette si occuperebbe delle cose:

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

Ma purtroppo non lo è, e a meno di riscrivere il file in / etc / default, non sono sicuro di cosa fare. Esiste un modo semplice per abilitare il servizio che non vedo?

Per la cronaca, sto usando Ubuntu 12.04.2 e la versione fantoccio 3.1.0.


Perché non riscrivere semplicemente /etc/default/npcdcon una filerisorsa? La filedipende dalla package, e il servicedipende dalla file. Sono sempre diffidente di modificare i file tramite sedo augeasse posso evitarlo.
Larsks,

Risposte:


12

L'aggiornamento di quel file e il riavvio del servizio è l'unico modo. È possibile inviare un nuovo file e quindi rendere necessario il servizio; in questo modo quando i contenuti vengono aggiornati il ​​servizio verrà avviato correttamente.

Se non si desidera sostituire completamente il file, è possibile utilizzare lo strumento Puppet augeas per modificare semplicemente la singola riga nel file delle impostazioni predefinite.

Ci sono alcuni servizi in Debian e suoi derivati ​​che non si avviano automaticamente dopo l'installazione del pacchetto a meno che non sia abilitato in / etc / default. Un po 'fastidioso.

Modifica: Cordiali saluti lo script init in realtà sta leggendo i valori da quel file (solo di solito lo approvvigionamento).


1
Interessante. Ho in mente di presentare un bug. Se si imposta "abilita" su "vero", ha senso solo abilitare lo script (oltre a tutti i vari collegamenti simbolici per eseguire i livelli).
Matt Simmons,

Penso che non ci sia modo semplice per Puppet di sapere se un servizio avrebbe bisogno del file "default" aggiornato in modo che non lo abbia inserito; potrebbe essere più facile presentare un bug con la distribuzione. Dubito che otterrai comunque una trazione :-)
Luca

usa un tipo definito chiamato qualcosa come "defaulted_service" che ha una risorsa di servizio, e anche una risorsa exec che aggiorna il file in atto usando sed se necessario, o una risorsa di file che usa augeas, fino a te.
Sirex,

@MattSimmons Le persone che creano questi pacchetti dovrebbero usare i collegamenti simbolici e update-rc.dper abilitare / disabilitare il servizio, non /etc/default- non è un modo standard per gestire i servizi, quindi è fuori dal controllo delle marionette.
Shane Madden

8

Per l'inferno ho controllato alcuni dei demoni standard sulle mie macchine 12.04. Devi gestire il file, in questo momento non c'è modo di aggirarlo.

snmpd

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

collectd

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

fantoccio

# 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

6

Penso che uno dei modi possibili per farlo sia usare lo strumento augeas con il burattino, ad es

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

fare riferimento al manuale per i dettagli


0

Uso sed per modificare il file. Augeas sembra eccessivo.

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

Idea presa da qui:

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

Quindi, nel tuo caso

sed -i /etc/default/npcd -e 's/RUN="no"/RUN="yes"/'

1
se pensi che agosto sia eccessivo, anche il burattino non è eccessivo? :) Anche la tua soluzione è ok, ma pensi che tu abbia il file e che sia necessario allinearlo, quindi se non fosse lì? fallirà senza dirti nulla. Credo che agosto sia così robusto, conveniente e propositivo che vale la pena installarlo se stai usando un pupazzo
DukeLion

Il mio esempio è stato dal bootstrap di marionette tramite cloud-init. Ho guardato ad agosto e ho deciso immediatamente di evitarlo, se possibile. Finora non ho avuto bisogno di agosto né ho dovuto avviare un altro servizio oltre al pupazzo per iniziare = sì.
dmourati,

Sono davvero curioso del tuo punto di vista. Posso capire il tuo punto, ma August e Puppet non usano la stessa ideologia di fornire un'interfaccia astratta di alto livello per la gestione unificata? Quindi se non ti piace August come mai ti piacciono le marionette? Perché non rispondere allora?
DukeLion il

Penso che l'approccio migliore sia la modifica di file di configurazione di stub o frammenti come in apache conf.d, sysctl.d, sudoers.d, ecc. Cercare di farsi strada attraverso altri file di configurazione non mi attira. Nel caso più semplice, in cui non esistono file di configurazione frammentati con directory .d, utilizzare sed / perl / qualunque cosa. Quindi non c'è bisogno di agosto.
dmourati,

0

Fare questo con il augeastipo in Puppet è un modo (come suggerito da @DukeLion).

Un altro modo è utilizzare il augeasprovidersmodulo , con il shellvarprovider:

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

Questo è meglio perché Augeas verrà utilizzato in modo pulito dal provider Ruby. Gestirà inoltre preventivi e commenti automaticamente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.