Как установить Puppet для управления вашей серверной инфраструктурой

[.note] #Note: Более новую версию этого руководства, в которой используется Puppet Server вместо Puppet с Passenger, можно найти здесь:How To Install Puppet 4 in a Master-Agent Setup on Ubuntu 14.04.
#

Вступление

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

Puppet выпускается в двух вариантах: Puppet Enterprise и Puppet с открытым исходным кодом. Он работает на большинстве дистрибутивов Linux, различных платформах UNIX и Windows.

В этом руководстве мы расскажем, как установить Puppet с открытым исходным кодом в настройках агента / мастера. Эта установка состоит из центрального сервераPuppet Master, с которого будут управляться и распределяться все ваши данные конфигурации, а все ваши оставшиеся серверы будут узламиPuppet Agent, которые могут быть настроены главным сервером марионетки.

Предпосылки

Чтобы следовать этому руководству, вы должны иметь root-доступ ко всем серверам, с которыми вы хотите настроить Puppet. Вам также потребуется создать новый Ubuntu 14.04 VPS, который будет выступать в качестве главного сервера Puppet. Если у вас нет существующей инфраструктуры, смело воссоздайте пример инфраструктуры (описанной ниже), следуя обязательному руководству по настройке DNS.

Прежде чем мы начнем установку Puppet, убедитесь, что у вас есть следующие предварительные условия:

  • Private Network DNS: Необходимо настроить прямой и обратный DNS, и каждый сервер должен иметь уникальное имя хоста. Вот руководство поconfigure your own private network DNS server. Если у вас не настроен DNS, вы должны использовать файлhosts для разрешения имен. Мы предполагаем, что вы будете использовать вашу частную сеть для связи в вашей инфраструктуре.

  • Firewall Open Ports: Мастер Puppet должен быть доступен через порт 8140. Если ваш брандмауэр слишком строгий, ознакомьтесь с этимUFW Tutorial, чтобы узнать, как разрешить входящие запросы на порт 8140.

Пример инфраструктуры

Мы будем использовать следующую инфраструктуру, чтобы продемонстрировать, как настроить Puppet:

Hostname Role Частное полное доменное имя

host1

Общий Ubuntu 14.04 VPS

host1.nyc2.example.com

host2

Общий Ubuntu 14.04 VPS

host2.nyc2.example.com

ns1

Первичный сервер имен

ns1.nyc2.example.com

ns2

Вторичный сервер имен

ns2.nyc2.example.com

Агент Puppet будет установлен на всех этих хостах. На эти хосты будут ссылаться их частные сетевые интерфейсы, которые сопоставляются с поддоменом «.nyc2.example.com» в DNS. Это та же инфраструктура, которая описана в предварительном руководстве:How To Configure BIND as a Private Network DNS Server on Ubuntu 14.04
.

Когда у вас есть все необходимые условия, давайте перейдем к созданию главного сервера Puppet!

Создать главный сервер Puppet

Создайте новыйUbuntu 14.04 x64 VPS, используя «марионетку» в качестве имени хоста. Добавьте свою частную сеть в свой DNS со следующими данными:

Hostname Role Частное полное доменное имя

кукольный

Хозяин Марионеток

puppet.nyc2.example.com

Если вы только что настроили DNS и не знаете, как добавить свой хост в DNS, обратитесь к разделуMaintaining DNS Records руководства по DNS. По сути, вам нужно добавить записи «A» и «PTR» и позволить новому хосту выполнять рекурсивные запросы. Кроме того, убедитесь, что вы настроили свой поисковый домен, чтобы ваши серверы могли использовать короткие имена хостов для поиска друг друга.

Использование «puppet» в качестве имени хоста мастера Puppet немного упрощает настройку агента, поскольку это имя по умолчанию, которое агенты будут использовать при попытке подключения к мастеру.

Теперь нам нужно настроить NTP.

Установить NTP

Поскольку он выступает в роли центра сертификации для узлов агентов, главный сервер марионеток должен поддерживать точное системное время, чтобы избежать потенциальных проблем при выдаче сертификатов агентов - сертификаты могут истекать, если есть расхождения во времени. Для этой цели мы будем использовать сетевой протокол времени (NTP).

Сначала выполните одноразовую синхронизацию с помощью командыntpdate:

sudo ntpdate pool.ntp.org

Ваше системное время будет обновлено, но вам нужно установить демон NTP для автоматического обновления времени, чтобы минимизировать смещение времени. Установите его с помощью следующей команды apt:

