Como sobrescrever os argumentos da classe puppet no nó filho?

3

Estou tentando realizar algo como o abaixo:

node 'basenode' {
    class {
        'puppet' :
         disable => false,
    }
}
node 'child' inherits 'basenode' {
class {
        'puppet' :
         disable => true,
    }
}

Isso me dá:

err: Could not retrieve catalog from remote server: Error 400 on SERVER: Duplicate definition: Class[Puppet] is already defined

Como posso substituir essa configuração para esse nó único e ainda ter uma classe com parâmetros?

    
por Jon Skarpeteig 06.06.2012 / 14:15

2 respostas

2

Acontece que este é um problema conhecido: link

    
por 06.06.2012 / 15:11
1

Geralmente, não é um bom design fazer herança de nó como esta. Crie uma camada abstrata de "papéis" em um arquivo diferente em /etc/puppet/manifests/roles.pp . E, em seguida, passar parâmetros para essas classes.

site.pp

import "roles.pp"
import "nodes.pp"

nodes.pp

node 'webserver1' {
    class{"role::webserver":}
}

node 'webserver2' {
    class{"role::webserver":
        do_stuff => false,
    }
}

node 'db' {
    class{"role::db":}
}

roles.pp

class role($do_stuff) {
    class{'foo': do_stuff => $do_stuff,}
}

class role::webserver($do_stuff=true) {
    class{'role':
        do_stuff => $do_stuff,
    }

    class{'apache':
        other_stuff => 'foo',
    }
}

class role::webserver($do_stuff=true) {
    class{'role': do_stuff => $do_stuff,}
    class{'apache': other_stuff => 'foo',}
}

class role::db($do_stuff=true) {
    class{'role': do_stuff => $do_stuff,}
    class{'postgres': other_stuff => 'foo',}
}
    
por 08.06.2012 / 23:35