Марионетка: Как иерархия работает, если роль подобрана?

Я пытаюсь понять, как делает Марионеточные работы иерархии.

Мой Марионеточный сервер 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 файл?

2
задан 13 April 2015 в 11:06
1 ответ

Hiera - это инструмент для поиска данных . Вы даете ему ключевое имя, и он просматривает свои файлы данных и возвращает первое совпадение (которое должно быть наиболее конкретным), которое приходит, перемещаясь вниз по его иерархии.

Используя его в марионетке , вы есть больше вариантов, что делать, если для ключа несколько значений:

 hiera
  Стандартный приоритетный поиск.  Получает наиболее конкретное значение для данного ключа.
  Это может извлекать значения любого типа данных (строки, массивы, хеши)
  из Хиеры.
hiera_array
  Использует поиск слияния массивов.  Получает все значения строки или массива
  в иерархии для данного ключа, затем объединяет их в один
  массив уникальных значений.
hiera_hash
  Использует поиск слияния хэшей.  Ожидает каждое значение в иерархии для
  заданный ключ является хешем и объединяет ключи верхнего уровня в каждом
  хеш в один хеш.  Обратите внимание, что это не делает глубокое слияние
  в случае вложенных структур.
 

Использование hiera в качестве ENC для загрузки модулей работает как это (выделено):

Обратите внимание, что функция hiera_include использует поиск слияния массивов получить массив классов; это означает, что каждый узел получит каждый класс из своей иерархии.

Итак, если вы следовали документации и использовали hiera_include , все классы, указанные вами в иерархии для узла, будут загружены .

В вашем примере предполагается, что role = dataorigin , и что common.yaml выглядит так:

---
classes:
 - a

Ваш site.pp вызовет рабочую область модулей , stdlib и a для назначения запрашивающему узлу.

2
ответ дан 3 December 2019 в 11:38

Теги

Похожие вопросы