Я хотел бы иметь метод, который оценивает определенный класс только один раз в день в определенное время. Прямо сейчас я запускаю свой марионеточный агент из cron, но я хотел бы изменить его, чтобы он работал как демон или запускался чаще. Барьер с увеличением частоты заключается в том, что есть один класс, на обработку которого уходит около 4 минут, и это не обязательно должно происходить очень часто. Я пытаюсь найти метод, позволяющий оценивать этот конкретный класс только один раз в день из cron.
Есть ли для меня простой способ установить переменную среды (FOO=bar;puppet agent ..
) или добавьте параметр командной строки (puppet agent .. --foo bar
) в crontab, который станет фактом, который я могу использовать в своих манифестах, чтобы включать или не включать класс?
class foobar {
if 'bar' == $::foo {
# do the slow stuff
}
}
А график звучит так, как будто он предоставит то, что вы ищете. Сначала вы создаете ресурс расписания, который указывает, когда что-то может выполняться и сколько раз в заданный период.
schedule { "slow":
range => "1 - 5",
period => daily,
repeat => 1,
}
Приведенный выше пример будет оцениваться или запускаться только в 1–5 утра и не более одного раза. Вы можете удалить range
параметр, и он будет запускаться в любое время дня, но опять же, только один раз.
В ресурсах вы затем указываете schedule
мета-параметр чтобы связать их с приведенным выше расписанием:
exec { "example":
command => "/usr/bin/foo",
unless => "/usr/bin/bar",
schedule => "slow",
}
Когда вы запускаете Puppet с --debug
, теперь вы увидите следующее, если он уже оценивался указанное количество раз или диапазон неприменим:
debug: /Stage[main]//Exec[example]: Not scheduled
Если у вас есть несколько ресурсов, вы можете использовать параметры ресурса по умолчанию внутри класса вы ограничиваете влияние на все ресурсы одного типа:
Exec {
schedule => "slow",
}
Вам нужно будет сделать это для каждого типа ресурса - Exec, File, Augeas и т. Д.
Пара замечаний по улучшению этого:
schedule
мета-параметр класса не работает, возможно, стоит поднять ошибкуЯ считаю, что это можно сделать с помощью Окружающая среда декларация. Вы вызываете его из командной строки:
puppet agent --environment latetbus
Вы можете использовать его, чтобы указать другой манифест в файле puppet.conf:
[latebus]
manifest = $confdir/latetbus/site.pp
И даже может так делать разные модули.
Также существует способ добавление пользовательских фактов в facter. Это использует плагины для работы. Вы создаете собственный рубиновый файл, чтобы что-то проверить:
# run_latebus.rb
facter.add("latebus_exec") do
setcode do
%x{if [ -e /tmp/run_latebus ] ; then echo "true" ; else echo "false" ; fi}.chomp
end
end
Где сценарий вызова марионеточного агента touch /etc/run_latebus
до начала puppet agent
, который оценивается Facter во время выполнения марионетки.
Файл .rb размещен в настраиваемом модуле, в частности в lib/facter
каталог самого модуля.