O Puppet pode executar um script de shell (que é baixado do mestre) sem salvá-lo?

7

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?

    
por smitelli 16.01.2015 / 19:42

4 respostas

3

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.

    
por 19.01.2015 / 14:29
2

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,
    
por 16.01.2015 / 20:35
2

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
    
por 13.02.2015 / 20:59
1

Você pode executar o comando a partir do modelo:

exec { 'my-command':
     command     => template('template-for-my-command.erb')
}
    
por 05.07.2017 / 10:27

Tags