В пользовательских макросах можно использовать опциональный контекст, который позволяет переопределять значение по умолчанию значением с учётом конкретной ситуации.
Контекст добавляется к имени макроса; синтаксис зависит от того, является ли контекст обычным текстовым значением:
или регулярным выражением:
Обратите внимание, макрос с контекстом в виде регулярного выражения можно задавать только в настройках пользовательских макросов. Если префикс regex:
используется в каком-либо другом месте как контекст пользовательского макроса, например в выражении триггера, этот префикс будет рассматриваться как обычный контекст.
Заключение в кавычки контекста опционально (смотрите также важные замечания).
Примеры контекста макросов:
Пример | Описание |
---|---|
{$LOW_SPACE_LIMIT} |
Пользовательский макрос без контекста. |
{$LOW_SPACE_LIMIT:/tmp} |
Пользовательский макрос с контекстом (статическая строка). |
{$LOW_SPACE_LIMIT:regex:"^/tmp$"} |
Пользовательский макрос с контекстом (регулярное выражение). То же, что и {$LOW_SPACE_LIMIT:/tmp} . |
{$LOW_SPACE_LIMIT:regex:"^/var/log/.*$"} |
Пользовательский макрос с контекстом (регулярное выражение). Соответствует всем строкам с префиксом /var/log/. |
Пользовательские макросы можно задавать для получения более гибких порогов в выражениях триггеров (на основе значений, полученных низкоуровневым обнаружением). Например, вы можете задать следующие макросы:
Затем в прототипе триггеров для обнаружения примонтированных файловых систем можно использовать макрос низкоуровневого обнаружения как контекст ранее добавленного макроса:
После обнаружения к триггерам будут применены разные пороги срабатывания для значений свободного места, в зависимости от обнаруженных точек монтирования или типов файловых систем. События проблем будут сгенерированы, если:
Не создавайте разные макросы с контекстом, которые соответствуют одной строке, чтобы избежать непредвиденного поведения.
Технически, контекст макроса задаётся с использованием правил, похожих на параметры ключей элементов данных, за исключением того, что контекст макроса при наличии символа ,
не обрабатывается как несколько параметров:
"
, если контекст содержит символ }
или он начинается с символа "
. Кавычки внутри заключённого в кавычки контекста необходимо экранировать при помощи символа \
.\
не экранируется, что означает, что невозможно задать заключённый в кавычки контекст, оканчивающийся на символ \
- макрос {$MACRO:"a:\b\c\"} ошибочный.{$MACRO:"A"}
и {$MACRO:" A "}
не одинаковы.Следующие макросы идентичны, так как имеют один и тот же контекст: {$MACRO:A}
, {$MACRO: A}
и {$MACRO:"A"}
. Такое поведение отлично от ключей элементов данных, где key[a]
, key[ a]
и key["a"]
одинаковы семантически, но различны для критерия уникальности.