Общие рекомендации
Строковые значения аргументов методов и статические строки в самих выражениях рекомендуется заключать в двойные кавычки, а одинарные использовать только для ограничения строковых значений параметров YAML–формата.
Системные переменные
Наименование | Описание | Примеры использования |
---|---|---|
$rlm | Стандартные коды возврата модуля |
|
| Пользовательские переменные, используемые для хранения промежуточных результатов вычислений в ходе обработки запроса. Они сохраняют своё значение на всех этапах обработки: от получения запроса до отправки ответа. Структура динамически формируется в процессе обработки каждого конкретного запроса в соответствии с конфигурацией используемых фильтров. |
|
$request | Атрибуты RADIUS-запроса, полученные от модуля Структура зависит от типа запроса и может включать следующие элементы верхнего уровня:
|
|
$response | Атрибуты RADIUS-ответа, которые будут отданы модулю Структура зависит от типа запроса и конфигурации плагина, может включать следующие элементы верхнего уровня:
|
|
$customer_profile | Профиль абонентского оборудования, подобранный в кэше при обработке запроса. Заполняется при успешном подборе абонентского профиля, структура соответствует записи в коллекции Если подбор профиля оборудования не выполнялся или завершился с пустым результатом, то элементы верхнего уровня в словаре всё равно присутствуют. |
|
$provider_profile | Профиль операторского оборудования, подобранный в кэше при обработке запроса. Заполняется при успешном подборе операторского профиля, структура соответствует записи в коллекции Если подбор профиля оборудования не выполнялся или завершился с пустым результатом, то элементы верхнего уровня в словаре всё равно присутствуют. |
|
| Идентификатор привязки абонентского оборудования ( | |
$context | Весь контекст обработки запроса, включающий в себя теги, переменные, данные запроса и ответа. Используется, как правило, только для проверки установленности тегов. |
|
$session | Сессия, подобранная в кэше при обработке пакета аккаунтинга. Если подходящая запись в кэше не найдена, значит обрабатывается первый пакет аккаунтинга по сессии — выполняется подбор профилей оборудования, а в словаре присутствуют только элементы верхнего уровня. |
|
Операторы
Обозначение | Описание |
---|---|
or , and , not | Логические операторы: дизъюнкция, конъюнкция, отрицание. |
<= , < , >= , > | Операторы отношения: меньше или равно, меньше, больше или равно, больше. |
== , != | Операторы сравнения: равно, не равно. |
+ , - , * , / , % | Арифметические операторы: сложение, вычитание, умножение, деление, деление по модулю. |
Методы
Перечисленные ниже методы могут применяться к стандартным словарям и их элементам, отделяясь от них точкой. Для последовательного применения нескольких методов необходимо указывать их друг за другом, разделяя точкой.
Проверки
Формат вызова | Описание | Примеры использования |
---|---|---|
| Является ли значение
|
|
| Заканчивается ли | $response.RAD_REPLY.DHCP-Subnet-Mask.ends_with?("/32") |
| Присвоен ли тег запросу? Применяется только к переменной $context . |
|
| Содержится ли строка Входит ли значение |
|
| Является ли <string> IPv4-адресом? | $request.RAD_REQUEST.Agent-Remote-Id.ip4?() |
| Является ли <string> маской IPv4-подсети? | $request.RAD_REQUEST.DHCP-Subnet-Mask.ip4_mask?() |
| Соответствует ли <string> регулярному выражению <pattern> ? Синтаксис регулярных выражений идентичен библиотеке re в Python. |
|
| Является ли <string> MAC-адресом? | $request.RAD_REQUEST.Agent-Remote-Id.mac?() |
| Пуст ли словарь <dictionary> ? | $customer_profile.null?() |
| Заполнен ли словарь или задано ли значение? |
|
| Принадлежит ли IPv4-адрес
| $request.RAD_REQUEST.Agent-Remote-Id.private_ip4?() |
| Начинается ли <string> строкой <prefix> ? Если указаны опциональные аргументы, проверяется подстрока c символа <start_position> до символа <end_postion> . Символы нумеруются с нуля, верхняя граница интервала не включается. |
|
Преобразования
Формат вызова | Описание | Примеры использования | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
<value>.coalesce(<arg1>[, <arg2>[, <arg3>...]]) | Возвращение первого отличного от None аргумента из <arg1> , <arg2> и т.д., если <value> равен None . В качестве аргументов могут быть указаны как фиксированные значения, так и вычисляемые выражения. |
| ||||||||||||||||||||
<dictionary>.except(<key_1>[, <key_2>[, ...]]) | Исключение из словаря <dictionary> элементов с ключами <key_1> , <key_2> и т. д. |
| ||||||||||||||||||||
| Приведение MAC–адреса <string> к верхнему регистру и форматирование его разбиением на <groups> групп с разделителем <delimeter> между ними. Если аргумент <delimeter> не передан, в качестве разделителя используется дефис. Если аргумент <groups> не передан, адрес разбивается на 6 групп. |
| ||||||||||||||||||||
| Перевод гигабайтов в байты умножением числа <number> на 230. |
| ||||||||||||||||||||
| Побитовое И для IPv4–адреса <string> и маски подсети <mask_string> . Можно использовать для получения адреса подсети. |
| ||||||||||||||||||||
| Побитовое ИЛИ для IPv4–адреса |
| ||||||||||||||||||||
| Извлечение из строки <string> IPv4–адреса. Если адресов в <string> несколько, возвращается первый из них. Если адресов нет, возвращается пустая строка. |
| ||||||||||||||||||||
| Объединение элементов списка <list> в одну строку с использованием разделителя <delimeter> . Если аргумент <delimeter> не передан, разделитель не используется. |
| ||||||||||||||||||||
| Вычисление количетсва элементов списка <list> , словаря <dictionary> или длины строки <string> . |
| ||||||||||||||||||||
| Приведение строки <string> к нижнему регистру. |
| ||||||||||||||||||||
| Формирование из списка <list_of_kvp> пар (ключ, значение) списка строк, полученных объединением ключа и соответствующего ему значения. Ключ и значение в строках разделяются символом <delimeter> . Если аргумент <delimeter> не передан, в качестве разделителя используется запятая. |
| ||||||||||||||||||||
| Обновление словаря
|
| ||||||||||||||||||||
| Получение остатка от деления <value> на <divider> с предварительным приведением <value> к целому числу методом to_i() . Аналог оператора % . |
| ||||||||||||||||||||
| Приведение MAC–адреса из строки <string> к формату, используемому Гидрой: верхний регистр, пары шестнадцатеричных цифр разделены дефисом. |
| ||||||||||||||||||||
| Дополнение строки <string> до длины <length> путём добавления в начало символов <character> . Если длина строки меньше или равна указанной в <length> , возвращается исходная строка <string> . |
| ||||||||||||||||||||
| Дополнение строки <string> до длины <length> путём добавления в конец символов <character> . Если длина строки меньше или равна указанной в <length> , возвращается исходная строка <string> . |
| ||||||||||||||||||||
| Приведение словаря <dictionary> к списку пар (ключ, значение), лексикографически упорядоченных по ключу. |
| ||||||||||||||||||||
| Замена в строке <string> удовлетворяющих регулярному выражению <regexp> подстрок в соответствии с шаблоном <replacement_template> . Если <replacement_template> не задан, подстроки удаляются. В шаблоне могут использоваться ссылки на группы из регулярного выражения. Правила замены и синтаксис шаблона идентичны таковым у метода re.sub в Python за исключением необходимости дополнительного экранирования символа \ в шаблоне. |
$var.Circuit-Id.regexp_replace("^0x0005(?P<vlan>[0-9a-f]{4})(?P<slot>[0-9a-f]{4})(?P<port>[0-9a-f]{2})$", "0x0006\g<vlan>\g<slot>00\g<port>")
| ||||||||||||||||||||
| Замена в строке <string> подстрок <string_to_replace> на <replacement> . Если <replacement> не задан, подстроки удаляются. |
| ||||||||||||||||||||
| Изменение порядка символов строки <string> или элементов списка <list> на обратный. |
| ||||||||||||||||||||
| Разбиение строки |
| ||||||||||||||||||||
| Удаление пробелов в начале и конце строки <string> . |
| ||||||||||||||||||||
| Извлечение подстроки из Значения границ могут быть отрицательными — в таком случае символы считаются от конца строки. |
| ||||||||||||||||||||
| Приведение строки в формате <format> к дате с временем (тип datetime.datetime в Python). Правила преобразования и описания формата идентичны таковым у метода datetime.strptime в Python. |
| ||||||||||||||||||||
| Приведение количества дней <number> к разнице между датами с временем (тип datetime.timedelta в Python). <number> — целое число, либо преобразуемая к такому числу строка. |
| ||||||||||||||||||||
до 4.2.10.6 | Перевод целого числа <number> в шестнадцатеричную систему с возвращением результата в виде строки в нижнем регистре с префиксом 0x . |
| ||||||||||||||||||||
c 4.2.10.6 | Возвращает строку, содержащую шестнадцатеричное представление строки <string> . |
| ||||||||||||||||||||
| Приведение количества часов <number> к разнице между датами с временем (тип datetime.timedelta в Python). <number> — целое число, либо преобразуемая к такому числу строка. |
| ||||||||||||||||||||
<value>.to_i([<base>]) | Приведение |
| ||||||||||||||||||||
| Приведение количества минут <number> к разнице между датами с временем (тип datetime.timedelta в Python). <number> — целое число, либо преобразуемая к такому числу строка. |
| ||||||||||||||||||||
| Приведение <value> к строке. Если <value> — это дата с временем (тип datetime.datetime в Python), то она будет преобразована в соответствии с форматом <format> (его указание в этом случае обязательно). Правила преобразования и описания формата идентичны таковым у метода datetime.strftime в Python. |
| ||||||||||||||||||||
| Приведение количества секунд <number> к разнице между датами (тип datetime.timedelta в Python). <number> — целое число, либо преобразуемая к такому числу строка. |
| ||||||||||||||||||||
| Определение длины префикса IPv4-подсети с маской <string> (суффикса подсети в CIDR-нотации). |
| ||||||||||||||||||||
| Формирование маски IPv4-подсети с длиной префикса равной <number> бит. <number> — целое число от 0 до 32, либо преобразуемая к такому числу строка. |
| ||||||||||||||||||||
| Возвращение соответствующего ключу
|
| ||||||||||||||||||||
| Декодирование строки <string> , представленной в виде шестнадцатеричных кодов символов (формат ASCII-HEX). Если в исходной строке есть префикс 0x , он отбрасывается. |
| ||||||||||||||||||||
| Приведение строки <string> к верхнему регистру. |
|