Я пытаюсь отправлять разные уведомления в разные периоды времени, в основном я хочу отправлять все уведомления в рабочее время, но только уведомления для хостов, отмеченных как аварийные в нерабочее время.
apply Notification "mike-on" to Host {
import "mail-host-notification"
users = [ "sms" ]
period = "mikehours"
assign where host.vars.notification.mail
}
apply Notification "mike-off" to Host {
import "mail-host-notification"
users = [ "sms" ]
period = "nonmikehours"
assign where host.vars.emergency == true
}
sms - это просто контакт с адресом электронной почты mynumber@carrier.net, а периоды времени определены следующим образом
object TimePeriod "mikehours" {
import "legacy-timeperiod"
display_name = "Mike's work hours"
ranges = {
"monday" = "06:00-23:00"
"tuesday" = "06:00-23:00"
"wednesday" = "06:00-23:00"
"thursday" = "06:00-23:00"
"friday" = "06:00-23:00"
"saturday" = "07:00-22:00"
"sunday" = "07:00-22:00"
}
}
object TimePeriod "nonmikehours" {
import "legacy-timeperiod"
display_name = "Mike's off hours"
ranges = {
"monday" = "00:00-06:00,23:00-24:00"
"tuesday" = "00:00-06:00,23:00-24:00"
"wednesday" = "00:00-06:00,23:00-24:00"
"thursday" = "00:00-06:00,23:00-24:00"
"friday" = "00:00-06:00,23:00-24:00"
"saturday" = "00:00-07:00,22:00-24:00"
"sunday" = "00:00-07:00,22:00-24:00"
}
}
Тем не менее, я до сих пор получаю все уведомления по смс даже вне указанного рабочего времени.
Правила применения оцениваются самостоятельно. Если ваши выражения assign / ignore where совпадают (например, «assign where host.vars.notification.mail», вероятно, соответствует всем хостам), они сгенерируют объект уведомления. Убедитесь, что с помощью «списка объектов» или остальных конечных точек api / v1 / objects / notifications. Второе правило применения соответствует только заданному настраиваемому атрибуту и добавляет дополнительный объект уведомления. Итак, решение вашего комментария в порядке.
Кстати, вы можете опустить сравнение "== true". Icinga 2 предполагает это автоматически для логических атрибутов.
Я нашел это решение, которое мне подходит:
apply Notification "mike-on" to Host {
import "mail-host-notification"
users = [ "sms" ]
period = "mikehours"
assign where host.vars.notification.mail && !host.vars.emergency
}
apply Notification "emergency" to Host {
import "mail-host-notification"
users = [ "sms" ]
period = "24x7"
assign where host.vars.emergency == true
}
Я все еще хотел бы получить ответ о том, почему мое первоначальное решение не удалось, но в любом случае это гораздо лучший способ сделать это.