Verificando a configuração do exim gerado por puppet antes de implantar

4

Eu uso o Puppet para gerar /etc/exim4.conf e quero ter certeza de que a configuração é válida antes de instalar o arquivo em sistemas de produção.

Eu considerei -

  • usando um gancho git para chamar exim4 -bV -C filename ... mas isso não funcionará porque eu uso um modelo ERB para gerar o arquivo, então o resultado final não é realmente gerado até que o agente Puppet seja executado. Eu já tenho um gancho git para testar a sintaxe do ERB.

  • permitindo que o script de inicialização verifique o arquivo de configuração ... mas isso não é suficiente porque, embora o script se recuse a recarregar o Exim se a configuração for inválida, o arquivo será já foram instaladas e chamadas diretas para o Exim (para enviar e-mails de aplicativos, por exemplo) falharão.

Idealmente, o que eu quero é algum tipo de diretiva Puppet que se pareça com

file { '/etc/exim4/exim4.conf':
    content => template("exim/etc/exim4/exim4.conf.erb"),
    notify => Service[exim4],
    but_before_we_install_check_syntax_with => '/usr/bin/exim4 -bV -C',
}

Como posso verificar a sintaxe do arquivo de configuração depois que foi gerado pelo Puppet mas antes ser instalado?

Estou usando o Exim 4.80 e o Puppet 2.7.26 nos sistemas Debian Wheezy.

    
por Flup 24.04.2015 / 12:09

3 respostas

4

Parece que você está descrevendo o parâmetro validate_cmd exatamente. A partir da referência do tipo de marionete para file :

A command for validating the file’s syntax before replacing it. If Puppet would need to rewrite a file due to new source or content, it will check the new content’s validity first. If validation fails, the file resource will fail.

This command must have a fully qualified path, and should contain a percent (%) token where it would expect an input file. It must exit 0 if the syntax is correct, and non-zero otherwise. The command will be run on the target system while applying the catalog, not on the puppet master.

No seu exemplo, acho que você faria isso:

file { '/etc/exim4/exim4.conf':
    content      => template("exim/etc/exim4/exim4.conf.erb"),
    notify       => Service[exim4],
    validate_cmd => '/usr/bin/exim4 -bV -C %',
}
    
por 24.04.2015 / 17:26
2

Você poderia testar a configuração resultante usando um gancho git para acionar uma máquina virtual / contêiner (o Docker seria ideal para isso) e aplicar o manifesto nesse ambiente.

Se você está fazendo isso regularmente, você pode considerar a implementação de um sistema de IC (como o Jenkins ) para o qual você envia as alterações. O CI executa um conjunto de testes e, com sucesso, transfere as alterações para a produção.

    
por 24.04.2015 / 12:14
0

Eu provavelmente só criaria três tarefas que dependessem uma da outra: -

  • Gere o arquivo .conf em / tmp
  • Teste gerado .conf
  • Mova o arquivo .conf e notifique o serviço

Existe alguma razão para que isso não funcione nesse caso?

    
por 24.04.2015 / 13:48

Tags