Назад | Перейти на главную страницу

марионетка исключить модуль

я создал базовый класс для всех серверов в марионетке,

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',
        }
}

и на nodes.pp я включаю этот класс для всех серверов, для одного из серверов я хочу включить этот класс, но исключить syslog::base.

любая идея, как это можно сделать ..

Попробуй это:

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 }
    }
    ...
}

Для сервера вы хотите исключить syslog::base:

node 'special' {
    include centos_base::no_syslog_base
}

и для всех остальных серверов:

node 'normal' {
    include centos_base
}

Превратите его в определение и укажите параметр, описывающий причина почему вы хотите исключить этот класс - это может быть потому, что это виртуальная машина, промежуточная среда или что-то еще.

Мне нравится решать такие проблемы, делая класс достаточно умным, чтобы знать, где его не следует запускать. Например, у меня есть класс, который следует запускать только на машинах с SSD; вместо того, чтобы делать много предварительной работы, чтобы определить, какие это были машины, и построить условные классы или создать определенный набор классов для включения для каждого именованного хоста, я написал настраиваемый факт Facter, чтобы определить, установлен ли на машине SSD (осматривая /sys/block/sd*/queue/rotational). Затем я написал класс как «if ($ has_ssd) {...». Таким образом, я могу включить его на любую машину, и он будет работать только в том случае, если должен работать.