Назад | Перейти на главную страницу

Группировка узлов в марионетке

В моем манифесте site.pp у меня есть следующее

import "nodes/*.pp"

Это позволяет мне красиво создавать отдельные файлы для разных групп. Однако внутри каждого файла .pp мне все равно нужно явно указать имена узлов, к которым я хочу применить модули и классы, вот так:

node puppet-client-1 {
  include testmodule
}

Мой вопрос: как сгруппировать несколько узлов вместе, а затем применить модули и / или классы к этой группе узлов? например:

group testgroup{
  puppet-client1
  puppet-client2
}

node webservers
{
  include testmodule
}

Пока я здесь, мой журнал выплевывает следующее:

The use of 'import' is deprecated at /etc/puppet/manifests/site.pp:2

Если это не рекомендуется, как разделить файлы манифеста на группы?

Спасибо :)

Есть два пути:

1) Несколько имен узлов в одной строке:

node 'puppet-client1', 'puppet-client2' {
    include testmodule
}

2) Узлы могут быть определены с помощью регулярных выражений, например:

node /^puppet-client[0-9]+/{
  include testmodule
}

но это зависит от подходящей схемы именования хоста.

Вы можете увидеть официальную документацию для определения узлов.

Самый простой способ сделать это - написать ENC - Классификатор внешних узлов что позволит вам абстрагировать ваши «группы» до простого сценария, написанного на любом языке, который вам удобен.

Обратите внимание, что это возвращает классы и параметры, так что это можно использовать, чтобы сделать Puppet более доступным, чтобы вы могли получить лучшее из обоих миров.

Из документации, сценарий запускается с параметром узла, который нужно классифицировать, и просто возвращает YAML-описание классов и параметров, которые необходимо применить.