Выходной каталог cfengine3
Я начал запускать cfengine3, используя cf-execd для планирования запусков cf-agent с интервалом по умолчанию каждые 5 минут.
cf-execd захватывает выходные данные cf-agent (который запускается с опцией --inform), сохраняет выходные данные в каталоге $WORKDIR/output и также отправляет результат по электронной почте (но только если он отличается от последнего запуска). Как вы можете себе представить, с выходным файлом каждые 5 минут, этот каталог будет быстро заполняться большим количеством файлов, и ожидается, что пользователь очистит этот каталог.
Я создал правило, которое будет удалять эти выходные файлы, которые имеют возраст более 3 дней, однако проблема, которую это создает, заключается в том, что каждый выходной файл будет отличаться от предыдущего (так как новый файл будет удаляться каждый раз), следовательно, электронное письмо будет послал. Поэтому я перехожу от множества файлов в директории выходных данных к большому количеству писем в моем почтовом ящике!
Что мне действительно хотелось бы, так это подавлять сообщения, когда исправляются определенные обещания, особенно то, которое удаляет файлы в выходном каталоге. По существу, это отменит опцию -I только для этого обещания. В качестве альтернативы, если бы я мог изменить временную границу с "сейчас" на фиксированную точку (скажем, каждую среду), я мог бы, по крайней мере, ограничить количество писем до одного в неделю.
3 ответа
Похоже, вы так и не получили ответ на свой вопрос, поэтому я публикую это сейчас в духе "лучше поздно, чем никогда".
Вы спрашивали:
Что мне действительно хотелось бы, так это подавлять сообщения, когда исправляются определенные обещания, особенно то, которое удаляет файлы в выходном каталоге. По существу, это отменит опцию -I только для этого обещания.
Насколько я знаю, невозможно отключить ключ --inform для одного обещания.
В качестве альтернативы, если бы я мог изменить временную границу с "сейчас" на фиксированную точку (скажем, каждую среду), я мог бы, по крайней мере, ограничить количество писем до одного в неделю.
Это может быть достигнуто с помощью параметра "ifelapsed" - это дает минимальную частоту выполнения обещания. Рассмотрим этот пример:
bundle agent garbage_collection {
files:
"$(sys.workdir)/outputs"
delete => tidy,
file_select => days_old("3"),
depth_search => recurse("inf"),
action => weekly;
}
body action weekly {
ifelapsed => 10080; # one week, ie (60*24*7) minutes
}
Или вы можете просто выполнить это обещание по средам, используя специальный класс. Я предпочитаю ifelapsed
подход, который не зависит от дня недели (вы никогда не знаете, может ли этот хост не работать в одну среду...), например:
bundle agent garbage_collection {
files:
Wednesday::
"$(sys.workdir)/outputs"
delete => tidy,
file_select => days_old("3"),
depth_search => recurse("inf");
}
В моем "унаследованном" развертывании я обнаружил, что garbage_collection
связка уже в site.cf
, но это не было вызвано ниоткуда. Мне нужно добавить последовательность последовательности в promises.cf
Не уверен, что так будет в новом развертывании; если так, возможно, вам нужно обновить свои обещания (я знаю, что мне нужно)
Надеюсь, это поможет, Кэмерон
На самом деле я пришел к еще более простому ответу - не запускайте cf-agent с --inform.
Просто позвольте cf-engine делать свое дело и не пытайтесь отслеживать, какие ремонтные работы выполняются, главное, чтобы система прибыла в желаемое состояние, а не как она туда попала.
Это может показаться анафемой для режима управления изменениями, который хочет отслеживать каждое изменение в системе в мучительных деталях, однако я обнаружил, что это единственное мышление, позволяющее использовать cf-engine, оставаясь в здравом уме.
Конечно, ваш ответ был строго правильным на вопрос, который я поставил, поэтому я поставил галочку.