É possível usar o Puppet para garantir que vários arquivos em um diretório estejam presentes sem definir todos eles?

7

Eu tenho centenas de servidores únicos que possuem arquivos de configuração diferentes que precisam estar presentes em um diretório. Cópias dos arquivos residem no mestre de marionetes.

Dentro de uma das minhas aulas, tenho um conjunto padrão de configurações que são sempre enviadas para o nó, assim:

file { "/etc/someprogram/config/000-default":
  ensure => "present",
  owner => "root",
  group => "root",
  mode =>  0764,
  source => "puppet:///modules/someprogram/000-default",
}

O que eu gostaria de ter é algo assim:

$filearray = directory listing of /etc/puppet/modules/someprogram/files/$fqdn
with each file as an element into array

$filearray.each(
file { "/etc/someprogram/config/$filename":
  ensure => "present",
  owner => "root",
  group => "root",
  mode =>  0764,
  source => "puppet:///modules/someprogram/files/$fqdn/$filename",
}
)

Eu não estou muito familiarizado com marionetes, mas tenho a impressão de que não há como fazer isso.

    
por Freshy 10.02.2014 / 23:35

3 respostas

8

Você pode fazer o que você está tentando com isso:

file { "/etc/someprogram/config":
    ensure => directory,
    recurse => remote,
    source => "puppet:///modules/someprogram/files/$fqdn"
    #Other options
}

Isto irá copiar todos os arquivos em $ fqdn para / etc / someprogram / config, sobrescrevendo se eles já existirem.

    
por 10.02.2014 / 23:47
3

Se você quiser definir vários arquivos em um diretório sem recursionar o diretório inteiro, você pode usar um array - assim:

$myfiles = [ "/my/dir/file1", "/my/dir/file2", ]
file { $myfiles:
    ensure => "present",
    owner  => "root",
    group  => "root",
    mode   =>  0644,
    source => "puppet:///modules/someprogram/$fqdn/$name",
}

Claro, com caminhos longos para "/ my / dir" ou muitos arquivos, ele ficaria um pouco pesado, então nesse caso seria melhor criar uma definição que incluísse o caminho do diretório e passasse a matriz de nomes de arquivos para ele.

    
por 11.02.2014 / 03:05
1

Aqui está um exemplo de como faço isso:

file {
        [
        '/sys/block/sda/queue/scheduler',
        '/sys/block/sdb/queue/scheduler',
        '/sys/block/sdc/queue/scheduler',
        '/sys/block/sdd/queue/scheduler',
        '/sys/block/sde/queue/scheduler',
        '/sys/block/sdf/queue/scheduler'
        ]:
  ensure  => 'file',
  content => 'deadline',
  group   => '0',
  mode    => '644',
  owner   => '0',
  type    => 'file',
}

No exemplo acima, estou atribuindo o agendador de E / S de prazo final a cada um dos discos em um determinado servidor por meio do Puppet.

    
por 19.03.2015 / 22:36