Я пытаюсь понять, как делает Марионеточные работы иерархии.
Мой Марионеточный сервер 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
файл.
Когда сервер, который соответствует роли в Марионетке, запускается, модули от 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
файл там является модулем, названным рабочей областью. Как я могу сказать Марионетке загружаться motd module
от common.yaml
файл?
Hiera - это инструмент для поиска данных . Вы даете ему ключевое имя, и он просматривает свои файлы данных и возвращает первое совпадение (которое должно быть наиболее конкретным), которое приходит, перемещаясь вниз по его иерархии.
Используя его в марионетке , вы есть больше вариантов, что делать, если для ключа несколько значений:
hiera Стандартный приоритетный поиск. Получает наиболее конкретное значение для данного ключа. Это может извлекать значения любого типа данных (строки, массивы, хеши) из Хиеры. hiera_array Использует поиск слияния массивов. Получает все значения строки или массива в иерархии для данного ключа, затем объединяет их в один массив уникальных значений. hiera_hash Использует поиск слияния хэшей. Ожидает каждое значение в иерархии для заданный ключ является хешем и объединяет ключи верхнего уровня в каждом хеш в один хеш. Обратите внимание, что это не делает глубокое слияние в случае вложенных структур.
Использование hiera
в качестве ENC для загрузки модулей работает как это (выделено):
Обратите внимание, что функция hiera_include использует поиск слияния массивов получить массив классов; это означает, что каждый узел получит каждый класс из своей иерархии.
Итак, если вы следовали документации и использовали hiera_include
, все классы, указанные вами в иерархии для узла, будут загружены .
В вашем примере предполагается, что role = dataorigin
, и что common.yaml
выглядит так:
---
classes:
- a
Ваш site.pp вызовет рабочую область модулей
, stdlib
и a
для назначения запрашивающему узлу.