Назад | Перейти на главную страницу

cfengine3 выводит каталог

Я начал запускать cfengine3, используя cf-execd для планирования запусков cf-agent с интервалом по умолчанию каждые 5 минут.

cf-execd захватывает вывод cf-agent (который запускается с параметром --inform), сохраняет вывод в каталоге $ WORKDIR / output, а также отправляет результат по электронной почте (но только если он отличается от последнего запуска). Как вы можете себе представить, с выходным файлом каждые 5 минут этот каталог быстро заполнится большим количеством файлов, и ожидается, что пользователь очистит этот каталог.

Я создал правило, которое удалит эти выходные файлы, возраст которых превышает 3 дня, однако проблема, которую это создает, заключается в том, что каждый вывод будет отличаться от предыдущего (поскольку каждый раз будет удаляться новый файл), поэтому электронное письмо будет послал. Так что я перехожу от большого количества файлов в каталоге выходов к большому количеству писем в моем почтовом ящике!

Чего я действительно хотел бы, так это подавления сообщений при восстановлении определенных обещаний, особенно того, который удаляет файлы в каталоге выходов. По сути, это отменит параметр -I только для этого обещания. В качестве альтернативы, если бы я мог изменить временную границу с «сейчас» на фиксированную точку (скажем, каждую среду), я мог бы хотя бы ограничить количество писем до одного в неделю.

Похоже, вы так и не получили ответа на свой вопрос, поэтому я публикую его сейчас в духе «лучше поздно, чем никогда».

Ты спрашивал:

Чего я действительно хотел бы, так это подавления сообщений при восстановлении определенных обещаний, особенно того, который удаляет файлы в каталоге выходов. По сути, это аннулирует параметр -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");
}

На самом деле я пришел к еще более простому ответу - не запускайте cf-agent с --inform.

Просто позвольте cf-engine сделать это, и не пытайтесь отслеживать, какие ремонты выполняются, основная проблема заключается в том, что система пришла в желаемое состояние, а не как она туда попала.

Это может показаться анафемой режиму управления изменениями, который хочет отслеживать каждое изменение в системе с мельчайшими подробностями, однако я обнаружил, что это единственный образ мышления, который позволяет использовать cf-engine, оставаясь при этом в здравом уме.

Конечно, ваш ответ на заданный мною вопрос был строго правильным, поэтому я поставил галочку.

В моем «унаследованном» развертывании я обнаружил, что garbage_collection связка уже в site.cf, но ниоткуда не звонили. Мне нужно добавить последовательность пакетов в promises.cf

Не уверен, будет ли это так в новом развертывании; если да, возможно, вам нужно обновить свои обещания (я знаю, что мне нужно)

Надеюсь, это поможет, Кэмерон