Como redefinir parâmetros na subclasse?

2

Estou tentando incluir o módulo de marionetes ( link ) no meu próprio módulo modelo comum. Mas apenas defina master => true para meu nó mestre. Mas estou recebendo este erro:

err: Could not retrieve catalog from remote server: Error 400 on SERVER: Only subclasses can override parameters at /etc/puppet/modules/template/manifests/puppetmaster.pp:5 on node puppet1.mydomain.com

Meu modelo comum se parece com:

class template::common {
  include ssh
  include user::infrastructure
  include user::system
  include packages::common
  class {
    'puppet' :
      puppet_server => 'puppet.mydomain.com',
  }
}

Isso está incluído em todos os meus nós (incluindo meu puppetmaster), que também inclui este modelo:

class template::puppetmaster inherits puppet {
  include mysql::server
  include myfirewall::defaults
  Class['puppet'] { master +> true }

Gostaria de ter apenas meu mestre de marionetes para instalar o bit mestre mais o agente (que já é herdado). Mas eu prefiro não ter que definir o recurso de marionete para cada nó apenas para que eu possa ter um recurso separado da mesma classe para o meu mestre de marionetes.

O que é uma boa maneira de contornar isso?

    
por Andy Shinn 11.09.2012 / 06:35

1 resposta

0

Responda à meta questão de como você faz isso funcionar. Se você estiver usando o Passenger para executar o seu mestre de marionetes, o que você deve fazer se tiver um sistema de qualquer tamanho, há uma solução simples para a loucura que é o módulo puppetlabs. Você simplesmente solta um novo arquivo chamado /etc/puppet/puppetmaster.conf e talvez alguns outros bits de configuração em um novo módulo chamado puppetmaster e também adiciona essa linha ao config.ru

ARGV << "--config=/etc/puppet/puppetmaster.conf"

Você pode usar um pouco da lógica dentro do módulo puppetlabs, mas pode ser mais simples simplesmente enviar um arquivo ou um modelo menos complexo se você não se importar em ter cada bit de configuração como parâmetro. Em seguida, inclua o puppetmaster nos nós que são mestres e você está pronto. Você também pode modificar os puppetlabs existentes para fazer o acima.

Enfrentando a pergunta original, Hiera pode ser a solução mais simples. Use isso no init.pp

$master                   = hiera('puppet_master','false'),

e, em seguida, defina puppet_master: true para as máquinas que precisam dele. Pessoalmente, minha preferência é pelo primeiro método.

    
por 12.09.2012 / 08:42

Tags