Criando um recurso apenas uma vez com o Puppet

2

Eu tenho uma classe que prepara arquivos de configuração e chaves dentro da pasta de arquivos fantoches para que eles possam ser baixados por outros nós. A classe será chamada uma vez para cada outro nó além do mestre de marionetes.

O problema que tenho é que eu só preciso criar o diretório raiz uma vez, por exemplo, com:

file { '/etc/puppet/files/root':
  ensure => directory
}

No entanto, isso resulta em um recurso duplicado quando começo a chamar a classe várias vezes.

Estou ciente de que eu poderia consertar isso simplesmente usando algo assim para dar um título de recurso exclusivo:

file { "create-parent-dir-for-${name}":
  path => '/etc/puppet/files/rootdir',
  ensure => directory
}

Mas parece errado criar muitos recursos adicionais para fazer a mesma coisa, por isso estou interessado em descobrir se existe uma solução alternativa.

    
por Philio 04.05.2014 / 11:18

2 respostas

2

Não tenho certeza se não há uma maneira melhor de resolver isso (algo como mover esse diretório comum para uma classe separada que só é chamada uma vez).

Mas, em qualquer caso, há a função stdlib ensure_resource ( link ) que faz exatamente isso.
Você chamaria assim nos dois lugares:

ensure_resource('file', '/etc/puppet/files/root', {'ensure' => 'directory' })

Como eu já disse, geralmente há maneiras melhores de resolver isso.
É difícil dizer se essa é uma boa solução para você sem ver o código completo.
Use com cuidado.

    
por 04.05.2014 / 12:23
5

Isso é o que recursos virtuais são para.

@file { "/etc/puppet/files/rootdir": ensure => directory }

Onde for necessário, perceba usando

realize(File["/etc/puppet/files/rootdir"])

ou

File<| title == "/etc/puppet/files/rootdir" |>

Como um aparte, as classes nunca produzirão erros de declaração duplicados. Você aparentemente declarou o arquivo dentro de um defined type . Você pode, de fato, contornar esse problema específico, fazendo o que Petter H sugeriu em seu comentário.

class files {
    file { "/etc/puppet/files/rootdir": ensure => directory }
}

define my_cool_type($param...) {
    include files
    ... # <- only stuff that is unique to this instance of my_cool_type
}
    
por 05.05.2014 / 18:12

Tags