From ef716a3eaa114cdc798214e68be1cb98612f8d77 Mon Sep 17 00:00:00 2001
From: Alexander Turenko <alexander.turenko@tarantool.org>
Date: Wed, 26 Jun 2024 02:49:22 +0300
Subject: [PATCH] config: expose experimental.config.utils.schema

The module is renamed from `internal.config.utils.schema` to
`experimental.config.utils.schema` without changes.

It is useful for validation of configuration data in roles and
applications.

Also, it provides a couple of methods that aim to simplify usual tasks
around processing of hierarchical configuration data. For example,

* get/set a nested value
* apply defaults from the schema
* filter data based on annotations from the schema
* transform a hierarchical data using a function
* merge two hierarchical values
* parse environment variable according to its type in the schema

See https://github.com/tarantool/doc/issues/4279 for an in-depth
description.

Fixes #10117

NO_DOC=https://github.com/tarantool/doc/issues/4279
---
 changelogs/unreleased/config-expose-config-utils-schema.md | 4 ++++
 src/box/lua/config/cluster_config.lua                      | 2 +-
 src/box/lua/config/instance_config.lua                     | 2 +-
 src/box/lua/config/source/env.lua                          | 2 +-
 src/box/lua/init.c                                         | 2 +-
 test/config-luatest/schema_test.lua                        | 2 +-
 6 files changed, 9 insertions(+), 5 deletions(-)
 create mode 100644 changelogs/unreleased/config-expose-config-utils-schema.md

diff --git a/changelogs/unreleased/config-expose-config-utils-schema.md b/changelogs/unreleased/config-expose-config-utils-schema.md
new file mode 100644
index 0000000000..68ef0ecbf6
--- /dev/null
+++ b/changelogs/unreleased/config-expose-config-utils-schema.md
@@ -0,0 +1,4 @@
+## feature/config
+
+* Expose the `experimental.config.utils.schema` built-in module to the public
+  API (gh-10117).
diff --git a/src/box/lua/config/cluster_config.lua b/src/box/lua/config/cluster_config.lua
index 5fa4397da5..3a9c6158c4 100644
--- a/src/box/lua/config/cluster_config.lua
+++ b/src/box/lua/config/cluster_config.lua
@@ -1,4 +1,4 @@
-local schema = require('internal.config.utils.schema')
+local schema = require('experimental.config.utils.schema')
 local instance_config = require('internal.config.instance_config')
 local expression = require('internal.config.utils.expression')
 
diff --git a/src/box/lua/config/instance_config.lua b/src/box/lua/config/instance_config.lua
index c6517ea6d1..5d06ba27c3 100644
--- a/src/box/lua/config/instance_config.lua
+++ b/src/box/lua/config/instance_config.lua
@@ -1,4 +1,4 @@
-local schema = require('internal.config.utils.schema')
+local schema = require('experimental.config.utils.schema')
 local tarantool = require('tarantool')
 local compat = require('compat')
 local uuid = require('uuid')
diff --git a/src/box/lua/config/source/env.lua b/src/box/lua/config/source/env.lua
index 457a505931..0b87f81428 100644
--- a/src/box/lua/config/source/env.lua
+++ b/src/box/lua/config/source/env.lua
@@ -1,6 +1,6 @@
 local uri = require('uri')
 local fun = require('fun')
-local schema = require('internal.config.utils.schema')
+local schema = require('experimental.config.utils.schema')
 local tabulate = require('internal.config.utils.tabulate')
 local instance_config = require('internal.config.instance_config')
 
diff --git a/src/box/lua/init.c b/src/box/lua/init.c
index e60ec331f2..b8cbcc6884 100644
--- a/src/box/lua/init.c
+++ b/src/box/lua/init.c
@@ -362,7 +362,7 @@ static const char *lua_sources[] = {
 	config_utils_aboard_lua,
 
 	"config/utils/schema",
-	"internal.config.utils.schema",
+	"experimental.config.utils.schema",
 	config_utils_schema_lua,
 
 	"config/utils/tabulate",
diff --git a/test/config-luatest/schema_test.lua b/test/config-luatest/schema_test.lua
index 91de71e126..e21f51c20d 100644
--- a/test/config-luatest/schema_test.lua
+++ b/test/config-luatest/schema_test.lua
@@ -1,6 +1,6 @@
 local ffi = require('ffi')
 local fun = require('fun')
-local schema = require('internal.config.utils.schema')
+local schema = require('experimental.config.utils.schema')
 local t = require('luatest')
 
 local g = t.group()
-- 
GitLab