Кукольные манифесты (обычный термин, а не сценарии) обычно организованы в модуль для компонента или службы ОС (например, apache
, ntp
, postgresql
) с одним или несколькими классами, которые содержат все необходимое для его настройки.
Класс Puppet содержит все определения файлов, пакетов и ресурсов службы для компонента ОС. На самом простом это что-то вроде:
class apache {
package { "httpd":
ensure => installed,
} ->
service { "httpd":
ensure => running,
}
}
Агент связывается с мастером для его каталога (список ресурсов для настройки), и в этом процессе хост классифицируется, и список классов будет включен в каталог.
В простейшем случае вы можете иметь основной манифест (doc), содержащий списки узлов с их именами хостов и включающие в себя классы, которые вы хотите использовать на них:
node foo.example.com {
include apache
}
Основной манифест компилируется автоматически, когда агент запрашивает свой каталог, и если определение узла соответствует имени агента, его содержимое также оценивается на предмет включения этих классов. Ведение большого количества определений узлов в коде не очень эффективно.
Вы также можете использовать Hiera и hiera_include для хранения списка классов во внешних файлах данных Hiera, тогда основной манифест содержит hiera_include('classes')
. Это ищет ценность classes
от Hiera и затем включает все те классы.
Наконец, мастер может быть настроен с помощью внешнего классификатора узла (ENC), который обычно представляет собой сценарий, который вызывается при регистрации агента. Ему дается имя агента, и он должен вывести список классов (и, необязательно, параметров и среды). Он может использовать базу данных или любую другую информацию, имеющуюся в вашей организации.