Подмодуль experimental.config.utils.schema
Начиная с: 3.2.0
Модуль experimental.config.utils.schema используется для проверки и
обработки частей конфигураций кластера, имеющих произвольные
пользовательские структуры:
-
roles_cfg для пользовательских ролей, разработанных как часть кластерного приложения Модуль предоставляет API для получения и установки значений конфигурации, фильтрации и преобразования данных конфигурации и т. д.
В качестве примера рассмотрим прикладную роль, у которой есть единственный параметр конфигурации — адрес HTTP-эндпоинта.
roles: [ http_api ]
Для обработки конфигурации роли можно использовать модуль
experimental.config.utils.schema следующим образом:
- Загрузите модуль:
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,}
- Определите схему — корневой объект, хранящий информацию о конфигурации роли — с помощью 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 -
trueorfalse -
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(), с помощью которой можно создавать массивы с ограниченным набором допустимых элементов.
Отображение (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) thenw.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 thenw.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.protocolif protocol == 'iproto' and data.scheme ~= nil thenw.error("iproto doesn't support 'scheme'")endend,})
Следующая схема с 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() dolocal env_var = w.schema.envif env_var ~= nil thenlocal value = schema.fromenv(env_var, os.getenv(env_var), w.schema)listen_address_schema:set(res, w.path, value)endendreturn resend
В этой функции также используются методы объекта схемы:
-
pairs() для перебора узлов схемы.
-
set() для назначения значений конфигурации. .. api-reference-config-utils-schema:
-
Функции
: -
-
Создание узла array
-
Создание скалярного узла enum
-
Разбор значения из переменной окружения
-
Создание узла map
-
Создание схемы
-
Создание узла record
-
Создание скалярного узла
-
Создание узла set
-
schema_object
: -
-
Применить значения по умолчанию
-
Фильтрация узлов схемы
-
Получение указанных данных конфигурации
-
Преобразование данных конфигурации
-
Слияние двух конфигураций
-
Обход конфигурации
-
Установка значения конфигурации
-
Валидация конфигурации по схеме
-
Пользовательские методы
-
Имя схемы
-
Иерархия узлов схемы
-
schema_node_annotation
: -
-
Допустимые значения узла
-
Условие для применения значений по умолчанию
-
Значение узла по умолчанию
-
Тип значения
-
Функция валидации
-
schema_node_object
: -
-
Допустимые значения узла
-
Условие применения значений по умолчанию
-
Вычисляемые аннотации
-
Значение по умолчанию
-
Поля узла типа record
-
Элементы узла типа array
-
Тип скалярного узла
-
Функция валидации .. config-utils-schema_functions:
schema.array(array_def)
Создание узла типа array в схеме конфигурации.
Параметры:
array_def(table) — таблица в следующем формате:
{items = <schema_node_object>,<..annotations..>}
См. также: schema_node_object, schema_node_annotation.
Возвращает
созданный узел типа array в виде таблицы со следующими полями:
type:arrayitems: таблица, описывающая элемент массива как узел схемы- аннотации, если указаны в
array_def
Тип возвращаемого значения
table
См. также: config_utils_schema_nodes_array
schema.enum(allowed_values, annotations)
Сокращение для создания скалярного узла строкового типа с ограниченным набором допустимых значений.
-
allowed_values(table) — список членов перечисления — значения, допустимые для узла -
annotations(table) — аннотации (см. schema_node_annotation)
Возвращает
созданный скалярный узел в виде таблицы со следующими полями:
type:stringallowed_values: допустимые значения узла- аннотации, если указан параметр
annotations
Тип возвращаемого значения
table
См. также: config_utils_schema_nodes_scalar
Разбор переменной окружения как значения заданного узла схемы. Параметр
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..>}
См. также: schema_node_object, schema_node_annotation.
Возвращает
созданный узел типа map в виде таблицы со следующими полями:
type:mapkey: тип ключа mapvalue: тип значения 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>,<...>}
См. также: schema_node_object.
annotations(table) — аннотации (см. config_utils_schema_annotation)
Возвращает
созданный узел типа record в виде таблицы со следующими полями:
type:recordfields: таблица, описывающая поля записи- аннотации, если указаны
Тип возвращаемого значения
table
См. также: config_utils_schema_nodes_record
schema.scalar(scalar_def)
Создание скалярного узла в схеме конфигурации.
scalar_def(table) — таблица в следующем формате:
{type = <scalar_type>,<..annotations..>}
См. также: schema_node_object, schema_node_annotation.
-
type(string) — тип данных (см. config_utils_schema_data_types) -
annotations(table) — аннотации (см. config_utils_schema_annotation)
Возвращает
созданный скалярный узел в виде таблицы со следующими полями:
type: тип узла (см. config_utils_schema_data_types)- аннотации, если указаны
Тип возвращаемого значения
table
См. также: config_utils_schema_nodes_scalar
schema.set(allowed_values, annotations)
Сокращение для создания узла типа array с уникальными строковыми значениями из заданного списка допустимых значений.
-
allowed_values(table) — допустимые значения элементов массива -
annotations(table) — аннотации (см. config_utils_schema_annotation)
Возвращает
созданный узел типа array в виде таблицы со следующими полями:
type:arrayitems: таблица, описывающая элемент массива как узел схемыvalidate: автоматически сгенерированная функция валидации, проверяющая отсутствие повторяющихся значений- аннотации, если указаны
Тип возвращаемого значения
table
См. также: config_utils_schema_nodes_array
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 thenreturn data:gsub('{{ *foo *}}', ctx.foo)endreturn 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() dolocal path = w.pathlocal 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
Валидация данных по схеме. Если данные не соответствуют схеме, вызывается ошибка.
Метод выполняет следующие проверки:
-
проверка типов полей: значения полей проверяются на соответствие типам узлов схемы
-
допустимые значения: если для узла задана аннотация
allowed_values, соответствующее поле данных проверяется по списку допустимых значений -
функции валидации: если для узла определена функция валидации (аннотация
validate), она выполняется для проверки корректности предоставленного значения. -
data(any) — данные
Пример: см. config_utils_schema_annotation и config_utils_schema_validating_configuration
См. также: allowed_values, validate
Пользовательские методы в схеме.
См. также: config_utils_schema_methods
Имя схемы.
Иерархия узлов схемы.
См. также: config-utils-schema_node_object
Следующие элементы таблиц, передаваемых в качестве аргументов конструктора узла, обрабатываются модулем как встроенные аннотации:
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) thenw.error("'host' should be a string containing a valid IP address, got %q", host)endend
См. также: schema_object:validate()
: schema_node_object
Список допустимых значений для узла. Значения берутся из аннотации узла allowed_values.
Функция, определяющая, когда применять значение узла по умолчанию. Значение берется из аннотации apply_default_if.
computed.annotations хранит
вычисляемые аннотации узла.
Значение узла по умолчанию. Значение берется из аннотации default.
Дочерние узлы для узлов типа record. См. также config_utils_schema_nodes_record.
Элементы узла для узлов типа array. См. также config_utils_schema_nodes_array
Тип узла для скалярных узлов. См. config_utils_schema_data_types
Функция валидации значения узла. Значение берется из аннотации validate.