Если Вы уже здесь, то наверняка знаете, что такое 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 — определяет, как мастер будет идентифицировать клиента для использования в манифестах, а также определяет переменные hostnamefqdn и 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