FastNetMon

Показаны сообщения с ярлыком Puppet. Показать все сообщения
Показаны сообщения с ярлыком Puppet. Показать все сообщения

пятница, 10 октября 2014 г.

Как добавить море полезных функций в Puppet?

Вот так:
puppet module install puppetlabs-stdlib
Подробно о полезных функциях:  https://forge.puppetlabs.com/puppetlabs/stdlib

А на клиенты эта библиотека притянется автоматически при синхронизации :)

четверг, 26 апреля 2012 г.

Активация Mongrel с Nginx для Puppet на CentOS 5


Для начала нужно включить Mongrel:
vim  /etc/sysconfig/puppetmaster
 Там вносим следующие правки:
PUPPETMASTER_PORTS=(18140, 18141)
PUPPETMASTER_EXTRA_OPTS="--servertype=mongrel"
Ставим сам Mongrel:
yum install -y rubygem-mongrel
Перезапускаем:

/etc/init.d/puppetmaster restart
После этого ставим Nginx 1.2  (или старше): http://nginx.org/ru/download.html

В блок http добавляем:
 ssl                     on;
    ssl_certificate         /var/lib/puppet/ssl/certs/config.fastvps.ru.pem;
    ssl_certificate_key     /var/lib/puppet/ssl/private_keys/config.fastvps.ru.pem;
    ssl_client_certificate  /var/lib/puppet/ssl/ca/ca_crt.pem;
    ssl_ciphers             SSLv2:-LOW:-EXPORT:RC4+RSA;
    ssl_session_cache       shared:SSL:8m; 
    ssl_session_timeout     5m;

    upstream puppet-production {
        server 127.0.0.1:18140; 
                            server 127.0.0.1:18141;
    }
Также создаем блок server:
    server {
        listen                  8140;
        root                    /var/empty;
        access_log              /var/log/nginx/access.log;
        error_log  /var/log/nginx/error.log;

        # allow authenticated and client without certs
        ssl_verify_client       optional;

        # Variables
        # $ssl_cipher returns the line of those utilized it is cipher for established SSL-connection
        # $ssl_client_serial returns the series number of client certificate for established SSL-connection
        # $ssl_client_s_dn returns line subject DN of client certificate for established SSL-connection
        # $ssl_client_i_dn returns line issuer DN of client certificate for established SSL-connection
        # $ssl_protocol returns the protocol of established SSL-connection

        location / {
            proxy_pass          http://puppet-production;
            proxy_redirect      off;
            proxy_set_header    Host             $host;
            proxy_set_header    X-Real-IP        $remote_addr;
            proxy_set_header    X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header    X-Client-Verify  $ssl_client_verify;
            proxy_set_header    X-Client-DN      $ssl_client_s_dn;
            proxy_set_header    X-SSL-Subject    $ssl_client_s_dn;
            proxy_set_header    X-SSL-Issuer     $ssl_client_i_dn;
            proxy_read_timeout  65;
        }
    }

Перезапускаем nginx:
/etc/init.d/nginx restart
 Все, после этого Pupept должен стать в разы быстрее :)

Источник: http://projects.puppetlabs.com/projects/1/wiki/Using_Mongrel_Nginx

пятница, 27 января 2012 г.

Об использовании Puppet autosign

The autosign.conf file (located at /etc/puppet/autosign.conf by default, and configurable with the autosign setting) is a list of certnames or certname globs (one per line) whose certificate requests will automatically be signed.

As any host can provide any certname, autosigning should only be used with great care, and only in situations where you essentially trust any computer able to connect to the puppet master.

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

Источник: http://docs.puppetlabs.com/guides/configuring.html

среда, 4 мая 2011 г.

warning: You have configuration parameter $server specified in [puppetd], which is a deprecated section. I'm assuming you meant [agent]

Ошибка исправляется очень просто, нужно переименовать название блока (оно в квадратных кавычках) в файле конфигурации с [puppetd] в [agent].

Файл конфигурации:
vim /etc/puppet/puppet.conf