sudo apt-get update && sudo apt-get -y install ntp

Обычной практикой является обновление конфигурации NTP для использования «зон пулов», которые географически расположены ближе к вашему NTP-серверу. В веб-браузере перейдите кNTP Pool Project и найдитеpool zone, который географически близок к центру обработки данных, который вы используете. В нашем примере мы выберем пул США (http://www.pool.ntp.org/zone/us), потому что серверы расположены в центре обработки данных в Нью-Йорке.

Откройтеntp.conf для редактирования:

sudo vi /etc/ntp.conf

Добавьте серверы времени со страницы проекта NTP Pool в начало файла:

server 0.us.pool.ntp.org
server 1.us.pool.ntp.org
server 2.us.pool.ntp.org
server 3.us.pool.ntp.org

Сохранить и выйти. Перезапустите NTP, чтобы добавить новые серверы времени.

sudo service ntp restart

Теперь, когда наш сервер показывает точное время, давайте установим программное обеспечение Puppet master.

Установите Puppet Master

Существует множество способов установить Puppet с открытым исходным кодом. Мы будем использовать пакет debian под названиемpuppetmaster-passenger, который предоставляется Puppet Labs. Пакетpuppetmaster-passenger включает мастер Puppet и готовый к работе веб-сервер (Passenger с Apache), который устраняет несколько шагов настройки по сравнению с использованием базового пакетаpuppetmaster.

Загрузите пакет Puppet Labs:

cd ~; wget https://apt.puppetlabs.com/puppetlabs-release-trusty.deb

Установите пакет:

sudo dpkg -i puppetlabs-release-trusty.deb

Обновите список доступных пакетов apt:

sudo apt-get update

Установите пакетpuppetmaster-passenger:

sudo apt-get install puppetmaster-passenger

Мастер Puppet, Passenger, Apache и другие необходимые пакеты теперь установлены. Поскольку мы используем Passenger с Apache, главный процесс Puppet контролируется Apache, т.е. он работает, когда работает Apache.

Прежде чем продолжить, остановите мастер Puppet, остановив службуapache2:

sudo service apache2 stop

Далее мы хотим заблокировать версию Puppet.

Заблокировать версию

Изменения от версии к версии могут иногда приводить к тому, что ваша среда Puppet перестает работать должным образом. По этой причине вы захотите поддерживать согласованную версию Puppet во всей вашей инфраструктуре. Если вы решите перейти на более новую версию, убедитесь, что вы обновилиmaster перед любыми узлами агентов, поскольку главный компьютер не может управлять агентами с более высоким номером версии.

Давайте посмотрим версию нашей установки Puppet с помощью следующей команды:

puppet help | tail -n 1

Во время записи результат предыдущей команды будетPuppet v3.6.2. Мы можем использовать функцию pin в apt, чтобы заблокировать установку Puppet на3.6.*, что предотвратит обновление Puppet до более новой основной версии. Создайте новый файл с именем в каталоге настроек apt:

sudo vi /etc/apt/preferences.d/00-puppet.pref

Добавьте следующие строки, чтобы заблокировать пакетыpuppet,puppet-common иpuppetmaster-passenger в3.6.* (измените это, чтобы оно соответствовало вашей установленной версии):

# /etc/apt/preferences.d/00-puppet.pref
Package: puppet puppet-common puppetmaster-passenger
Pin: version 3.6*
Pin-Priority: 501

Сохранить и выйти. Ваша версия Puppet теперь заблокирована.

Следующим шагом является настройка имен и сертификатов вашего мастера Puppet.

Установить имена и сертификаты

Puppet использует SSL-сертификаты для аутентификации связи между главным и агентским узлами. Хозяин Puppet действует как центр сертификации (CA) и должен генерировать свои собственные сертификаты, которые используются для подписи запросов сертификатов агента. Мы настроим мастер сертификаты сейчас.

Удалить существующие сертификаты

Удалите все существующие сертификаты SSL, созданные во время установки пакета. Расположение SSL-сертификатов Puppet по умолчанию:/var/lib/puppet/ssl:

sudo rm -rf /var/lib/puppet/ssl

Настроить сертификат

При создании сертификата мастера марионеток укажите каждое DNS-имя, по которому узлы агентов могут обращаться к мастеру по адресу. В нашем примере мы будем использовать «puppet» и «puppet.nyc2.example.com», соответственно, краткое имя хоста и полное доменное имя.

Отредактируйте основной файл puppet.conf:

sudo vi /etc/puppet/puppet.conf

Это будет выглядеть примерно так:

[main]
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
factpath=$vardir/lib/facter
templatedir=$confdir/templates

[master]
# These are needed when the puppetmaster is run by passenger
# and can safely be removed if webrick is used.
ssl_client_header = SSL_CLIENT_S_DN
ssl_client_verify_header = SSL_CLIENT_VERIFY

Удалите строку с опциейtemplatedir, так как эта опция устарела.

Добавьте следующие две строки в конец раздела[main] (замените выделенный текст частным FQDN):

certname = puppet
dns_alt_names = puppet,puppet.nyc2.example.com

Важно использовать assigncertname для «марионетки», потому что конфигурация Apache / Passenger ожидает, что сертификат будет называться «марионетка». Если вы решите, что вам нужен другой параметрcertname, обязательно отредактируйте файл конфигурации Apache (/etc/apache2/sites-available/puppetmaster.conf), чтобы изменить имя пути сертификата SSL.

Сохранить и выйти.

Создать новый сертификат

Теперь создайте новые сертификаты CA, выполнив следующую команду:

sudo puppet master --verbose --no-daemonize

Вы увидите несколько строк вывода о том, что создаются ключи и сертификаты SSL. Как только вы увидитеNotice: Starting Puppet master version 3.6.2, установка сертификата завершена. НажмитеCTRL-C, чтобы вернуться в оболочку.

Пример вывода:

Info: Creating a new SSL key for ca
Info: Creating a new SSL certificate request for ca
Info: Certificate Request fingerprint (SHA256): EC:7D:ED:15:DE:E3:F1:49:1A:1B:9C:D8:04:F5:46:EF:B4:33:91:91:B6:5D:19:AC:21:D6:40:46:4A:50:5A:29
Notice: Signed certificate request for ca
...
Notice: Signed certificate request for puppet
Notice: Removing file Puppet::SSL::CertificateRequest puppet at '/var/lib/puppet/ssl/ca/requests/puppet.pem'
Notice: Removing file Puppet::SSL::CertificateRequest puppet at '/var/lib/puppet/ssl/certificate_requests/puppet.pem'
Notice: Starting Puppet master version 3.6.2

Если вы хотите посмотреть информацию о сертификате только что созданного сертификата, введите следующее:

sudo puppet cert list -all

Предыдущая команда фактически перечисляет все подписанные сертификаты и неподписанные запросы сертификатов. В настоящее время отображается только главный сертификат, поскольку другие сертификаты еще не добавлены:

+ "puppet" (SHA256) 05:22:F7:65:64:CF:46:0E:09:2C:5D:FD:8C:AC:9B:31:17:2B:7B:05:93:D5:D1:01:52:72:E6:DF:84:A0:07:37 (alt names: "DNS:puppet", "DNS:puppet.nyc2.example.com")

Наша служба Puppet master практически готова к запуску. Давайте сначала посмотрим на основную конфигурацию.

Настроить Puppet Master

Основной файл конфигурации марионетки,puppet.conf, состоит из трех разделов:[main],[master] и[agent]. Как вы уже могли догадаться, раздел «main» содержит глобальную конфигурацию, раздел «master» относится к мастеру puppet, а «agent» используется для настройки агента puppet. Помимо изменений, которые мы сделали ранее, настройки по умолчанию будут работать нормально для базовой настройки.

Файл конфигурации имеет много параметров, которые могут иметь отношение к вашей собственной настройке. Полное описание файла доступно в Puppet Labs:Main Config File (puppet.conf).

Если вы хотите отредактировать его, выполните эту команду:

sudo vi /etc/puppet/puppet.conf

Давайте посмотрим на основной файл манифеста.

Основной файл манифеста

Puppet использует язык, зависящий от предметной области, для описания конфигурации системы, и эти описания сохраняются в файлах, называемых «манифестами», которые имеют расширение файла.pp. Основной файл манифеста по умолчанию находится в/etc/puppet/manifests/site.pp. Мы рассмотрим некоторые основные манифесты позже, но пока создадим файл-заполнитель:

sudo touch /etc/puppet/manifests/site.pp

Начать кукольный мастер

Теперь мы готовы запустить Хозяина Марионеток. Запустите его, запустив службуapache2:

sudo service apache2 start

Ваш мастер Puppet работает, но он еще не управляет узлами агента. Давайте узнаем, как установить и добавить Puppet агентов!

Установите Puppet Agent

Агент Puppet должен быть установлен на любом сервере, которым будет управлять мастер Puppet. В большинстве случаев это включает в себя каждый сервер в вашей инфраструктуре. Как упоминалось во введении, агент Puppet может работать во всех основных дистрибутивах Linux, на некоторых платформах UNIX и Windows. Поскольку установка на каждой ОС несколько отличается, мы рассмотрим установку только на серверах Ubuntu и Debian.

Инструкции по установке Puppet на других платформах находятся в папкеPuppet Labs Docs - обязательно следуйте разделу «Установка Puppet на узлы агентов» для выбранной вами ОС.

Note: Предполагается, что все ваши узлы Puppet, включая узлы агентов, настроены на использование вашего DNS. Если вы создаете новый сервер, не забудьтеadd it to your DNS перед установкой агента Puppet.

Ubuntu / Узел Агента Debian

Note: все узлы агентов нашего примера,host1,host2,ns1 иns2, представляют собой Ubuntu 14.04 VPS. Мы повторим этот шаг для каждого сервера, чтобы каждый из них мог управляться мастером Puppet.

На своем узле Puppet agent загрузите пакет Puppet Labs:

cd ~; wget https://apt.puppetlabs.com/puppetlabs-release-trusty.deb

Установите пакет:

sudo dpkg -i puppetlabs-release-trusty.deb

Обновите список доступных пакетов apt:

sudo apt-get update

Установите пакет агента Puppet (puppet):

sudo apt-get install puppet

Агент марионеток по умолчанию отключен. Чтобы изменить это, обновите файл по умолчанию:

sudo vi /etc/default/puppet

И измените значениеSTART на «да»:

START=yes

Сохраните и выйдите из/etc/default/puppet.

Заблокировать версию

Как и в случае с мастером Puppet, мы захотим использовать функцию apt pin для блокировки версии агента Puppet:

sudo vi /etc/apt/preferences.d/00-puppet.pref

Добавьте следующие строки, чтобы заблокировать пакетыpuppet иpuppet-common для3.6.* (измените это, чтобы оно соответствовало вашей установленной версии):

# /etc/apt/preferences.d/00-puppet.pref
Package: puppet puppet-common
Pin: version 3.6*
Pin-Priority: 501

Сохранить и выйти. Ваша версия Puppet теперь заблокирована.

Настроить агент

Перед запуском агента необходимо внести несколько изменений в конфигурацию.

Отредактируйтеpuppet.conf агента:

sudo vi /etc/puppet/puppet.conf

Он будет выглядеть точно так же, как исходный файл конфигурации мастера Puppet.

Снова удалите строкуtemplatedir. Затем удалите раздел[master] и все строки под ним.

Предполагая, что мастер Puppet доступен в «puppet», агент должен иметь возможность подключиться к мастеру. Если мастер недоступен в «puppet», вам необходимо добавить полное доменное имя мастера Puppet. Мы рекомендуем настроить это независимо (замените полное доменное имя своим):

[agent]
server = puppet.nyc2.example.com

Сохранить и выйти.

Кукольный агент готов к запуску. Сделайте это, выполнив следующую команду:

sudo service puppet start

Если все настроено правильно, вы не должны видеть никаких выходных данных. При первом запуске агента Puppet он генерирует сертификат SSL и отправляет запрос на подпись мастеру Puppet. После того как мастер Puppet подпишет сертификат агента, он сможет связаться с узлом агента.

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

Подать заявку на мастера

При первом запуске Puppet на узле агента он отправляет запрос на подпись сертификата мастеру Puppet. Прежде чем мастер сможет связываться и контролировать узел агента, он должен подписать сертификат этого конкретного узла агента. Мы опишем, как подписывать и проверять подписи запросов.

Список текущих запросов сертификатов

На хозяине Puppet выполните следующую команду, чтобы получить список всех неподписанных запросов на сертификат:

sudo puppet cert list

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

"host1.nyc2.example.com" (SHA256) B1:96:ED:1F:F7:1E:40:53:C1:D4:1B:3C:75:F4:7C:0B:A9:4C:1B:5D:95:2B:79:C0:08:DD:2B:F4:4A:36:EE:E3

Обратите внимание, что перед ним нет+. Это указывает на то, что он еще не подписан.

Подпишите запрос

Чтобы подписать запрос на сертификат, используйте командуpuppet cert sign с именем хоста сертификата, который вы хотите подписать. Например, чтобы подписатьhost1.nyc2.example.com, вы должны использовать следующую команду:

sudo puppet cert sign host1.nyc2.example.com

Вы увидите следующий вывод, который указывает, что запрос сертификата был подписан:

Notice: Signed certificate request for host1.nyc2.example.com
Notice: Removing file Puppet::SSL::CertificateRequest host1.nyc2.example.com at '/var/lib/puppet/ssl/ca/requests/host1.nyc2.example.com.pem'

Хозяин Puppet теперь может связываться и контролировать узел, которому принадлежит подписанный сертификат.

Если вы хотите подписать все текущие запросы, используйте параметр-all, например:

sudo puppet cert sign --all

Отзыв сертификатов

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

sudo puppet cert clean hostname

Связанные сертификаты указанного хоста будут удалены из Puppet.

Просмотреть все подписанные запросы

Если вы хотите просмотреть все запросы, подписанные и неподписанные, выполните следующую команду:

sudo puppet cert list --all

Вы увидите список всех запросов. Подписанным запросам предшествует` and unsigned requests do not have the `.

  "ns2.nyc2.example.com"   (SHA256) E4:F5:26:EB:B1:99:1F:9D:6C:B5:4B:BF:86:14:40:23:E0:50:3F:C1:45:D0:B5:F0:68:6E:B2:0F:41:C7:BA:76
+ "host1.nyc2.example.com" (SHA256) 71:A2:D3:82:15:0D:80:20:D4:7E:E3:42:C2:35:87:83:79:2B:57:1D:D5:5A:EC:F6:8B:EE:51:69:53:EB:6B:A1
+ "host2.nyc2.example.com" (SHA256) F4:79:A6:7C:27:0C:EA:8E:BC:31:66:FF:F2:01:AB:B1:35:7B:9F:5E:C8:C9:CE:82:EE:E8:2F:23:9F:0C:2B:ED
+ "puppet"                 (SHA256) 05:22:F7:65:64:CF:46:0E:09:2C:5D:FD:8C:AC:9B:31:17:2B:7B:05:93:D5:D1:01:52:72:E6:DF:84:A0:07:37 (alt names: "DNS:puppet", "DNS:puppet.nyc2.example.com")

Congrats! Теперь ваша инфраструктура готова к управлению Puppet!

Начало работы с Puppet

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

Как собраны факты

Puppet собирает факты о каждом из своих узлов с помощью инструментаfacter. По умолчанию Facter собирает информацию, полезную для конфигурации системы (например, Имена ОС, имена хостов, IP-адреса, ключи SSH и многое другое). Можно добавить пользовательские факты, если вам нужны другие факты для выполнения ваших настроек.

Собранные факты могут быть полезны во многих ситуациях. Например, вы можете создать шаблон конфигурации веб-сервера и автоматически заполнить соответствующие IP-адреса для определенного виртуального хоста. Или вы можете определить, что операционная система вашего сервера - «Ubuntu», поэтому вам следует запустить службуapache2 вместоhttpd. Это базовые примеры, но они должны дать вам представление о том, как можно использовать факты.

Чтобы увидеть список фактов, которые автоматически собираются на узле вашего агента, выполните следующую команду:

facter

Как выполняется главный манифест

Агент марионеток периодически проверяет хозяина марионеток (обычно каждые 30 минут). В течение этого времени он отправит факты о себе мастеру и извлечет текущий каталог - скомпилированный список ресурсов и их желаемых состояний, которые имеют отношение к агенту, определенному основным манифестом. Затем узел агента попытается внести соответствующие изменения для достижения желаемого состояния. Этот цикл будет продолжаться до тех пор, пока мастер Puppet работает и обменивается данными с узлами агента.

Немедленное выполнение на конкретном агентском узле

Также можно инициировать проверку для конкретного узла агента вручную, выполнив следующую команду (для рассматриваемого узла агента):

puppet agent --test

Выполнение этого приведет к применению основного манифеста к агенту, выполняющему тест. Вы могли бы видеть вывод как следующее:

Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Loading facts in /var/lib/puppet/lib/facter/pe_version.rb
Info: Loading facts in /var/lib/puppet/lib/facter/puppet_vardir.rb
Info: Loading facts in /var/lib/puppet/lib/facter/root_home.rb
Info: Loading facts in /var/lib/puppet/lib/facter/facter_dot_d.rb
Info: Caching catalog for host1.nyc2.example.com
Info: Applying configuration version '1407966707'

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

Одноразовые манифесты

Командаpuppet apply позволяет выполнять манифесты, не связанные с основным манифестом, по запросу. Он только применяет манифест к узлу, с которого вы запускаете приложение. Вот пример:

sudo puppet apply /etc/puppet/modules/test/init.pp

Запуск манифестов таким способом полезен, если вы хотите протестировать новый манифест на узле агента или если вы просто хотите запустить манифест один раз (например, инициализировать узел агента до желаемого состояния).

Простой манифест

Как вы помните, главный файл манифеста на мастере Puppet расположен в/etc/puppet/manifests/site.pp.

Наmaster отредактируйте его сейчас:

sudo vi /etc/puppet/manifests/site.pp

Теперь добавьте следующие строки для описания файлового ресурса:

file {'/tmp/example-ip':                                            # resource type file and filename
  ensure  => present,                                               # make sure it exists
  mode    => 0644,                                                  # file permissions
  content => "Here is my Public IP Address: ${ipaddress_eth0}.\n",  # note the ipaddress_eth0 fact
}

Теперь сохраните и выйдите. Встроенные комментарии должны объяснять ресурс, который мы определяем. На простом английском языке это будетensure, что все узлы агентов будут иметь файл в/tmp/example-ip с разрешениями-rw-r--r-- и текст, содержащий общедоступный IP-адрес узла.

Вы можете либо дождаться, пока агент автоматически свяжется с мастером, либо вы можете запустить командуpuppet agent --test (с одного из ваших узлов агента). Затем выполните следующую команду, чтобы напечатать файл:

cat /tmp/example-ip

Вы должны увидеть вывод, который выглядит следующим образом (с IP-адресом этого узла):

Here is my Public IP Address: 128.131.192.11.

Укажите узел

Если вы хотите определить ресурс для определенных узлов, определитеnode в манифесте.

На мастере отредактируйтеsite.pp:

sudo vi /etc/puppet/manifests/site.pp

Теперь добавьте следующие строки:

node 'ns1', 'ns2' {    # applies to ns1 and ns2 nodes
  file {'/tmp/dns':    # resource type file and filename
    ensure => present, # make sure it exists
    mode => 0644,
    content => "Only DNS servers get this file.\n",
  }
}

node default {}       # applies to nodes that aren't explicitly defined

Сохранить и выйти.

Теперь Puppet гарантирует, что файл в/tmp/dns будет существовать вns1 иns2. Вы можете выполнить командуpuppet agent --test (из ns1 или ns2), если не хотите ждать запланированного извлечения агента Puppet.

Обратите внимание, что если вы не определите ресурс, Puppet сделает все возможное, чтобы не трогать его. Поэтому, если вы удалили эти ресурсы из манифеста, Puppet не удалит созданные им файлы. Если вы хотите, чтобы он удалял файлы, изменитеensure наabsent.

Эти примеры не делают ничего полезного, но они доказывают, что Puppet работает правильно.

Использование модуля

Теперь давайте использовать модуль. Модули полезны для группировки задач вместе. В сообществе Puppet доступно множество модулей, и вы даже можете написать свой.

На мастере Puppet установите модульpuppetlabs-apache из forgeapi:

sudo puppet module install puppetlabs-apache

Warning: не используйте этот модуль в существующей установке Apache. Он удалит все конфигурации Apache, которые не управляются Puppet.

Теперь отредактируйтеsite.pp:

sudo vi /etc/puppet/manifest/site.pp

Теперь добавьте следующие строки для установки Apache наhost2:

node 'host2' {
  class { 'apache': }             # use apache module
  apache::vhost { 'example.com':  # define vhost resource
    port    => '80',
    docroot => '/var/www/html'
  }
}

Сохранить и выйти. Теперь, когда в следующий раз Puppet обновит host2, он установит пакет Apache и настроит виртуальный хост с именем «example.com», прослушивая порт 80 и с корневым каталогом документа/var/www/html.

Наhost2 выполните следующую команду:

sudo puppet agent --test

Вы должны увидеть кучу выходных данных, указывающих, что Apache устанавливается. По завершении перейдите на общедоступный IP-адресhost2. Вы должны увидеть страницу приветствия Apache по умолчанию.

Congrats! Вы использовали свой первый модуль Puppet!

Заключение

Теперь, когда у вас есть базовая установка агента / мастера Puppet, вы готовы узнать больше о том, как использовать Puppet для управления инфраструктурой вашего сервера. Ознакомьтесь со следующим руководством:Getting Started With Puppet Code: Manifests and Modules.

Related