Перейти к содержанию

Условия

Условия — это механизм InfraVision для оценки того, соответствует ли набор данных заданному набору условий. Он позволяет автору передавать простую логику, объявляя произвольное количество кортежей атрибут-значение-операция, вложенных в иерархию логических операторов И и ИЛИ.

Условия

Условие выражается в виде JSON-объекта со следующими ключами:

Имя ключа Обязателен По умолчанию Описание
attr Да - Имя ключа в оцениваемых данных
value Да - Эталонное значение, с которым будут сравниваться данные
op Нет eq Логическая операция, которая будет выполнена
negate Нет False Инвертировать результат оценки условия

Доступные операции

  • eq: Равно
  • gt: Больше чем
  • gte: Больше или равно
  • lt: Меньше чем
  • lte: Меньше или равно
  • in: Присутствует в списке значений
  • contains: Содержит указанное значение

Доступ к вложенным ключам

Для доступа к вложенным ключам используйте точки для обозначения пути к нужному атрибуту. Например, предположим следующие данные:

{
  "a": {
    "b": {
      "c": 123
    }
  }
}

Следующее условие будет оценено как истинное:

{
  "attr": "a.b.c",
  "value": 123
}

Примеры

name равно "foo":

{
  "attr": "name",
  "value": "foo"
}

name не равно "foo"

{
  "attr": "name",
  "value": "foo",
  "negate": true
}

asn больше 65000:

{
  "attr": "asn",
  "value": 65000,
  "op": "gt"
}

status не равен "planned" или "staging":

{
  "attr": "status.value",
  "value": ["planned", "staging"],
  "op": "in",
  "negate": true
}

Примечание

Обратите внимание при оценке полей статического выбора, таких как поле status выше. Эти поля обычно отрисовываются как словарь, указывающий как сырое значение поля (value), так и его понятную метку (label). Обязательно укажите, по какому из них вы хотите выполнять сопоставление.

Наборы условий

Несколько условий можно объединить во вложенные наборы, используя логику И или ИЛИ. Это делается путём объявления JSON-объекта с единственным ключом (and или or), содержащим список объектов условий и/или дочерних наборов условий.

Примеры

status равен "active" и primary_ip4 определён или применён тег "exempt".

{
  "or": [
    {
      "and": [
        {
          "attr": "status.value",
          "value": "active"
        },
        {
          "attr": "primary_ip4",
          "value": null,
          "negate": true
        }
      ]
    },
    {
      "attr": "tags.slug",
      "value": "exempt",
      "op": "contains"
    }
  ]
}