Пока создал две виртуалки:
- centos7-1.test.local — сервер с puppet сервером на борту. На нем мы будем конфигурировать клиент.
- centos7-2.test.local — собственно клиент, который будет все данные по своей конфигурации брать с сервера.
При установке клиента и сервера была сразу настроена сеть. DNS сервер пока не поднимался, поэтому в файле /etc/hosts на обеих машинах добавлены строки:
192.168.200.99 centos7-1.test.local centos7-1
192.168.200.98 centos7-2.test.local centos7-2
Маршрут по умолчанию на сервере, через хост машину. Маршрут по умолчанию на клиенте, через сервер.
Fierwall на сервере настроен. Удален fierwalld, настроен маскарадинг и доступ по ssh. На клиенте все по умолчанию.
При установке клиента выбрана минимальная конфигурация сервера.
Puppet будем конфигурить исходя из того, что у нас везде CentOS 7. Т.е. пока не будем заморачиваться с многоплатформенностью.
Установка puppet на сервер.
# rpm -ivh http://yum.puppetlabs.com/puppetlabs-release-el-7.noarch.rpm
# yum install puppet-server
Поскольку лениво руками возиться c сертификатами, включим автоматическое подписывание сертификатов. В реальной жизни так делать низзя.
# vim /etc/puppet/puppet.conf
[main]
…
autosign = true
Создадим манифест файл заглушку. По мере понимания системы, будем его расширять.
# vim /etc/puppet/manifests/site.pp
package {
‘mc’:
ensure => installed;
}
Собственно тут говориться, что надо поставить пакет mc, если его еще нет.
Запускаем сервер:
# systemctl start puppetmaster.service
# systemctl enable puppetmaster.service
# systemctl status puppetmaster
Проверяем наличие открытого порта 8140 в fierwall:
# iptables -L INPUT -n —line-numbers
Если порт не открыт, добавляем:
# iptables -I INPUT 5 -p tcp -m state —state NEW -m tcp —dport 8140 -j ACCEPT
# service iptables save
Установка puppet клиента на centos7-2.
# rpm -ivh http://yum.puppetlabs.com/puppetlabs-release-el-7.noarch.rpm
# yum install puppet
Указываем сервер, куда буем ходить:
# vim /etc/puppet/puppet.conf
[agent]
server=centos7-1.test.local
certname=centos7-2-cl.test.local
Подключаемся агентом, заодно генерируя и подписывая сертификаты:
# puppet agent —test
Если ошибок не показало, запускаем сервис:
# systemctl start puppet.service
# systemctl enable puppet.service
# systemctl status puppet
Кстати, пакет mc уже установился, программой можно пользоваться.
Переходим на сервер.
На всякий пожарный ставим средство для работы с конфигами. Чувствую, что оно нам пригодится.
# yum install augeas
Ставим библиотеку, необходимую для работы со строками.
# puppet module install puppetlabs-stdlib
Создадим манифест файл puppet, в котором опишем пакеты и параметры, которые будут использованы на всех серверах.
Мне понадобятся: ssh, ntp, mc, vim (мой любимый редактор), net-tools (ip ставиться по умолчанию, но я привык к стандартному ifconfig и route), traceroute, tzdata (с обязательным обновлением до последней версии, а вдруг, не дай бог, опять дадут порулить «Повелителю Времени»?).
Так же я люблю кастомную строку приглашения.
Итого файл будет выглядеть следующим образом:
# vim /etc/puppet/manifests/site.pp
class sshd {
# долен быть установлен пакет
package { ‘openssh-server’:
ensure => latest
}
# сервис должен быть запущен
service { ‘sshd’:
name => «sshd»,
enable => true,
ensure => running
}
}
# Сервер ntpd поднимать не будем, ограничимся ntpdate, благо в
# CentOS 7 проверку можно запускать как сервис.
# для ее работы потребуется конфигурационный файл /etc/ntpd.conf
# который находится в пакете ntp
class ntpdate {
# ставим пакет ntp. Ntpdate будет поставлен по зависимости.
package { ‘ntp’:
ensure => installed
}
# запускаем соотвествующий сервис.
service { ‘ntpdate’:
enable => true,
ensure => running
}
}
# создаем базовый класс, для всех машин
class baselinux {
package { ‘mc’: ensure => installed }
package { ‘vim-enhanced’: ensure => installed }
package { ‘net-tools’: ensure => installed }
package { ‘traceroute’: ensure => installed }
package { ‘tzdata’: ensure => latest }
include ‘sshd’
include ‘ntpdate’
# необходимо для работы file_line
include ‘stdlib’
# Добавляем переменную PS1 в конец /etc/bashrc, если ее в этом файле еще нет.
# Точнее говоря, PS1 там уже есть, мы контролируем наличие именно такой строки
# и если ее нет, то добавляем в конец файла.
file_line { ‘ps1_rule’:
path => ‘/etc/bashrc’,
# line пишем одной строкой
line => ‘PS1='[e[44;36m]t:[w][e[0;0m]n[e[0;31;04m]u[e[0;0m]@[e[0;32m]h[e[0;0m] $ »
}
}
# node по умолчанию, используется в том случае, если нет явного
# нода для конкретной машины.
node default {
include ‘baselinux’
}
# node для клиента.
node ‘centos7-2.test.local’ {
include ‘baselinux’
}
Node для клиента пока идентичен ноду по умолчанию. Но я буду его потихоньку добавлять.
Если лениво ждать пока на клиенте включатся наши изменения, на нем можно запустить:
# puppet agent —test
На клиенте будут установлены все необходимые пакеты и запустятся (если ещё не были запущены) указанные нами сервисы.
Пока как то так.