понедельник, 9 августа 2010 г.

Puppet, OpenVZ + отстающее или убегающее время

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

Также стоит следить за тем, чтобы время как на клиенте, так и на сервере было точным. Это тоже избавит еще от целого вороха проблем.

суббота, 3 апреля 2010 г.

notice: Run of Puppet configuration client already in progress; skipping

Бороться с этой ошибкой легко (ниже пример для Debian):
rm /var/lib/puppet/state/puppetdlock


источник: http://java.cocolog-nifty.com/blog/2010/04/pupptnotice-run.html

Перенос всей конфигурации Puppet в Subversion

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

Допустим, у нас есть пустой репозиторий: https://domain.ru/configuration (как его сделать - можете найти в моем блоге по ключевому слову "subversion"), в котором мы планируем хранить конфиги Puppet.

Итак, в самую первую очередь необходимо сделать бэкап папки Puppet, чтобы случайно его не прибить в процессе работы:
tar -czf /root/puppet.tar.gz /etc/puppet


Теперь нам необходимо загрузить все имеющиеся у нас конфиги Puppet в Subversion, это делается командой import:

svn import /etc/puppet https://domain.ru/configuration/puppet -m 'init'


После этой операции в репозитории будет создана папка puppet и все конфиги будут лежать внутри нее.

Но, обращаю внимание, после этой операции папка /etc/puppet не становится рабочей копией! Она просто импортируется в репозиторий и все:

cd /etc/puppet
svn up
Skipped '.'
# что означает, что мы не минутой не в рабочей копии.


Теперь отключаем Puppet-сервер и сдвигаем исходную папку конфигов:
/etc/init.d/puppetmaster stop
mv /etc/puppet /etc/puppet_non_svn


Создаем новую папку для конфигов Puppet:

mkdir /etc/puppet
cd /etc/puppet


Делаем чекаут репозитория в нее:

svn co https://domain.ru/configuration/puppet ./ --username=puppet


Запускаем PuppetMaster:
/etc/init.d/puppetmaster start


Как Вы уже могли заметить, сервер Puppet работает с svn от имени пользователя puppet, в то время как я сам работаю по своему логину, nrg. Это сделано не случайно, а, во-первых, по соображениям безопасности и, во-вторых, по соображениям порядка :)

Дальнейшая работа с конфигурациями может выглядеть двумя способами - вы вносите изменения на сервере Puppet и коммитите их командой:
svn ci -m 'fix config'


либо исправляете конфиг "дома" (используя личный логин в svn):
svn ci -m 'fix config'


и после этого делаете обновление репозитория на сервере:

cd /etc/puppet
svn up


Ну вот и все, удачного использования и легкой поддержки кучи серверов :)

четверг, 1 апреля 2010 г.

Как сделать полный бэкап Puppet сервера на CentOS 5?

Вот встала задача мигарции физического сервера в виртульную среду, в связи с этим надо бэкапить Puppet Server на CentOS для переноса.

Pueppet хранит свои конфигурации в двух папках:
/etc/puppet
/var/lib/puppet


Так что необходимо сбэкапить две этих папки и после переноса развернуть на новом сервере.

tar -czf etc_puppet.tar.gz /etc/puppet
tar -czf var_puppet.tar.gz /var/lib/puppet/


После переноса на новой машине устанавливаем puppet-master и останавливаем его:
/etc/init.d/puppetmaster stop


Далее на всякий случай перемещаем стандартные конфиги:

mv /var/lib/puppet/ /var/lib/puppet_old
mv /etc/puppet/ /etc/puppet_old


Теперь переходим в папку со старыми архивами и распаковываем их:

tar -xf etc_puppet.tar.gz
tar -xf var_puppet.tar.gz


Переносим папки из архива на место конфигов:
mv etc/puppet/ /etc/puppet
mv var/lib/puppet/ /var/lib/puppet


Потом запускаем сервер:
/etc/init.d/puppetmaster start


После этого, делаем запрос с какого-либо клиента и убеждаемся, что все работает корректно.

