puppet exclude module

2

Eu criei uma classe base para todos os servidores no fantoche,

class centos_base {
        include chkconfig
        include hosts
        include inittab
        include nscd
        include nsswitch
        include ntp
        include puppet
        include syslog::base
        include ssh
#        include curp
        include security
        include sysctl
        include sudo
        include users
        include vim
        include yum
        include rpmforge
#       include vmware-tools

        import 'resolver'

        resolv_conf { default_resolver:
                domainname  => "domain.com",
                searchpath  => ['domain.com'],
                nameservers => ['x.x.x.y', 'x.x.y.y' ],
  }

        import 'nrpe'

        nrpe_conf { nrpe:
                                listen_address => $ipaddress,
                                nagios_address => 'xx.xx.xx.yy',
        }
}

e em nodes.pp, eu incluo esta classe para todos os servidores, para um dos servidores, eu quero incluir esta classe, mas excluir syslog::base .

alguma ideia de como isso pode ser feito.

    
por krisdigitx 29.09.2011 / 11:47

3 respostas

3

Tente isto:

class centos_base {
    define includer($exclude=false) {
        if !$exclude {
            include $name
        }
    }

    includer{ ["chkconfig", "hosts", ...: }

    class no_syslog_base inherits centos_base {
        Includer["syslog::base"] { exclude => true }
    }
    ...
}

Para o servidor que você deseja excluir syslog::base :

node 'special' {
    include centos_base::no_syslog_base
}

e para todos os outros servidores:

node 'normal' {
    include centos_base
}
    
por 29.09.2011 / 19:02
2

Transforme em um define e especifique um parâmetro que descreva o motivo porque você deseja excluir essa classe - pode ser porque é uma VM, ou um ambiente de preparação, ou o que for.

    
por 29.09.2011 / 11:51
0

A maneira que eu gosto de resolver este tipo de problema é tornando a turma inteligente o suficiente para saber onde ela não deve ser executada. Por exemplo, eu tenho uma classe que deve ser executada somente em máquinas que possuem um SSD; em vez de fazer muito trabalho inicial para definir quais máquinas eram essas e criar classes condicionais, ou criar um conjunto específico de classes para incluir para cada host nomeado, escrevi um fato personalizado do Facter para determinar se a máquina tinha um SSD instalado (inspecionando /sys/block/sd*/queue/rotational ). Então eu escrevi a classe como "if ($ has_ssd) {...". Dessa forma, posso incluí-lo em qualquer máquina e só será executado se for necessário.

    
por 15.10.2011 / 10:23