Você pode tentar colocar seu file
em um estado de transição antes da execução. O estado final seria
ensure => absent
Este é material de corte de idade no momento da escrita. Sua milhagem pode variar.
Eu tenho um passo em um módulo Puppet que faz aproximadamente o seguinte para configurar algumas chaves de aplicativo:
file { '/root/setup_app_keys.sh':
ensure => file,
owner => 'root',
group => 'root',
mode => '0700',
source => 'puppet:///modules/app_module/setup_app_keys.sh',
}
exec { 'setup_app_keys':
unless => '/etc/pki/tls/private/app-foo.key',
command => '/root/setup_app_keys.sh',
user => 'root',
group => 'root',
}
O script setup_app_keys.sh
é um pouco longo demais para ser transformado em um one-liner (legível), então o salve no sistema de arquivos da máquina e execute-o de lá. Ele cria seus arquivos em /etc/pki...
e funciona bem o suficiente.
O mais irritante é que o shell script é basicamente uma coisa de uso único. Ele nunca deve ser executado novamente durante a vida útil da máquina e, ainda assim, deve permanecer no sistema de arquivos onde o Puppet a armazenou. Se ele for excluído, o Puppet o recria de forma útil.
Estou pensando que deve haver uma maneira de reescrever isso usando exec
exclusivamente, o que me permitirá baixar o script do mestre de fantoches quando necessário, executá-lo uma vez e, em seguida, descartar o script (ou não armazená-lo no primeiro lugar). Mas tudo que eu tentei foi da forma:
command => 'puppet:///modules/app_module/setup_app_keys.sh',
ou
command => 'curl http://__[various puppetmaster URLs]__ | sh',
e nenhuma das abordagens parece funcionar. Estou perguntando demais ou essa abordagem é falha?
Você pode tentar colocar seu file
em um estado de transição antes da execução. O estado final seria
ensure => absent
Este é material de corte de idade no momento da escrita. Sua milhagem pode variar.
você pode adicionar em seu 'exec'
require => File["/root/setup_app_keys.sh"],
refreshonly => true,
, só será executado novamente se você alterar o script
ou você pode adicionar em seu 'arquivo', após a última execução
ensure => purged,
para isso eu acho melhor você usar ansible ou coletivo, para esse tipo de coisa, eu uso ansible.
Para mais informações,
http://docs.ansible.com/intro_getting_started.html
Você pode executar o comando a partir do modelo:
exec { 'my-command':
command => template('template-for-my-command.erb')
}
Tags puppet