Corrigindo serviços que foram desativados em / etc / default / with fantoche?


13

Estou usando o puppet para (teoricamente) obter o npcd para iniciar a instalação, no entanto, no Ubuntu, esse serviço vem instalado com a configuração padrão em / etc / default / npcd do 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"

Eu acho que esse bloco de configuração de fantoches cuidaria das coisas:

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

Mas, infelizmente, isso não acontece, e antes de realmente reescrever o arquivo em / etc / default, não tenho certeza do que fazer. Existe uma maneira simples de ativar o serviço que não estou vendo?

Para constar, estou usando o Ubuntu 12.04.2 e a versão fantoche 3.1.0.


Por que não reescrever /etc/default/npcdcom um filerecurso? O filedepende do package, e o servicedepende do file. Estou sempre desconfiado de editar arquivos via sedou augeasse posso evitá-lo.
Larsks

Respostas:


12

Atualizar o arquivo e reiniciar o serviço é a única maneira. Você pode enviar um novo arquivo por push e criar o serviço Exigir isso; Dessa forma, quando o conteúdo for atualizado, o serviço será iniciado corretamente.

Se você não deseja substituir completamente o arquivo, pode usar a ferramenta Augeas do Puppet para modificar apenas a linha única no arquivo padrão.

Existem alguns serviços no Debian e seus derivados que não iniciam automaticamente depois que o pacote é instalado, a menos que esteja ativado no / etc / default. Meio chato.

Edit: FYI, o script init está realmente lendo os valores desse arquivo (apenas fornecendo-o normalmente).


1
Interessante. Eu tenho a mente de registrar um bug. Se você definir "enable" como "true", faz sentido que ele ative o script (além de vários links simbólicos para executar níveis).
Matt Simmons

Eu acho que não há uma maneira fácil para o Puppet saber se um serviço precisaria ou não do arquivo "default" atualizado, para que eles não o incorporassem; pode ser mais fácil registrar um bug na distribuição. Eu duvido que você vai obter qualquer tração embora :-)
Lucas

use um tipo definido chamado algo como "defaulted_service", que possui um recurso de serviço, e também um recurso exec que atualiza o arquivo no local usando sed, se necessário, ou um recurso de arquivo que use augeas, até você.
Sirex

@MattSimmons As pessoas que fabricam esses pacotes devem usar os links simbólicos e update-rc.dativar / desativar o serviço, não /etc/default- não é uma maneira padrão de gerenciar serviços, por isso está fora de controle dos fantoches.
Shane Madden

8

No final das contas, verifiquei alguns dos daemons padrão nas minhas máquinas 12.04. Você precisa gerenciar o arquivo, não há como contorná-lo neste momento.

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

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

6

Eu acho que uma das maneiras viáveis ​​de fazer isso é usar a ferramenta augeas com fantoches, por exemplo

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

consulte o manual para obter detalhes


0

Eu uso sed para modificar o arquivo. Augeas parece um exagero.

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

Idéia retirada daqui:

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

Então, no seu caso

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

1
se você acha que augeas é um exagero, o fantoche também não é um exagero? :) Sua solução também está ok, mas você supõe que possui o arquivo e a necessidade de alinhar, e daí se ele não estiver lá? falhará sem lhe dizer nada. Acredito augeas é muito robusta, conveniente e purposefull que vale a pena instalação se você estiver usando fantoche
DukeLion

Meu exemplo foi do bootstrapping fantoche via cloud-init. Olhei para augeas e imediatamente decidi evitá-lo, se possível. Até agora, não precisei de augeas nem precisei inicializar outro serviço além do fantoche para iniciar = yes.
dmourati

Estou realmente curioso sobre o seu ponto de vista. Entendo seu ponto de vista, mas os augeas e o fantoche não usam a mesma ideologia de fornecer uma interface abstrata de alto nível para o gerenciamento unificado? Então, se você não gosta de augeas, como é que você gosta de marionetes? Por que não ansible então?
DukeLion

Eu acho que a melhor abordagem é editar arquivos de configuração de stub ou fragmentos, como no apache conf.d, sysctl.d, sudoers.d, etc. No caso mais simples, onde arquivos de configuração fragmentados com diretórios .d não existem, use sed / perl / qualquer coisa. Portanto, não há necessidade de augeas.
dmourati

0

Fazer isso com o augeastipo Puppet é uma maneira (como sugerido por @DukeLion).

Outra maneira é usar o augeasprovidersmódulo , com o shellvarprovedor:

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

Isso é melhor porque o Augeas será usado de maneira limpa pelo provedor Ruby. Ele também gerencia citações e comentários automaticamente.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.