В моем манифесте 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-описание классов и параметров, которые необходимо применить.