Puppet 3.0: eu deveria ser capaz de invocar um módulo de uma subclasse de outro módulo?

1

Eu tenho um módulo chamado drbd , que eu preciso usar em outro módulo chamado hacluster . Inicialmente eu pensei em segregar as coisas do drbd em sua própria classe assim:

modules/drbd/[stuff]                # this is the DRBD module
modules/hacluster/manifests/init.pp # class hacluster { include hacluster::drbd }
modules/hacluster/manifests/drbd.pp # class hacluster::drbd

A classe hacluster::drbd instala e configura o DRBD assim:

class hacluster::drbd {
    class { 'drbd':
        service_ensure => undef,
        service_enable => false,
    }
    class { 'drbd::global_common':
        ...more stuff...
    }
    drbd::resource {'r0': ...stuff...}
    drbd::resource {'r1': ...stuff...}
}

... mas o Puppet não gosta de me chamar o módulo drbd de dentro da classe hacluster :: drbd:

Error: Could not retrieve catalog from remote server: Error 400 on SERVER: Duplicate declaration: Class[Hacluster::Drbd] is already declared; cannot redeclare on node mynode.blabla

Eu consertei isso renomeando minha classe de hacluster::drbd para hacluster::drbdx , mas ainda gostaria de saber se existe uma maneira de chamar um módulo de uma subclasse com o mesmo nome contido em um módulo diferente. Eu li a documentação, mas não consegui encontrar uma resposta definitiva.

    
por Luke404 25.01.2013 / 18:46

1 resposta

3

O Puppet está preferindo a classe dentro do namespace atual ( hacluster:: ), em vez de voltar para a raiz e resolver a partir daí. Há uma boa descrição na referência de idioma em namespaces e autoloading .

A solução é referenciar explicitamente o namespace de nível superior com :: antes do nome da classe:

class { '::drbd':
    service_ensure => undef,
    service_enable => false,
}
    
por 25.01.2013 / 19:21

Tags