Módulos diferentes de fantoches com um recurso comum

7

Estou escrevendo módulos específicos para os diferentes papéis dos meus servidores. Então eu tenho um fantoche e um painel de fantoche -Módulo. O módulo puppet garante que o fantoche esteja instalado corretamente. O painel de fantoches faz o mesmo para o painel de fantoches, claro.

Ambos os módulos precisam do puppetlabs apt source (por exemplo, estou usando o link ). Então eu tenho o seguinte recurso definido em puppet e puppet-dashboard -module:

    apt::source { "puppetlabs":
      location          => "http://apt.puppetlabs.com",
      release           => "squeeze",
      repos             => "main",
      required_packages => true,
      include_src       => false,
      key               => "4BD6EC30",
      key_server        => "pgp.mit.edu",
    }

Agora recebo o seguinte erro no meu agente:

err: Could not retrieve catalog from remote server: Error 400 on SERVER: Duplicate declaration: Apt::Source[puppetlabs] is already declared in file /etc/puppet/modules/puppet/manifests/base.pp at line 27; cannot redeclare at /etc/puppet/modules/puppet-dashboard/manifests/init.pp:42 on node server123

Os módulos particulares são independentes uns dos outros. Portanto, acho que é correto definir a dependência desta fonte apt separadamente em cada módulo.

Uma alternativa seria renomear uma fonte de puppetlabs para puppetlabs2 ou sth. Curtiu isso. Mas deve haver outra solução.

Estou curioso sobre suas respostas!

    
por MMore 02.05.2012 / 18:24

2 respostas

4

Sempre que tenho esse problema (particularmente comum com pacotes), coloco o recurso em uma classe, por si só:

class git {
    package { 'git': ensure => installed, }
}

Depois, incluo a classe em vez de definir o recurso.

Próximo problema: mas eles são usados por diferentes módulos! Sim, coloque-os em common ou em algum outro módulo comum específico de módulo (digamos, puppet-common ).

    
por 02.05.2012 / 21:02
2

Existem várias maneiras de resolver isso. Eu pessoalmente dividi sua fonte apt em uma classe separada e então usei uma inclusão ou herança (dependendo da situação) para colocar essa classe onde você precisa.

    
por 02.05.2012 / 18:44

Tags