Я пытаюсь понять, как работает иерархия Puppet.
Мой марионеточный сервер hiera.yaml
выглядит так:
[root@puppet puppet]# cat hiera.yaml
:backends:
- yaml
:yaml:
:datadir: '/etc/puppet/hieradata/%{::environment}'
:hierarchy:
- fqdns/%{::fqdn}
- roles/%{::role}
- domains/%{::domain}
- common
Есть модули, которые я хочу, чтобы все серверы были, поэтому я поместил их в common.yaml
файл, и есть модули для конкретных ролей, которые включены в каждый role.yaml
файл.
Когда запускается сервер, который соответствует роли в Puppet, модули из role.yaml
файл загружается первым. Мой вопрос: как только серверу соответствует роль ... остановится ли он на этом? или он продолжит иерархию и загрузит модули под common.yaml
также?
Если нет, как я могу убедиться, что он будет вести себя именно так?
Изменить № 1: вот пример одного из role.yaml
файлы:
[root@puppet roles]# cat dataorigin.yaml
classes:
- workspace
jdk_enable: true
jdk_ver: 1.6.0_41
component_ver: 1-1-5-17
tomcat_enable: true
debug_mode: true
fstab_params:
mount1:
mnt_src: "isilonnj01.eyedcny.local:/ifs/Peer39/do_share"
mnt_dest: "/doshare"
mnt_opts: "tcp,hard,intr,noatime"
mnt_dest_parent: ""
И сервер site.pp
выглядит так:
hiera_include("classes", [])
Package { allow_virtual => false, }
node default {
include stdlib
}
Изменить № 2: Вот пример модуля motd:
include stdlib
class motd {
file { "/etc/custom_motd.sh":
path => '/etc/custom_motd.sh',
ensure => present,
owner => "root",
group => "root",
mode => "775",
content => template('motd/custom_motd.sh.erb'),
#require => Class['nagios_client'],
}
file_line { 'enable motd':
ensure => present,
line => '/etc/custom_motd.sh',
path => '/etc/profile',
require => File['/etc/custom_motd.sh']
}
}
В motd module
настроен в common.yaml
файл, а в role.yaml
В файле есть модуль, называемый рабочей областью. Как я могу сказать Puppet, что нужно загрузить motd module
из common.yaml
файл?
Hiera - это инструмент для поиска данные. Вы даете ему ключевое имя, и он просматривает свои файлы данных и возвращает первое совпадение (которое должно быть наиболее конкретным), с которым он сталкивается, перемещаясь вниз по своей иерархии.
Использование в марионетке, у вас есть больше вариантов, что делать, если для ключа более одного значения:
hiera Standard priority lookup. Gets the most specific value for a given key. This can retrieve values of any data type (strings, arrays, hashes) from Hiera. hiera_array Uses an array merge lookup. Gets all of the string or array values in the hierarchy for a given key, then flattens them into a single array of unique values. hiera_hash Uses a hash merge lookup. Expects every value in the hierarchy for a given key to be a hash, and merges the top-level keys in each hash into a single hash. Note that this does not do a deep-merge in the case of nested structures.
С помощью hiera
как ENC для загрузки модулей работает как этот (Курсив добавлен):
Обратите внимание, что hiera_include функция использует поиск слияния массивов для получения массива классов; это означает, что каждый узел получит каждый класс из своей иерархии.
Итак, если вы следовали документации и использовали hiera_include
, будут загружены все классы, указанные вами в иерархии узла.
В вашем примере, предполагая role=dataorigin
, и это common.yaml
выглядит так:
---
classes:
- a
Ваш site.pp вызовет модули workspace
, stdlib
и a
быть назначенным запрашивающему узлу.