Если Вы уже здесь, то наверняка знаете, что такое puppet. Если нет, то добро пожаловать в статью: http://habrahabr.ru/post/163811/
Здесь я буду показывать проверенный и рабочий способ установки свежей версии Puppet на CentOS 6.
Готовы? Поехали!
Есть машинка с CentOS 6:
CentOS release 6.4 (Final) Kernel \r on an \m |
Установка
Устанавливать будем из репо puppet: http://docs.puppetlabs.com/guides/puppetlabs_package_repositories.html#open-source-repositories
В репо epel старая версия, которая не совместима с новыми (например, из debian 7)
rpm -ivh http: //yum.puppetlabs.com/el/6/products/i386/puppetlabs-release-6-7.noarch.rpm yum update |
Устанавливаем puppet-server:
yum install -y puppet-server |
Системные директории по-умолчанию:
/etc/puppet /var/lib/puppet |
Добавляем puppet в автозапуск
chkconfig puppetmaster on |
Puppet работает на 8140 порту.
Есть множество готовых конфиг-файлов. Смотреть в /usr/lib/ruby/site_ruby/1.8/puppet/
Конфиг-файлы называются манифестами и находятся в директории /etc/puppet/manifests
Стандартный манифест — это site.pp. Его puppet будет искать первым.
Базовый элемент манифеста — ресурс. Ресурс — это файл, задача cron, пакет, пользователь, сервисы и т.д. Синтаксиси ресурсов: http://docs.puppetlabs.com/puppet/3/reference/lang_resources.html#syntax
Внесем в /etc/puppet/manifests/site.pp:
file { "/etc/passwd" : owner => "root" , group => "bin" , mode => 644 , } |
Этот ресурс включает проверку владельца файла /etc/passwd, и если он отличен от root, Puppet устанавливает юзера root хозяином этого файла. Тоже самое и с группой и правами.
Ресурсы нужно группировать в классы. Например, класс apache будет включать ресурсы из /etc/apache2, /var/log/apache2.
Самым главным элементом в когфиг-файле является узел (node). Грубо говоря, это тип машин, на которых будет развернута конфигурация puppet. Например, нода LAMP для установки соответствующего ПО. Нода games для установки игр и т.д.
Если нода не будет задана, то все клиенты, которые обратятся к puppet, выполнят команду, что задана в манифесте.
Для примера, манифест Nginx для нод server{n} Nginx.pp:
class nginx { package { 'nginx' : ensure => latest } service { 'nginx' : ensure => running, enable => true , require => Package[ 'nginx' ] } } node /^server(\d+)$/ { include nginx } |
Запускаем puppetmaster:
/etc/init.d/puppetmaster start |
Установка и настройка клиента Puppet
Устанавливать puppet будем на Debian. Попробуем к нему применить наш манифест.
Debian GNU/Linux 7 \n \l |
Устанавливаем репо puppet:
wget http: //apt.puppetlabs.com/puppetlabs-release-wheezy.deb |
Ставим пакет
dpkg -i puppetlabs-release-wheezy.deb |
Обновляем информацию о пакетах и пакеты:
apt-get update && apt-get upgrade |
Устанавливаем puppet:
apt-get install puppet |
Далее, в файл /etc/puppet/puppet.conf добавляем информацию о мастер-сервере (в примере — server.puppet.fastvps.ru)
server=server.puppet.fastvps.ru node_name=facter cerntname=sharkov |
certname — имя машины. Будет видно при авторизации на мастер сервере.
node_name — определяет, как мастер будет идентифицировать клиента для использования в манифестах, а также определяет переменные hostname, fqdn и domain. Возможные значения cert (использует значение certname) и facter (использует hostname клиента). По умолчанию : cert.
Включаем запуск в файле /etc/default/puppet
И запускаем puppet:
/etc/init.d/puppet start |
После первого запуска, клиент отправит запрос на мастер-сервер и получит ошибку, т.к. сертификат не подписа.
Теперь на мастер-сервере вводим и видим:
# puppet cert --list "client.puppet.fastvps.ru" (SHA256) 92 :1B:1D:D5:D2:A7: 53 :A7: 62 : 23 :BE:CB:1D:E7: 17 :EE: 09 :E1:DC:FF: 17 : 42 : 29 : 52 :F5:5C: 30 : 17 :F1:E2:DD: 92 |
Подписываем нового клиента:
# puppet cert --sign client.puppet.fastvps.ru Notice: Signed certificate request for client.puppet.fastvps.ru Notice: Removing file Puppet::SSL::CertificateRequest client.puppet.fastvps.ru at '/var/lib/puppet/ssl/ca/requests/client.puppet.fastvps.ru.pem' |
Готово. Теперь все друг друга узнали.
Использование
Мы уже добавили манифест (его так же называют рецептом) в файл site.pp, который проверяет и устанавливает владельца для файла /etc/passwd.
Проверим, сработает ли.
На клиенте выполняем:
chmod 777 /etc/passwd |
И получаем:
root @client ~ # ls -l /etc/passwd -rwxrwxrwx 1 root bin 1 .1K Aug 1 13 : 31 /etc/passwd |
По-умолчанию, идет проверка с мастера раз в 30 минут. Сделаем проверку вручную.
puppet agent --verbose --test --onetime |
И увидим:
Info: Retrieving plugin Info: Caching catalog for client.puppet.fastvps.ru Info: Applying configuration version '1375357103' Notice: /Stage[main] //File[/etc/passwd]/mode: mode changed '0777' to '0644' Notice: Finished catalog run in 0.08 seconds |
Puppet 3
В статье используется Puppet 3. В сети пока мало документации. А между 2й и 3й веткой есть разница.
Ранее было несколько файлов для разных команд. Теперь — одна команда puppet.
Смотреть здесь: http://docs.puppetlabs.com/guides/tools.html