Puppet/ru

Puppet - это система управления конфигурациями, написанная на языке программирования Ruby. Она может использоваться для автоматизации развертывания системы на новых машинах.

Установка
Puppet предоставляется пакетом Gentoo.

На данный момент, не существует разницы между клиентом и сервером, поэтому основная процедура установки для них одна и та же.

Emerge
Для начала, установите Puppet с помощью :

Конфигурация и настройка
В основном, Puppet конфигурируется через файл, написанный в стиле формата ini. Комментарии отмечены знаком решетки.

Файл конфигурации разбит на несколько разделов, или блоков:


 * содержит настройки, которые действуют по умолчанию для всех частей Puppet, до тех пор, пока они не переписываются настройками в каком-либо из следующих разделов:
 * используется для настроек, касающихся Puppetmaster, или утилиты CA
 * используется для настроек, касающихся Puppet agent.

Более глубокое объяснение, вместе со списком дальнейших блоков, доступно в официальной документации Puppet. Также, существует список всех параметров конфигурации, некоторые из которых, конечно же, имеют смысл только тогда, когда применяются или к серверу, или к клиенту.

Настройка (Puppetmaster) сервера
Настройки по умолчанию, помещенные ebuild-файлом в могут использоваться как есть. Для Puppet 2.7.3, части, относящиеся к серверу выглядят следующим образом:

Настройка файлового сервера
Для того, чтобы отправить клиентам файлы, файловый сервер должен быть сконфигурирован в. По умолчанию, туда не включено ни одного файла.

Фрагмент выше настраивает общий ресурс с названием files (запомните этот идентификатор, так как на него будет необходимо сослаться в дальнейшем), осуществляющий поиск файлов в и доступный только для хостов сети 192.168.0.0/24. Здесь можно использовать любые ip-адреса, бесклассовую адресацию, и имена хостов (включая шаблонные знаки, наподобие ). Команда deny может использоваться для явного запрета доступа к определенным компьютерам или диапазонам IP-адресов.

Запуск демона puppetmaster
С этой базовой конфигурацией, вместе с первоначальными настройками файлового сервера, мы можем запустить демон Puppetmaster, используя OpeRC сценарий инициализации:

Во время первого запуска, Puppet генерирует SSL сертификат для хоста Puppetmaster и размещает его в каталоге, который указан в переменной ssldir, как было показано в конфигурации выше.

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

Простой манифест
В терминах Puppet, манифестом называются файлы, в которых указана конфигурация клиента. Документация содержит исчерпывающее руководство по языку разметки манифеста.

В качестве простого примера, давайте создадим файл с сообщением дня (message of the day, сокращенно motd) на клиенте. На puppetmaster, создайте файл внутри общего файлового ресурса files, созданного ранее:

Затем, нам необходимо создать основной файл манифеста в каталоге. Он называется site.pp:

Определение узла по умолчанию - default node (или, имя клиента), используется в случае, когда специальное объявление узла (node) отсутствует. Мы используем общий файловый ресурс и хотим, чтобы файл содержал то же самое, что и файл на общем ресурсе files на хосте. Если сервер с puppetmaster доступен под другим именем хоста, то необходимо исправить source URI соответственно.

Конфигурация клиента
Во время первого запуска Puppet agent, нужно подождать, пока сертификат будет подписан puppetmaster. Для того, чтобы запросить сертификат и выполнить первый проход конфигурации, запустите:

Перед тем, как клиент сможет соединиться, необходимо авторизировать запрос сертификата на сервере. Клиент должен появиться в списке узлов, запрашивающих сертификат:

Теперь, мы разрешаем запрос:

Клиент будет проверять каждые 60 секунд, выпущен ли уже его сертификат. После этого, он продолжит первый проход конфигурации:

Если это сообщение появляется, то все прошло хорошо. Теперь проверьте содержимое файла на клиенте:

OpenRC
Теперь, можно запустить puppet agent в качестве демона, и запускать его каждый раз при загрузке:

Systemd
С другой стороны, при запущенном systemd:

Генерирование сертификатов вручную
Для того, чтобы создать сертификат вручную можно использовать утилиту. Она разместит все сгенерированные сертификаты в каталоге, который указан в переменной ssldir, так, как установлено в конфигурации puppet, и подпишет их ключом локального центра сертификации (CA).

Легким случаем является генерация сертификата с только одним именем сертификата - Common Name:

Если требуются множественные имена хоста, для которых этот сертификат действителен, используйте параметр  и отделите дополнительные имена хоста двоеточием:

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

Обновление сертификата у агента
Это процесс обновления сертификата у агента.


 * 1) (on master)
 * 2) (on agent)
 * 3) * This will cause the Puppet agent to regenerate the CSR with the existing SSL key.
 * 4) * The old certificate is no longer valid, as it was nuked on the master.
 * 5) * When one of the above steps is forgotten, an error will pop up about the certificate mis-matching between agent and master.
 * 6) * To replace the SSL keys (optional):
 * 7) (on agent)
 * 8) * When using auto-signing, no further steps are needed.
 * 9) (on master)
 * 10) Verify that the fingerprint listed in the previous two outputs matches
 * 11) (on master)
 * 12) (on agent)

Управление слотами с puppet
По умолчанию portage предоставляемый в puppet не поддерживает слоты, но существуют модули puppet, которые стремятся добавить данную функциональность.

For instance, with version 4.6.0 and higher, and/or, the slot functionality is supported like to:

Additional modules are:
 * puppet-portage
 * PortageGT

Ссылки

 * Upstream website
 * Puppet Wiki