Tarantool CE/EE Documentation portal logo
Помощь
Обновлена 15 сентября 2026 г. в 08:55

Подмодуль experimental.config.utils.schema

Начиная с: 3.2.0

Модуль experimental.config.utils.schema используется для проверки и обработки частей конфигураций кластера, имеющих произвольные пользовательские структуры:

  • app.cfg для приложений, загружаемых с помощью параметра app

  • roles_cfg для пользовательских ролей, разработанных как часть кластерного приложения Модуль предоставляет API для получения и установки значений конфигурации, фильтрации и преобразования данных конфигурации и т. д.

Начало работы с config.utils.schema

В качестве примера рассмотрим прикладную роль, у которой есть единственный параметр конфигурации — адрес HTTP-эндпоинта.

roles: [ http_api ]

Для обработки конфигурации роли можно использовать модуль experimental.config.utils.schema следующим образом:

  1. Загрузите модуль:
local schema = require('experimental.config.utils.schema')local http_api_schema = schema.new('http_api', schema.scalar({ type = 'string' }))local function validate(cfg)    http_api_schema:validate(cfg)endlocal function apply(cfg)    local http_api_cfg = http_api_schema:get(cfg)    log.info("HTTP API endpoint: %s", http_api_cfg)endlocal function stop()    log.info("The 'http_api' role is stopped")endreturn {    validate = validate,    apply = apply,    stop = stop,}
  1. Определите схему — корневой объект, хранящий информацию о конфигурации роли — с помощью schema.new(). В примере ниже показана схема, включающая один строковый параметр:
local http_api_schema = schema.new('http_api', schema.scalar({ type = 'string' }))
Подробнее см. в[config_utils_schema_definition](#config_utils_schema_definition).

3. Используйте метод validate() объекта схемы для проверки значений конфигурации на соответствие схеме. Для роли вызовите этот метод внутри функции validate() роли:

local function validate(cfg)    http_api_schema:validate(cfg)end
Подробнее см. в[config_utils_schema_validating_configuration](#config_utils_schema_validating_configuration).

4. Обращайтесь к значениям параметров конфигурации с помощью метода

: get() внутри функции apply() роли. Подробнее см. в config_utils_schema_get_configuration.

Определение схемы

Схема конфигурации хранит информацию о заданной пользователем структуре конфигурации, которая может быть передана в секцию app.cfg или roles_cfg. Она включает имена параметров, типы, иерархию и другие аспекты конфигурации.

Для создания схемы используйте функцию schema.new(). Она принимает следующие аргументы:

  • Имя схемы — произвольная строка, используемая в качестве идентификатора.

  • Корневой узел схемы — таблица, описывающая иерархическую структуру схемы, начиная с корня.

  • (Необязательно) методы — пользовательские функции, которые можно вызывать для этого объекта схемы. .. config_utils_schema_nodes:

Узлы схемы

Узлы схемы описывают иерархию параметров в схеме. Существует два типа узлов схемы:

  • Скалярные узлы хранят одно значение поддерживаемого примитивного типа. Например, строковый параметр конфигурации роли является скалярным узлом в её схеме.

  • Составные узлы включают несколько значений в различных формах: записи, массивы или отображения. Узел может иметь аннотации — именованные атрибуты, с помощью которых можно настроить его поведение, например, задать значение по умолчанию.

Скалярные узлы

Скалярные узлы содержат одно значение примитивного типа, например, строку или число. Полный список поддерживаемых скалярных типов см. в config_utils_schema_data_types.

В этой конфигурации есть один скалярный узел типа string:

roles: [ http_api ]

Чтобы определить скалярный узел в схеме, используйте schema.scalar(). Для обработки приведенной выше конфигурации можно использовать следующую схему:

local http_api_schema = schema.new('http_api', schema.scalar({ type = 'string' }))

Если скалярный узел имеет ограниченный набор допустимых значений, его также можно определить с помощью schema.enum(). Передайте список допустимых значений в качестве аргумента:

scheme = schema.enum({ 'http', 'https' }),

Типы данных

Скалярные узлы могут иметь следующие типы данных:

Скалярный тип Тип Lua Комментарий


string

string

: -

    • number

number

: -

    • integer
  • number

  • Только целые числа

    • boolean
  • boolean

  • true or false

    string, number

    : or number, string

string или number

: -

    • any
  • Произвольное значение Lua

  • Может использоваться для объявления произвольного значения, не требующего проверки. .. config_utils_schema_nodes_record:

Записи

Запись — это составной узел, который включает предопределенный набор других узлов, скалярных или составных. В YAML запись представляется как узел с вложенными полями. Например, следующая конфигурация содержит узел-запись http_api с тремя скалярными полями:

roles: [ http_api ]

Чтобы определить узел-запись в схеме, используйте schema.record(). Приведенная ниже схема описывает конфигурацию выше:

local listen_address_schema = schema.new('listen_address', schema.record({    scheme = schema.enum({ 'http', 'https' }),    host = schema.scalar({ type = 'string' }),    port = schema.scalar({ type = 'integer' })}))

Записи также используются для определения вложенных узлов схемы непримитивных типов. В примере ниже узел http_api включает другую запись — listen_address.

roles: [ http_api ]

Приведенная ниже схема описывает эту конфигурацию:

local listen_address_schema = schema.new('listen_address', schema.record({    listen_address = schema.record({        scheme = schema.enum({ 'http', 'https' }),        host = schema.scalar({ type = 'string' }),        port = schema.scalar({ type = 'integer' })    })}))

Массивы

Массив — это составной тип узла, который содержит коллекцию элементов одного типа. Элементы могут быть как скалярными, так и составными узлами.

В YAML элементы массива начинаются с дефиса. Например, следующая конфигурация содержит массив с именем http_api. Каждый его элемент — это запись с тремя полями: host, port и scheme:

roles: [ http-api ]

Чтобы создать узел массива в схеме, используйте schema.array(). Следующая схема описывает эту конфигурацию:

local listen_address_schema = schema.new('listen_address', schema.array({    items = schema.record({        scheme = schema.enum({ 'http', 'https' }),        host = schema.scalar({ type = 'string' }),        port = schema.scalar({ type = 'integer' })    })}))

Также существует функция schema.set(), с помощью которой можно создавать массивы с ограниченным набором допустимых элементов.

Maps

Отображение (map) — тип составного узла, который хранит произвольное количество пар «ключ-значение» предопределенных типов.

In YAML, a map is represented as a node with nested fields. For example, следующая конфигурация содержит узел endpoints:

roles: [ http_api ]

Чтобы создать узел-отображение в схеме, используйте schema.map(). Если узел объявлен как отображение (см. ниже), секция endpoints может содержать любое количество параметров с произвольными именами и булевыми значениями.

local listen_address_schema = schema.new('listen_address', schema.record({    scheme = schema.enum({ 'http', 'https' }),    host = schema.scalar({ type = 'string' }),    port = schema.scalar({ type = 'integer' }),    endpoints = schema.map({ key = schema.scalar({ type = 'string' }),                             value = schema.scalar({ type = 'boolean' }) })}))

Аннотации

Аннотации узла — это именованные атрибуты, определяющие различные его аспекты. Например, у скалярных узлов есть обязательная аннотация type, задающая тип значения узла. Другие аннотации могут, например, задавать значение узла по умолчанию и функцию валидации или хранить произвольные пользовательские данные.

Аннотации передаются в виде таблицы в функцию создания узла:

Аннотации узла делятся на три группы:

  • Встроенные аннотации обрабатываются модулем. К ним относятся: type, validate, allowed_values, default и apply_default_if. Обратите внимание, что validate и allowed_values используются только для валидации. default и apply_default_if могут преобразовывать конфигурацию.

  • Пользовательские аннотации добавляют именованные атрибуты узла, которые могут использоваться в коде приложения или роли.

  • Вычисляемые аннотации предоставляют доступ к аннотациям других узлов

: по всей схеме.

Встроенные аннотации

Встроенные аннотации обрабатываются самим модулем. Существуют следующие встроенные аннотации:

  • type – тип значения узла. Тип должен быть явно указан для скалярных узлов, за исключением созданных с помощью schema.enum(). Для составных узлов и скалярных перечислений соответствующие конструкторы schema.record(), schema.map(), schema.array(), schema.set() и schema.enum() задают тип автоматически.

  • allowed_values – (необязательно) список возможных значений узла.

  • validate – (необязательно) функция валидации для предоставленного значения узла.

  • default – (необязательно) значение, используемое, если параметр не указан в конфигурации.

  • apply_default_if – (необязательно) функция, определяющая, когда применять значение по умолчанию. Рассмотрим следующую конфигурацию роли:

roles: [ http_api ]

Следующая схема использует встроенные аннотации default, allowed_values и validate для определения значений по умолчанию, допустимых значений параметров и функций валидации:

undefined

Функции валидации могут выглядеть следующим образом:

local function validate_host(host, w)    local host_pattern = "^(%d+)%.(%d+)%.(%d+)%.(%d+)$"    if not host:match(host_pattern) then        w.error("'host' should be a string containing a valid IP address, got %q", host)    endendlocal function validate_port(port, w)    if port <= 1 or port >= 65535 then        w.error("'port' should be between 1 and 65535, got %d", port)    endend

Пользовательские аннотации

Узел схемы может иметь пользовательские аннотации с произвольными именами. Такие аннотации используются для реализации пользовательского поведения. Их имена и значения можно получить из схемы и использовать в коде роли или приложения.

Пример: пользовательская аннотация env используется для предоставления имен переменных окружения, из которых можно брать значения конфигурации.

local listen_address_schema = schema.new('listen_address', schema.record({    scheme = schema.enum({ 'http', 'https' }, { env = 'HTTP_SCHEME' }),    host = schema.scalar({ type = 'string', env = 'HTTP_HOST' }),    port = schema.scalar({ type = 'integer', env = 'HTTP_PORT' })}))

Полный пример см. здесь: config_utils_schema_env-vars.

Вычисляемые аннотации ^

Вычисляемые аннотации обеспечивают доступ из узла к аннотациям его узлов-предков.

В приведенном ниже примере функция проверки записи listen_address обращается к аннотации protocol ее узла-предка:

local listen_address = schema.record({    scheme = schema.enum({ 'http', 'https' }),    host = schema.scalar({ type = 'string' }),    port = schema.scalar({ type = 'integer' })}, {    validate = function(data, w)        local protocol = w.schema.computed.annotations.protocol        if protocol == 'iproto' and data.scheme ~= nil then            w.error("iproto doesn't support 'scheme'")        end    end,})

Следующая схема с listen_address проходит проверку:

local http_listen_address_schema = schema.new('http_listen_address', schema.record({    name = schema.scalar({ type = 'string' }),    listen_address = listen_address,}, {    protocol = 'http',}))

Если эта запись добавляется в схему со значением protocol = 'iproto', проверка listen_address завершается с ошибкой:

local iproto_listen_address_schema = schema.new('iproto_listen_address', schema.record({    name = schema.scalar({ type = 'string' }),    listen_address = listen_address,}, {    protocol = 'iproto',}))

Пользовательские методы ~~~~~~~~~~~~~~~~~~~~

В схеме можно реализовать пользовательскую логику с помощью методов — пользовательских функций, которые можно вызывать для этой схемы.

Например, в этой схеме есть метод format, который возвращает ее поля, объединенные в строку URI:

local listen_address_schema = schema.new(        "listen_address",        schema.record(                {                    scheme = schema.enum({ "http", "https" }),                    host = schema.scalar({ type = "string" }),                    port = schema.scalar({ type = "integer" })                }        ),        {            methods = {                format = function(_self, url)                    return string.format("%s://%s:%d", url.scheme, url.host, url.port)                end            }        })

Обработка данных конфигурации

Валидация конфигурации

Метод validate() объекта схемы выполняет все необходимые проверки предоставленной конфигурации. В ходе выполнения проверяются структура конфигурации, типы узлов, допустимые значения и другие аспекты схемы.

При написании ролей вызывайте эту функцию внутри функции валидации роли:

local function validate(cfg)    listen_address_schema:validate(cfg)end

Получение значений конфигурации

Для получения значений конфигурации используйте метод get() объекта схемы. В качестве аргументов метод принимает конфигурацию и полный путь к узлу:

local function apply(cfg)    local scheme = listen_address_schema:get(cfg, 'listen_address.scheme')    local host = listen_address_schema:get(cfg, 'listen_address.host')    local port = listen_address_schema:get(cfg, 'listen_address.port')    log.info("HTTP API endpoint: %s://%s:%d", scheme, host, port)end

Преобразование конфигурации

У объекта схемы есть методы, преобразующие данные конфигурации на основе схемы, например, apply_default(), merge(), set().

В приведенном ниже примере показано, как применить значения по умолчанию из схемы для заполнения отсутствующих полей конфигурации:

local function apply(cfg)    local cfg_with_defaults = listen_address_schema:apply_default(cfg)    local scheme = listen_address_schema:get(cfg_with_defaults, 'scheme')    local host = listen_address_schema:get(cfg_with_defaults, 'host')    local port = listen_address_schema:get(cfg_with_defaults, 'port')    log.info("HTTP API endpoint: %s://%s:%d", scheme, host, port)end

Разбор переменных окружения

С помощью функции schema.fromenv() можно получать значения конфигурации из переменных окружения. В приведенном ниже примере показано, как это сделать, добавив пользовательскую аннотацию env:

local listen_address_schema = schema.new('listen_address', schema.record({    scheme = schema.enum({ 'http', 'https' }, { env = 'HTTP_SCHEME' }),    host = schema.scalar({ type = 'string', env = 'HTTP_HOST' }),    port = schema.scalar({ type = 'integer', env = 'HTTP_PORT' })}))local function collect_env_cfg()    local res = {}    for _, w in listen_address_schema:pairs() do        local env_var = w.schema.env        if env_var ~= nil then            local value = schema.fromenv(env_var, os.getenv(env_var), w.schema)            listen_address_schema:set(res, w.path, value)        end    end    return resend

В этой функции также используются методы объекта схемы:

  • pairs() для перебора узлов схемы.

  • set() для назначения значений конфигурации. .. api-reference-config-utils-schema:

Справочник по API

Функции

schema.array(array_def)

Создание узла типа array в схеме конфигурации.

Параметры:

  • array_def (table) — таблица в следующем формате:
{    items = <schema_node_object>,    <..annotations..>}
Example

См. также: schema_node_object, schema_node_annotation.

Возвращает

созданный узел типа array в виде таблицы со следующими полями:

  • type: array
  • items: таблица, описывающая элемент массива как узел схемы
  • аннотации, если указаны в array_def

Тип возвращаемого значения

table

См. также: config_utils_schema_nodes_array

schema.enum(allowed_values, annotations)

Сокращение для создания скалярного узла строкового типа с ограниченным набором допустимых значений.

  • allowed_values (table) — список членов перечисления — значения, допустимые для узла

  • annotations (table) — аннотации (см. schema_node_annotation)

Возвращает

созданный скалярный узел в виде таблицы со следующими полями:

  • type: string
  • allowed_values: допустимые значения узла
  • аннотации, если указан параметр annotations

Тип возвращаемого значения

table

См. также: config_utils_schema_nodes_scalar

schema.fromenv(env_var_name, raw_value, schema_node)

Разбор переменной окружения как значения заданного узла схемы. Параметр env_var_name используется только для сообщений об ошибках. Значение (raw_value) следует получать с помощью os.getenv() или os.environ().

Способ разбора исходного значения зависит от типа schema_node:

  • Скалярный тип:
    • string: вернуть значение как есть
    • number или integer: разобрать значение как число или целое число
    • string, number: попытаться разобрать как число; в случае неудачи вернуть значение как есть
    • boolean: принимаются true и false (без учета регистра), а также 1 и 0 для значений true и false соответственно
    • any: разобрать значение как JSON
  • Map: разбор как JSON (если исходное значение начинается с {) или как строка пар key=value, разделенных запятыми: key1=value1,key2=value2
  • Array: разбор как JSON (если исходное значение начинается с [) или как строка элементов, разделенных запятыми: item1,item2,item3
  • env_var_name (string) — имя переменной окружения для использования в сообщениях об ошибках

  • raw_value (string) — значение переменной окружения

  • schema_node (schema_node_object) — узел схемы (см. schema_node_object)

Возвращает

разобранное значение

Тип возвращаемого значения

table

См. также: config_utils_schema_env-vars

schema.map(map_def)

Создание узла типа map в схеме конфигурации.

  • map_def (table) — таблица в следующем формате:
{    key = <schema_node_object>,    value = <schema_node_object>,    <..annotations..>}
Example

См. также: schema_node_object, schema_node_annotation.

Возвращает

созданный узел типа map в виде таблицы со следующими полями:

  • type: map
  • key: тип ключа map
  • value: тип значения map
  • аннотации, если указаны в map_def

Тип возвращаемого значения

table

См. также: config_utils_schema_nodes_map

schema.new(schema_name, schema_node[, { methods = <...> }])

Создание объекта схемы.

  • schema_name (string) — имя

  • schema_node (table) — корневой узел схемы

  • methods (table) — методы

Возвращает

новый объект схемы (см. schema_object) в виде таблицы со следующими полями:

> - `name`: имя схемы> - `schema`: таблица с узлами схемы> - `methods`: таблица с пользовательскими методами

Тип возвращаемого значения

table

См. также: config_utils_schema_getting_started

schema.record(fields[, annotations])

Создание узла типа record в схеме конфигурации.

  • fields (table) — таблица полей в следующем формате:
{    [<field_name>] = <schema_node_object>,    <...>}
Example

См. также: schema_node_object.

Возвращает

созданный узел типа record в виде таблицы со следующими полями:

  • type: record
  • fields: таблица, описывающая поля записи
  • аннотации, если указаны

Тип возвращаемого значения

table

См. также: config_utils_schema_nodes_record

schema.scalar(scalar_def)

Создание скалярного узла в схеме конфигурации.

  • scalar_def (table) — таблица в следующем формате:
{    type = <scalar_type>,    <..annotations..>}
Example

См. также: schema_node_object, schema_node_annotation.

Возвращает

созданный скалярный узел в виде таблицы со следующими полями:

Тип возвращаемого значения

table

См. также: config_utils_schema_nodes_scalar

schema.set(allowed_values, annotations)

Сокращение для создания узла типа array с уникальными строковыми значениями из заданного списка допустимых значений.

  • allowed_values (table) — допустимые значения элементов массива

  • annotations (table) — аннотации (см. config_utils_schema_annotation)

Возвращает

созданный узел типа array в виде таблицы со следующими полями:

  • type: array
  • items: таблица, описывающая элемент массива как узел схемы
  • validate: автоматически сгенерированная функция валидации, проверяющая отсутствие повторяющихся значений
  • аннотации, если указаны

Тип возвращаемого значения

table

См. также: config_utils_schema_nodes_array

schema_object

schema_object

method apply_default(data)

Применение значений по умолчанию к скалярным узлам. Функция берет значения встроенной аннотации default скалярных узлов и применяет их на основе аннотации apply_default_if. Если для узла нет аннотации apply_default_if, значение по умолчанию также применяется.

Параметры:

  • data (any) — данные конфигурации

Возвращает

данные конфигурации с примененными значениями по умолчанию из схемы

См. также: default, apply_default_if

method filter(data, f)

Фильтрация данных на основе аннотаций схемы. Метод возвращает итератор по узлам конфигурации, для которых заданная функция фильтрации f возвращает true.

Функция фильтрации f получает в качестве аргумента следующую таблицу:

w = {    path = <array-like table>,    schema = <schema node>,    data = <data at the given path>,}

Функция фильтрации возвращает логическое значение, которое интерпретируется как «принято» или «не принято».

Пример:

Вызов функции для всех узлов схемы, у которых определена аннотация my_annotation:

s:filter(function(w)    return w.schema.my_annotation ~= nilend):each(function(w)    do_something(w.data)end)
  • data (any) — данные конфигурации

  • f (function) — функция фильтрации

Возвращает

итератор luafun

method get(data, path)

Получение вложенных значений конфигурации по заданному пути. Путь может быть строкой с точками-разделителями (http.scheme) или массивоподобной таблицей ({ 'http', 'scheme'}).

Пример:

local scheme = listen_address_schema:get(cfg, 'listen_address.scheme')
  • data (any) — данные конфигурации

  • path (string/table) — путь к целевому узлу в виде:

  • строки в точечной нотации

  • массивоподобной таблицы

Возвращает

данные по заданному пути

См. также: config_utils_schema_get_configuration

method map(data, f, f_ctx)

Преобразование данных заданной функцией. Поля data преобразуются функцией, переданной во втором аргументе (f), при этом структура данных остается неизменной.

Функция преобразования принимает три аргумента:

  • data – данные конфигурации
  • wобходочный узел со следующими полями:
    • w.schema – узел схемы
    • w.path – путь к узлу схемы
    • w.error() – функция для вывода понятных сообщений об ошибках
  • ctx – дополнительный контекст для функции преобразования. Может использоваться для передачи значений при конкретном вызове.

Пример функции преобразования:

local function f(data, w, ctx)    if w.schema.type == 'string' and data ~= nil then        return data:gsub('{{ *foo *}}', ctx.foo)    end    return dataend

Метод map() обходит все поля записей схемы, даже если они равны nil или box.NULL в предоставленной конфигурации. Это позволяет использовать данный метод для установки вычисляемых значений по умолчанию для отсутствующих полей. Однако это не относится к map и array, так как схема не определяет их поля для обхода.

  • data (any) — данные конфигурации

  • f (function) — функция преобразования

  • f_ctx (any) — пользовательский контекст для функции преобразования

Возвращает

преобразованные данные конфигурации

method merge(data_a, data_b)

Слияние двух конфигураций. Метод объединяет конфигурации в единую иерархию узлов, отдавая предпочтение второй при конфликтах.

Используются следующие правила слияния:

  • любое присутствующее значение имеет приоритет над nil и box.NULL

  • box.NULL имеет приоритет над nil

  • для скалярных узлов и узлов типа array используется правое значение

  • записи (record) и map сливаются глубоко, то есть слияние выполняется рекурсивно для их вложенных узлов

  • data_a (any) — данные конфигурации

  • data_b (any) — данные конфигурации

Возвращает

объединенные данные конфигурации

method pairs()

Обход схемы и возврат скалярных узлов, а также узлов типа array и map

Возвращает

итератор luafun

Пример:

for _, w in schema:pairs() do    local path = w.path    local schema = w.schema    -- <...>end

method set(data, path, value)

Установка заданного значения по заданному пути в конфигурации. Путь может быть строкой с точками-разделителями (http.scheme) или массивоподобной таблицей ({ 'http', 'scheme'}).

  • data (any) — данные конфигурации

  • path (string/table) — путь к целевому узлу в виде:

  • строки в точечной нотации

  • массивоподобной таблицы

  • value (any) — новое значение

Возвращает

обновленные данные конфигурации

Пример: см. config_utils_schema_env-vars

validate(data)

Валидация данных по схеме. Если данные не соответствуют схеме, вызывается ошибка.

Метод выполняет следующие проверки:

  • проверка типов полей: значения полей проверяются на соответствие типам узлов схемы

  • допустимые значения: если для узла задана аннотация allowed_values, соответствующее поле данных проверяется по списку допустимых значений

  • функции валидации: если для узла определена функция валидации (аннотация validate), она выполняется для проверки корректности предоставленного значения.

  • data (any) — данные

Пример: см. config_utils_schema_annotation и config_utils_schema_validating_configuration

См. также: allowed_values, validate

Пользовательские методы

Пользовательские методы в схеме.

См. также: config_utils_schema_methods

name

Имя схемы.

schema

Иерархия узлов схемы.

См. также: config-utils-schema_node_object

schema_node_annotation

Следующие элементы таблиц, передаваемых в качестве аргументов конструктора узла, обрабатываются модулем как встроенные аннотации:

  • allowed_values

Список допустимых значений для узла.

См. также: schema_object:validate()

  • apply_default_if

    Логическая функция, определяющая, следует ли применять значение по умолчанию, заданное с помощью default. Если функция возвращает true для предоставленных данных конфигурации, узел получает значение по умолчанию при вызове метода schema_object.apply_default().

    Функция принимает два аргумента:

  • data – данные конфигурации

  • wобходочный узел со следующими полями:

  • w.schema – узел схемы

  • w.path – путь к узлу схемы

  • w.error() – функция для вывода понятных сообщений об ошибках См. также: schema_object:apply_default()

  • default

Значение по умолчанию, используемое для скалярного узла, если оно не задано явно.

Пример: см. config_utils_schema_transform_configuration

См. также: schema_object:apply_default()

  • type

Тип узла схемы.

См. также: config_utils_schema_data_types

  • validate

    Функция, используемая для валидации данных узла. Функция должна вызвать ошибку, чтобы проверка не прошла. Функция вызывается при вызовах schema_object:validate().

    Функция принимает два аргумента:

  • data – данные конфигурации

  • wобходочный узел со следующими полями:

  • w.schema – узел схемы

  • w.path – путь к узлу схемы

  • w.error() – функция для вывода понятных сообщений об ошибках

Пример:

Функция, проверяющая, что строка является допустимым IP-адресом:

local function validate_host(host, w)    local host_pattern = "^(%d+)%.(%d+)%.(%d+)%.(%d+)$"    if not host:match(host_pattern) then        w.error("'host' should be a string containing a valid IP address, got %q", host)    endend

См. также: schema_object:validate()

schema_node_object

: schema_node_object

allowed_values

Список допустимых значений для узла. Значения берутся из аннотации узла allowed_values.

apply_default_if

Функция, определяющая, когда применять значение узла по умолчанию. Значение берется из аннотации apply_default_if.

computed

computed.annotations хранит вычисляемые аннотации узла.

default

Значение узла по умолчанию. Значение берется из аннотации default.

fields

Дочерние узлы для узлов типа record. См. также config_utils_schema_nodes_record.

items

Элементы узла для узлов типа array. См. также config_utils_schema_nodes_array

type

Тип узла для скалярных узлов. См. config_utils_schema_data_types

validate

Функция валидации значения узла. Значение берется из аннотации validate.