среда, 30 декабря 2009 г.

Предопределенные переменные для шаблонов Puppet

У Puppet а есть целый рад очень удобных стандартных констант, полный их список можно посмотреть, вызвав сам facter:

facter
architecture => x86_64
domain => test.ru
facterversion => 1.5.7
fqdn => 'test'
hardwareisa => x86_64
hardwaremodel => x86_64
hostname => monitor
id => root
interfaces => eth0,sit0
ipaddress => 88.
ipaddress_eth0 => 88.
is_virtual => false
kernel => Linux
kernelmajversion => 2.6
kernelrelease => 2.6.18-164.el5
kernelversion => 2.6.18
macaddress => 00:19
macaddress_eth0 => 00:19
manufacturer => MSI
memoryfree => 3.50 GB
memorysize => 3.80 GB
netmask => 255.255.255.255
netmask_eth0 => 255.255.255.255
network_eth0 => 88.
operatingsystem => CentOS
operatingsystemrelease => 5.4
path => /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
physicalprocessorcount => 1
processor0 => Dual-Core AMD Opteron(tm) Processor 1218
processor1 => Dual-Core AMD Opteron(tm) Processor 1218
processorcount => 2
productname => MS-7252
ps => ps -ef
puppetversion => 0.24.8
rubysitedir => /usr/lib/ruby/site_ruby/1.8
rubyversion => 1.8.5
selinux => false
serialnumber => To Be Filled By O.E.M.
sshdsakey => ''
sshrsakey => ''
swapfree => 4.01 GB
swapsize => 4.01 GB
timezone => CET
type => Desktop
uniqueid => c6583524
uptime => 69 days
uptime_days => 69
uptime_hours => 1670
uptime_seconds => 6012655
virtual => physical

Тестирование Ruby erb шаблонов Puppet а

Вот так очень легко искать ошибки:

erb -x -T - templates/rpaf.conf.erb
_erbout = ''; _erbout.concat "\n"
_erbout.concat "RPAFenable On\n"
_erbout.concat "RPAFsethostname On\n"
_erbout.concat "RPAFproxy_ips "; print '127.0.0.1' ; _erbout.concat "\n"
_erbout.concat "
\n"
_erbout

среда, 23 декабря 2009 г.

puppet активация файл-сервера

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

Открываем конфиг:
vi /etc/puppet/fileserver.conf


Создаем папку для хранения конфигов:

mkdir -p /etc/puppet/files


Добавляем туда следующее (где ip.ad.dr.es - IP клиентской машины, которой позволено скачивать этот конфиг):

[files]
path /etc/puppet/files
allow ip.ad.dr.es


Перезапускаем:

/etc/init.d/puppetmaster restart


Размещаем конфиг sudoers в папке (конфиг, думаю сами сгенерите, ага?):
vi /etc/puppet/files/sudoers


