Доброго времени суток.
Сабж. Есть конфиг 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'ем, если не переопределено в потомке?