Como gerar arquivo usando script usando fantoche

1

Eu tenho o seguinte recurso:

exec{'regen-nagios-hosts':
  command     => '/usr/local/bin/generate-nagios-host-definitions-from-hostfile < /etc/hosts > /etc/nagios3/conf.d/sv-hosts.cfg',
  user        => 'root',
  before      => Class['nagios::server'],
  notify      => Service['nagios3'],
  require     => File['/etc/hosts'],
}

O ideal seria reiniciar o Nagios somente se o arquivo fosse alterado. Parece que o que eu realmente quero é um recurso de arquivo, mas os recursos de arquivo têm um modelo ou o conteúdo real, não um script. Como posso gerar o arquivo (ou alterar meu método) para reiniciar o Nagios somente quando /etc/nagios3/conf.d/sv-hosts.cfg muda?

    
por François Beausoleil 16.08.2012 / 05:20

2 respostas

2

Supondo que cada vez que seu script for executado, ele gerará o arquivo exatamente da mesma maneira para um determinado arquivo de hosts. Você pode fazer um pequeno ajuste.

# generate the file into some arbitrary location, that is not actually referenced by nagios
exec{'regen-nagios-hosts':
  command     => '/usr/local/bin/generate-nagios-host-definitions-from-hostfile < /etc/hosts > /etc/nagios3/generatedtmpsv-hosts.cfg',
  user        => 'root',
  before      => Class['nagios::server'],
  require     => File['/etc/hosts'],
}

# have a file resource use the generated file to update the production file
# the update will only happen when the checksums have changed
# on update notify the service to restart.
file { '/etc/nagios3/conf.d/sv-hosts.cfg'':
  ensure => present,
  source => '/etc/nagios3/generatedtmp/sv-hosts.cfg'
  require => Exec['regen-nagios-hosts'],
  notify => Service['nagios3'],
}

A longo prazo, talvez seja melhor tentar encontrar maneiras de converter seu script em um modelo. Ou encontre alguma outra maneira que se encaixe melhor no modo de fazer as coisas dos fantoches.

    
por 16.08.2012 / 06:30
0

O problema com a sua definição de exec é que ela alterará / atualizará o arquivo, independentemente de o conteúdo ter sido realmente alterado. Veja a onlyif na especificação typedef

Se eu fosse você, geraria o arquivo sv-hosts.cfg em um arquivo temporário e o compararia com o atual. Se houver algumas diferenças, basta copiar o arquivo tmp para o novo local e reiniciar os nagios.

Também dê uma olhada na documentação de referência do tipo , porque há muitos nagios específicos tipos e talvez um deles vai fazer o truque para você:)

    
por 16.08.2012 / 06:37

Tags