У меня 80 узлов, на 78 нужен конкретный модуль, кроме 2.
[root@puppetmaster puppet]# cat hiera.yaml
:backends:
- yaml
:hierarchy:
- environment/%{::environment}/%{::hostname}
- environment/%{::environment}
- common
:logger: console
:yaml:
:datadir: '/etc/puppet/hieradata'
[root@puppetmaster puppet]# cat hieradata/common.yaml
---
classes:
- ldap
- motd
- ntp
- puppet-conf
[root@puppetmaster puppet]# cat hieradata/environment/tst/tst-01.yaml
---
classes:
- puppet-update
- public-keys
[root@puppetmaster puppet]#
я хочу все узлы должны иметь модуль ldap, за исключением серверов tst-01 и tst-02.
Как мне исключить этот модуль из этих двух серверов?
Решением было бы использовать 80 .yaml-файлов для всех узлов и добавить «-ldap» к 78 из этих .yaml-файлов, но это кажется плохим дизайном. Было бы чище исключить модули из унаследованного списка.
Вы можете использовать что-то подобное в своем nodes.pp
:
node default {
hiera_include('classes')
}
node /^tst-0(1|2)\.example\.com$/ inherits default {
}
node /.*example\.com$/ inherits default {
include ldap
}
Проблема в том, что hiera_include будет использовать классы со всех уровней (вероятно, использует hiera_array).
Вероятно, это сработает:
[root@puppetmaster puppet]# cat hieradata/common.yaml
---
classes:
- ldap
- motd
- ntp
- puppet-conf
[root@puppetmaster puppet]# cat hieradata/environment/tst/tst-01.yaml
---
classes:
- puppet-update
- public-keys
- motd
- ntp
- puppet-conf
В node-def:
class { hiera('classes'): }
Обратной стороной является то, что вам придется указать все классы в файле hiera для конкретного хоста, если вы переопределите значение по умолчанию.
Это помогает?