Как включить модуль с параметрами при наследовании узла по умолчанию. Является ли это возможным?
На данный момент я удалил «наследует по умолчанию» и изменил его на node server123 { //include that //include this }
. Но затем всякий раз, когда я делаю изменения по умолчанию, мне придется сделать то же изменение в узле server123
.
Интересно, стоит ли мне изменить модуль ntp, чтобы обойти это?
Файл: manifest/nodes.pp
node default {
include ssh
include ntp
ruby::install { "1.2.3-456": }
nagios { "1.2.3-456": }
}
node 'server123' inherits default {
class { 'ntp': ntpserver => 'true' } -> duplicate class defined error.
## I want to define "$ntpserver = 'true'" here, so it doesn't inherit ntp client config.
## I've tried other methods too, but none of them work.
}
Файл: modules/ntp/init.pp
class ntp ($ntpserver = "false") {
//erb parameters
}
if $ntpserver == 'true' {
//case $OS
//code for ntpserver template
} else {
//case $OS
//code for ntp.conf template
}
Puppet 4 не поддерживает наследование узлов, однако вы переписываете свой код, используя классы "черт" (или напрямую используя class{'something':}
). Ваш пример можно переписать на:
class base_node {
include ssh
include ntp
ruby::install { "1.2.3-456": }
nagios { "1.2.3-456": }
}
node /^server\d+/ {
require base_node
}
Более интересное решение может использовать ваш собственный модуль, ничего сложного, просто modules/base/manifests/linux.pp
:
class base::linux {
...
}
Еще более сложные правила можно создать с помощью Hiera, где определение узла очень простое:
node /^server\d+/ {
hiera_include('classes')
}
а остальная логика находится в иерархии YAML:
# common.yaml
---
classes:
- ntp
# Debian.yaml
---
classes:
- base::linux
- localrepos::apt
предполагая некоторую иерархию в hiera.yaml
:
:hierarchy:
- "%{::fqdn}"
- "%{::osfamily}"
- common