puppet: ativar / desativar diretórios recursivos

2

então eu tenho um módulo de modificação básico que se aplica a todos os servidores gerenciados através do hiera. Um submódulo é chamado de "arquivos" e coloca os scripts em / usr / local / bin / de cada servidor. Por isso, percorre o diretório de arquivos e copia os arquivos correspondentes. Isso funciona bem se eu adicionar o módulo.

Agora eu quero fazer este módulo ser gerenciável via hiera via $ enabled = true | false. O problema é, ao definir a garantia = > ausente exclui o bin dir e imprime algumas mensagens de erro que ele não pode excluir os arquivos, aparentemente porque o bin dir já foi excluído. Então, o que eu quero é apenas excluir os arquivos e deixar a pasta bin em si.

Alguma idéia?

Eu deparei com esse bug antigo que parece descrever o mesmo problema que parece ter sido corrigido.

UPDATE: O objetivo é não referenciar todos os arquivos no manifesto. É por isso que eu quero usar recurse.

    files/
    files/devvm
    files/devvm/script1.sh
    files/devvm/live.sh
    files/devvm-tpl.dev
    files/devvm-tpl.dev/testscript2.pl
    files/common
    files/common/change_hostname.sh
    files/srvDC221
    files/srvDC221/wurst
class basemodifications::files (
     $enabled = "true",
 ) {

    file { 'usrlocalbin':
      ensure => $enabled ? {
        "true" => present,
        "false" => absent,
      },
      recurse => true,
      ignore => "*~",
      purge => true,
      owner => root,
      group => root,
      path => "/usr/local/bin/",
      #force => true, #will delete the bin directory
      sourceselect => all,
      source => ["puppet:///modules/tebasemod/common", "puppet:///modules/tebasemod/${::tecluster}", "puppet:///modules/tebasemod/${::fqdn}",]
    }

}
err: /File[/usr/local/bin/wurst]/ensure: change from absent to file failed: Could not set 'file on ensure: No such file or directory - /usr/local/bin/wurst.puppettmp_6753
    
por tommics 05.02.2014 / 14:55

1 resposta

1

Você quer garantir que um determinado conjunto de arquivos esteja presente ou ausente no diretório, certo? Você nunca quer que o Puppet exclua o diretório em si e todo o seu conteúdo? Então você precisa gerenciar os recursos individualmente em vez de recorrer. Algo como

file { '/usr/local/bin':
  ensure => directory,
  owner => root,
  group => root,
}

$scripts = ['/usr/local/bin/script1.sh', '/usr/local/bin/live.sh']

file { $scripts:
      ensure => $enabled ? {
        "true" => file,
        "false" => absent,
      },
  owner => root,
  group => root,
  require => File['/usr/local/bin'],
}

Como você precisa que os scripts variem entre os hosts, você pode definir $scripts em hiera em vez do manifesto.

    
por 06.02.2014 / 02:05