Puppet/ru

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

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

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

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

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

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


 * [main] содержит настройки, которые действуют по умолчанию для всех частей Puppet, до тех пор, пока они не переписываются настройками в каком-либо из следующих разделов:
 * [master] используется для настроек, касающихся Puppetmaster (puppet master), или утилиты CA (puppet cert)
 * [agent] используется для настроек, касающихся Puppet agent (puppet agent)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Обновление сертификата у агента
This is the process used to manually refresh agent certificates.


 * 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, которые стремятся добавить данную функциональность.


 * puppet-portage
 * PortageGT

Ссылки

 * Upstream website
 * Puppet Wiki