Execute o comando puppet exec somente se o arquivo de saída foi alterado

6

Estou usando um comando exec para executar um script de shell que modifica certos arquivos de configuração de outros pacotes. O comando exec é acionado sempre que parâmetros de entrada, como endereços IP, portas ou url são alterados, ou quando o próprio shell script é alterado.

Eu tenho que usar um script de shell porque os arquivos de configuração do pacote de software diferem ligeiramente entre os lançamentos. Acho que é mais fácil atualizar o arquivo de configuração por script sed em vez de fornecer modelos de fantoches diferentes para cada versão específica.

Mas esta configuração não detecta quando qualquer um dos arquivos de configuração foi modificado fora do fantoche. O Puppet não sabe sobre os arquivos que foram modificados pelo shell script.

O que estou procurando é uma maneira de tornar o comando exec dependente das somas de verificação de outros arquivos arbitrários:

exec { "my_command.sh":
  only_if_file_has_changed => [ 
    "/etc/mysoftware/config.xml", 
    "/etc/othersoftware/defaults", 
  ]
}

Isso é possível? Por favor, informe.

    
por nn4l 25.12.2014 / 11:54

2 respostas

8

Funcionaria assim:

exec { 'my_command.sh':
  command   => '/bin/my_command.sh',
  subscribe => [ 
    File['/etc/mysoftware/config.xml'], 
    File['/etc/othersoftware/defaults'], 
  ],
  refreshonly => true,
}

A restrição óbvia aqui é que os arquivos /etc/mysoftware/config.xml e /etc/othersoftware/defaults também devem ser alterados via Puppet.
Se eles forem alterados por outra coisa (externa a Puppet), veja a resposta de Felix.
Você também pode se inscrever em Package['xxx'] ou qualquer outra dependência mais adequada, é claro.

    
por 25.12.2014 / 12:05
6

O Puppet pode resolver isso por meio do seu meta-parâmetro auditoria .

file { [ "/etc/mysoftware/config.xml", 
         "/etc/othersoftware/defaults" ]:
    audit => 'content',
    notify => Exec['my_command'],
}
    
por 27.12.2014 / 14:44

Tags