В процессе работы с Puppet было замечено две периодические баги, которые создают неудобства эксплуатации, но при этом замечательно лечатся через cron.
- Первый баг:
Notice: Run of Puppet configuration client already in progress; skipping (/var/lib/puppet/state/agent_catalog_run.lock exists)
Периодически зависающий «lock» файл, который может образоваться, например следствии некорректной перезагрузки сервера. В настройках Puppet нельзя указать время жизни данного файла, да и сам демон за временем создания «lock» не следит. Решение — удаление через cron.
# cat puppetlock 3 * * * * root /bin/find /var/lib/puppet/state/agent_catalog_run.lock -type f -mmin +60 -exec rm -f {} \; > /dev/null 2>&1
- Второй баг:
Number and status of runs during the last 30 days: — No runs found to report —
Отсутствие активности puppet clent. Решение простое — принудительный запуск «puppet agent -t» с консоли или через «cron»
Проще всего распространить политику через puppet.
Для того, чтобы не создавать пиковую нагрузку на сервер, сделаем случайное время выполнения задачи через «fqdn_rand()».
В рамках одного клиента для данного манифеста рандомное значение меняться не будет, т.е. задание будет выполняться в одно и тоже время.
cat /etc/puppet/modules/puppet/manifests/init.pp cron { "puppet_agent_t": ensure => present, command => "/usr/bin/puppet agent --onetime --no-daemonize --logdest syslog > /dev/null 2>&1", user => 'root', hour => [fqdn_rand(23)], minute => [fqdn_rand(30)] }
Puppet внесет свои коррективы в «/var/spool/cron/», о чем вежливо предупредит, при этом существующие задачи сохранятся.
# cat /var/spool/cron/root # HEADER: This file was autogenerated at Mon May 05 11:50:32 +0400 2014 by puppet. # HEADER: While it can still be managed manually, it is definitely not recommended. # HEADER: Note particularly that the comments starting with 'Puppet Name' should # HEADER: not be deleted, as doing so could cause duplicate cron jobs. # Puppet Name: puppet_agent_t 24 5 * * * /usr/bin/puppet agent --onetime --no-daemonize --logdest syslog > /dev/null 2>&1