LINUX.ORG.RU
решено ФорумAdmin

puppet: как сделать аналог «абстрактных методов» ?


0

1

Доброго времени суток.

Сабж. Есть конфиг puppet для нескольких десятков тестовых машин, разбитых по нескольким сетям.

node cod1 {
    include packages
    include upd_pkg_db
    <и т.д.>
}

node cod1-vlan-dmz inherits cod1 {
    <...>
}
node 'test1.test.dc', 'test2.test.dc' inherits cod1-vlan-dmz {}

node cod1-vlan-srv inherits cod1 {
    <...>
}
node 'test3.test.dc', 'test4.test.dc' inherits cod1-vlan-srv {}

И нужно добавить настройки, например, файрвола, причём для всех каждой сети (vlan-srv и vlan-dmz) он свой, но в любой сети он должен быть. Если управление конфигурацией puppet доверять нескольким людям, наверняка кто-нибудь что-нибудь забудет и появится нода БЕЗ файрвола.

Вариант «вообще нет конфига ноды» легко ловится так:

node default  {
    notify { 'obsoleted':
        message => "host $hostname still assign to default node"
    }
}

А вот как быть, если появилась новая сеть, добавили конфиг cod1-vlan-prd, корректно унаследовали от него все новые ноды, но забыли в cod1-vlan-prd добавить файрфол?

Нужно что-то вроде «абстрактных методов» из ООП: в cod1 добавляем что-то «абстрактное», которое матерится notify'ем, если не переопределено в потомке?

★★★★★

примерно так:

define firewall_config($src, $abstract) {
    if ( $abstract == 'true' ){
        notify{ "abstract":
            message => "abstract member should be redefined!!"
        }
    } else {
        file{ 'fwconf':
            path => '/etc/sysconfig/iptables-config',
            source => $src
        }
    }
}
node cod1 {
    firewall_config{"fwconf":
        src => '',
        abstract => 'true'
    }
    <и т.д.>
}

node cod1-vlan-dmz inherits cod1 {
    Firewall_config ["fwconf"] {
        src => 'puppet:///fwconf-vlan-dmz',
        abstract => 'false'
    }
}

Пример показывает сабж, а не красивые и грамотные правила puppet, поэтому нечего намекать на необходимость проверки $operatingsystem

router ★★★★★
() автор топика
Ответ на: комментарий от router

Обратить внимание нужно на различия синтаксиса при определении ресурса и при изменении его параметров.

router ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.