А теперь в конфиг site.pp можем внести примерно следующее (puppet:/// - означает, что подключаемся к дефалтному серверу, в /files/ - это имя модуля, а не путь в фс):

package {
sudo:
ensure => latest
}

file {
"/etc/sudoers":
mode => 440,
owner => 'root',
group => 'root',
source => "puppet:///files/sudoers"
}


Запускаем синхронизацию:

puppetd --verbose --test

вторник, 22 декабря 2009 г.

Использование Puppet для управления конфигурациями

Сервер конфигураций

Подключаем Epel: http://phpsuxx.blogspot.com/2009/03/centos-rhel.html

Ставим пакет:
yum install -y puppet-server


Итого, сервер puppet имеет следующий набор конфигов:

ls /etc/puppet/
fileserver.conf manifests puppet.conf


Сразу можно оценить поистине ОГРОМНЫЙ набор конфигов:

ls -l /usr/lib/ruby/site_ruby/1.8/puppet/provider
augeas host naginator.rb selmodule
computer ldap.rb nameservice service
confine macauthorization nameservice.rb ssh_authorized_key
confine_collection.rb mailalias package sshkey
confine.rb maillist package.rb user
confiner.rb mcx parsedfile.rb zfs
cron mount port zone
group mount.rb selboolean zpool


Создаем стандартный конфиг (Now we'll create the site.pp manifest which is the master manifest. Puppet will search for a manifest by this name by default. ):
vi /etc/puppet/manifests/site.pp


А теперь сделаем финт ушами - будем ставить sudo посредством puppet. Для этого в выше указанынй файл забиваем следующее:

package {
sudo:
ensure => latest
}


Запускаем сервер (автоматически он в автозапуск не прописывается):

/etc/init.d/puppetmaster start


Добавляем сервер в автозапуск:

chkconfig puppetmaster on


Открываем в фаерволле доступ к Puppet:
iptables -A INPUT -p tcp --dport 8140 -j ACCEPT


Сохраняем настройки фаерволла:
/etc/init.d/iptables save


Кстати, если у Вас очень много машин, то не лишним будет запроксировать Puppet посредством Nginx, как это сделать, описывается здесь. А если хотите использовать Passenger / Mongrel, то прошу сюда: http://docs.puppetlabs.com/guides/scaling.html

Клиент

Подключаем Epel: http://phpsuxx.blogspot.com/2009/03/centos-rhel.html

yum install puppet -y


Либо, если клиентская машина на Debian:
apt-get install puppet -y


Далее в случае Debian необходимо убрать Puppet из автозагрузки:
update-rc.d -f puppet remove
/etc/init.d/puppet stop


Клиент имеет всего-лишь один конфиг-файл:

ls /etc/puppet/
puppet.conf


Открываем конфиг файл:

vi /etc/puppet/puppet.conf


Теперь в блок [puppetd] добавляем следующее (это адрес нашего puppet сервера):

server=puppet.server.ru


Теперь запускаем команду тестирования конфига:

puppetd --verbose --test
warning: peer certificate won't be verified in this SSL session
notice: Did not receive certificate
notice: Set to run 'one time'; exiting with no certificate


Есть еще вариант запуска без демонизации (в обычном случае puppet запускает своего демона, а onetime запрещает ему это делать):
puppetd --verbose --test --onetime


Теперь сертификат клиентской машинки будет отослан на сервер и нам необходимо сходить на сервер и посмотреть, что это произошло успешно:
puppetca --list
client.domain.ru


Теперь нам необходимо его подписать (опять же на сервере):

puppetca --sign client.domain.ru
Signed client.domain.ru


Возвращаемся на клиента:

puppetd --verbose --test


В ответ мы должны получить следующее:
warning: peer certificate won't be verified in this SSL session
notice: Got signed certificate
info: No classes to store
info: Caching catalog at /var/lib/puppet/localconfig.yaml
notice: Starting catalog run
notice: //Package[sudo]/ensure: created
notice: Finished catalog run in 10.89 seconds


Ну вот и все:
sudo был установлен:

rpm -qa | grep sudo
sudo-1.6.9p17-5.el5


Что еще сказать - это мегасупер штука, обеспечивающая ОГРОМНУЮ экономию времени на деплой систем :)

Вопросы

1. Можно ли использовать Puppet клиент на сервере, где установлен Puppet сервер? Да, можно, все будет отлично работать.

Основано на: http://habrahabr.ru/blogs/linux/68532/ а вот и список всех "контроллеров" (для управления различными частями ОС) и их возможностей: http://reductivelabs.com/trac/puppet/wiki/TypeReference#package

Configuration Managament на практике!

Давно еще нашел отличные статьи про Puppet - http://phpsuxx.blogspot.com/2009/10/puppet.html теперь пришло время его попробовать на деле (ага, синхронизация /etc/aliases, /etc/sudoers, /etc/rsyslog.conf, /etc/httpd/conf, sysctl.conf, /etc/sysconfig/iptables-config/sendmail/yumignore это дико полезно и удобно ) :) Ждите статей)

Причем, после долгих прикидок и изучения - puppet можно заочно отнести к софту "так бы и сам написал", что очень радует :)