Строковые значения аргументов заключать в двойные кавычки, а одинарные использовать только для ограничения строковых значений параметров YAML–формата.
plugins: base: jmx5-qinq: ... actions: authorize: ... reply: - condition: $context.has_tag?("cpe_is_up_to_date") and $context.has_tag?("network_access_allowed") template: RAD_REPLY: 'ERX-Service-Activate:1': '$customer_profile.attributes.try("Internet-Service-Code", "") + "(" + $customer_profile.attributes.try("Speed-Limit-bps", "0") + ")"' 'ERX-Service-Statistics:1': '"time-volume"' Framed-IP-Address: $customer_profile.attributes.try("CPE-IP") Framed-IP-Netmask: $customer_profile.attributes.try("CPE-IP-Mask") Service-Type: '"Framed-User"' Session-Timeout: '"900"' ... |
Наименование | Описание | Примеры использования | ||
---|---|---|---|---|
$rlm | Стандартные коды возврата модуля
|
| ||
| Пользовательские переменные, используемые для хранения промежуточных результатов вычислений в ходе обработки запроса. Они сохраняют своё значение на всех этапах обработки: от получения запроса до отправки ответа. Структура динамически формируется в процессе обработки каждого конкретного запроса в соответствии с конфигурацией используемых фильтров.
|
| ||
$request | Атрибуты RADIUS-запроса, полученные от модуля Структура зависит от типа запроса и может включать следующие элементы верхнего уровня:
|
| ||
$response | Атрибуты RADIUS-ответа, которые будут отданы модулю Структура зависит от типа запроса и конфигурации плагина, может включать следующие элементы верхнего уровня:
|
| ||
| Профиль абонентского оборудования, подобранный в кэше при обработке запроса. Заполняется при успешном подборе абонентского профиля, структура соответствует записи в коллекции
Если подбор профиля оборудования не выполнялся или завершился с пустым результатом, то элементы верхнего уровня в словаре всё равно присутствуют.
|
| ||
| Профиль операторского оборудования, подобранный в кэше при обработке запроса. Заполняется при успешном подборе операторского профиля, структура соответствует записи в коллекции
Если подбор профиля оборудования не выполнялся или завершился с пустым результатом, то элементы верхнего уровня в словаре всё равно присутствуют.
|
| ||
| Идентификатор привязки абонентского оборудования ( | |||
$context | Весь контекст обработки запроса, включающий в себя теги, переменные, данные запроса и ответа. В конфигурации в основном используется для проверки наличия тегов.
|
| ||
$session | Сессия, подобранная в кэше при обработке пакета аккаунтинга.
Если подходящая запись в кэше не найдена, значит обрабатывается первый пакет аккаунтинга по сессии — выполняется подбор профилей оборудования, а в словаре присутствуют только элементы верхнего уровня.
|
|
Операторы
Обозначение | Описание |
---|---|
or , and , not | Логические операторы: дизъюнкция, конъюнкция, отрицание. |
<= , < , >= , > | Операторы отношения: меньше или равно, меньше, больше или равно, больше. |
== , != | Операторы сравнения: равно, не равно. |
+ , - , * , / , % | Арифметические операторы: сложение, вычитание, умножение, деление, целочисленное деление. |
Перечисленные ниже методы могут применяться к стандартным словарям и их элементам, отделяясь от них точкой. Для последовательного применения нескольких методов необходимо указывать их друг за другом, разделяя точкой.
Формат вызова | Описание | Примеры использования |
---|---|---|
| Является ли значение «пустым»? Пустыми считаются:
|
|
| Заканчивается ли значение строкой | $response.RAD_REPLY.DHCP-Subnet-Mask.ends_with?("/32") |
| Имеется ли ключ <field_name> в словаре? | $response.RAD_REPLY.has_filed?("DHCP-Flags") |
| Присвоен ли тег запросу? Применяется только к переменной $context . |
|
| Входит ли значение в список <list_of_values> ? | $request.RAD_REQUEST.try("Session-Error-Msg").in?("Radius test by administrator;Authentication failure".split(";")) |
| Является ли значение IPv4-адресом? | $request.RAD_REQUEST.Agent-Remote-Id.ip4?() |
| Является ли значение маской IPv4-подсети? | $request.RAD_REQUEST.DHCP-Subnet-Mask.ip4_mask?() |
| Соответствует ли значение регулярному выражению <pattern> ? Синтаксис регулярных выражений идентичен библиотеке re в Python. |
|
| Является ли значение MAC-адресом? | $request.RAD_REQUEST.Agent-Remote-Id.mac?() |
| Пуст ли словарь? | $customer_profile.null?() |
| Заполнен ли словарь или задано ли значение? |
|
| Принадлежит ли IPv4-адрес к одной из локальных подсетей:
| $request.RAD_REQUEST.Agent-Remote-Id.private_ip4?() |
| Начинается ли значение строкой <prefix> ? Если указаны опциональные аргументы, проверяется подстрока c символа <start_position> до символа <end_postion> . Символы нумеруются с нуля, верхняя граница интервала не включается. |
|
Формат вызова | Описание | Примеры использования |
---|---|---|
<value>.coalesce(<arg1>[, <arg2>[, <arg3>...]]) | Возвращение первого отличного от None аргумента из <arg1> , <arg2> и т.д., если <value> равен None . |
|
| Извлечение из строки <string> подстроки длины <length> , начиная с символа <from_position> . Символы нумеруются с нуля. Если аргумент <length> не передан, подстрока извлекается до конца исходной строки. Если аргумент <type> равен binary , то <from_postition> и <length> умножаются на два (один байт — две шестнадцатеричные цифры), а извлекаемые данные переводятся из шестнадцатеричной системы счисления в десятичную. |
|
| Приведение MAC–адреса <string> к верхнему регистру и форматирование его разбиением на <groups> групп с разделителем <delimeter> между ними. Если аргумент <delimeter> не передан, в качестве разделителя используется дефис. Если аргумент <groups> не передан, адрес разбивается на 6 групп. |
|
| Перевод гигабайтов в байты умножением числа <number> на 230. |
|
| Побитовое И для IPv4–адреса <string> и маски подсети <mask_string> . Можно использовать для получения адреса подсети. |
|
| Побитовое ИЛИ для IPv4–адреса |
|
| Извлечение из строки <string> IPv4–адреса. Если адресов в <string> несколько, возвращается первый из них. Если адресов нет, возвращается пустая строка. |
|
| Объединение элементов списка <list> в одну строку с использованием разделителя <delimeter> . Если аргумент <delimeter> не передан, разделитель не используется. |
|
| Приведение строки <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 за исключением необходимости дополнительного экранирования символа \ в шаблоне. |
|
| Замена в строке <string> подстрок <string_to_replace> на <replacement> . Если <replacement> не задан, подстроки удаляются. |
|
| Изменение порядка символов строки или элементов списка <value> на обратный. |
|
| Разбиение строки |
|
| Удаление пробелов в начале и конце строки <string> . |
|
| Извлечение подстроки из <string> : <from_position> — начало, а <to_position> — окончание. Символы нумеруются с нуля, верхняя граница интервала не включается. Если верхняя граница <to_position> не задана, подстрока извлекается до конца исходной строки. |
|
| Приведение строки в формате <format> к дате с временем (тип datetime.datetime в Python). Правила преобразования и описания формата идентичны таковым у метода datetime.strptime в Python. |
|
| Приведение количества дней <number> к разнице между датами с временем (тип datetime.timedelta в Python). <number> — целое число, либо преобразуемая к такому числу строка. |
|
<number>.to_hex() | Перевод целого числа <number> в шестнадцатеричную систему с возвращением результата в виде строки в нижнем регистре с префиксом 0x . |
|
| Приведение количества часов <number> к разнице между датами с временем (тип datetime.timedelta в Python). <number> — целое число, либо преобразуемая к такому числу строка. |
|
| Приведение |
|
| Приведение количества минут <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> к верхнему регистру. |
|