Марионетка Применение кукольных классов

У меня есть узел 1, на котором мое приложение будет развернуто с помощью марионетки. Я создал файл hiera (node1_application.yaml), в котором указаны все детали сервера, которые это приложение будет использовать, например

ldap_server = node2

mq_server = node3

Есть ли способ, которым в node.pp я даю только информацию node1, которая показывает, какой класс будет применяться на узле 1. Затем этот класс читает мой файл hiera и видит, что сервер ldap находится на узле 2, поэтому модуль ldap должен быть применен к узлу 2.

С помощью моего файла hiera следует динамически решить, какой класс следует применить к какому узлу. Возможно ли это сделать?

Я использую puppet enterprise, hiera, facter, puppetdb и mcollective.


person DD2607    schedule 09.02.2014    source источник


Ответы (5)


Думаю, лучше использовать hiera_include('classes')

Если у вас есть node01.example.com.yaml, вы можете написать что-то вроде этого:

---
classes:
  - base
  - ldap

Сейчас в node01.example.com.pp:

node 'node01.example.com' {
      hiera_include('classes')
}
person c4f4t0r    schedule 16.05.2015

Да, это возможно.

node default{
    if hiera("useldap") == 'true' {
      include ldap
    }
}

Устанавливает ldap в каждый узел, который разрешает useldap = true

person Raul Andres    schedule 10.02.2014
comment
Это означало бы, что в node2_application.yaml ключ / значение hierdata должен быть установлен для useldap, который, по желанию оператора, не решает динамически, какой класс применять к какому узлу. - person kaizenCoder; 28.06.2015

Так не получится. Вы должны определить в node2, что класс ldap должен быть включен. Его нельзя «вычесть» классом / иерархией в node1, поскольку они анализируются независимо при применении изменений к этим конкретным узлам.

person Mateusz M.    schedule 09.01.2015

Я порекомендую более новое решение, где узлы разделяют каждую роль (если puppetmaster ‹4.0).

Теперь manifest / database.pp:

node /^(projectnameinthreechar)-([a-z]{3})-db([\d]+)\./ {
    class {
            "server::project::db":
                    ;
    }
}


class server::project::db ($paramteres) { ... }

Соответствие всем узлам, имена хостов которых соответствуют этому шаблону:

 /^(projectnameinthreechar)-([a-z]{3})-db([\d]+)\./

Пример:

web-can-db01
person Gabor    schedule 12.03.2016

Да, ты можешь.

Вам следует сделать следующее.

site.pp:

node default{
  hiera_include('classes')
}

hiera.yaml:

---
:backends:
  - yaml

:yaml:
  :datadir: "/etc/puppetlabs/code/environments/{::environment}/hieradata"

:hierarchy:
  - "nodes/%{::trusted.certname}"
  - "common"

И затем в hieradata у вас должен быть каталог nodes, который содержит

node01.domain.com.yaml:

---
classes:
  - base
  - application

node02.domain.com.yaml:

---
classes:
  - base
  - ldap
person kausar    schedule 01.10.2016