diff --git a/apisix/cli/schema.lua b/apisix/cli/schema.lua index 6f6450b46e0c..401998094625 100644 --- a/apisix/cli/schema.lua +++ b/apisix/cli/schema.lua @@ -63,7 +63,67 @@ local etcd_schema = { description = "etcd connection timeout in seconds", }, }, - required = {"prefix", "host"} + required = { "prefix", "host" } +} + +local admin_schema = { + type = "object", + properties = { + admin_key = { + type = "array", + properties = { + items = { + properties = { + name = { type = "string" }, + key = { type = "string" }, + role = { type = "string" }, + } + } + } + }, + admin_listen = { + properties = { + listen = { type = "string" }, + port = { type = "integer" }, + }, + default = { + listen = "0.0.0.0", + port = 9180, + } + }, + https_admin = { + type = "boolean", + }, + admin_key_required = { + type = "boolean", + }, + enable_admin_cors = { + type = "boolean" + }, + allow_admin = { + type = "array", + items = { + type = "string" + } + }, + admin_api_mtls = { + type = "object", + properties = { + admin_ssl_cert = { + type = "string" + }, + admin_ssl_cert_key = { + type = "string" + }, + admin_ssl_ca_cert = { + type = "string" + } + } + }, + admin_api_version = { + type = "string" + } + } } local config_schema = { @@ -71,6 +131,66 @@ local config_schema = { properties = { apisix = { properties = { + node_listen = { + anyOf = { + { + type = "integer", + minimum = 1, + maximum = 65535 + }, + { + type = "array", + items = { + type = "integer", + minimum = 1, + maximum = 65535 + } + }, + { + type = "array", + items = { + type = "object", + properties = { + port = { + type = "integer", + minimum = 1, + maximum = 65535 + }, + ip = { + type = "string", + }, + enable_http2 = { + type = "boolean", + }, + } + }, + } + }, + }, + enable_admin = { + type = "boolean", + }, + enable_dev_mode = { + type = "boolean", + }, + enable_reuseport = { + type = "boolean", + }, + show_upstream_status_in_response_header = { + type = "boolean", + }, + enable_ipv6 = { + type = "boolean", + }, + enable_server_tokens = { + type = "boolean", + }, + extra_lua_path = { + type = "string" + }, + extra_lua_cpath = { + type = "string" + }, lua_module_hook = { pattern = "^[a-zA-Z._-]+$", }, @@ -118,12 +238,12 @@ local config_schema = { }, oneOf = { { - required = {"name", "memory_size"}, + required = { "name", "memory_size" }, maxProperties = 2, }, { - required = {"name", "memory_size", "disk_size", - "disk_path", "cache_levels"}, + required = { "name", "memory_size", "disk_size", + "disk_path", "cache_levels" }, } }, }, @@ -133,7 +253,7 @@ local config_schema = { }, proxy_mode = { type = "string", - enum = {"http", "stream", "http&stream"}, + enum = { "http", "stream", "http&stream" }, }, stream_proxy = { type = "object", @@ -166,7 +286,7 @@ local config_schema = { type = "boolean", } }, - required = {"addr"} + required = { "addr" } }, }, }, @@ -302,11 +422,11 @@ local config_schema = { type = "integer" }, http_request_phase = { - enum = {"access", "rewrite"}, + enum = { "access", "rewrite" }, default = "access", }, }, - required = {"name", "file", "priority"} + required = { "name", "file", "priority" } } } } @@ -315,97 +435,71 @@ local config_schema = { type = "object", properties = { role = { - enum = {"traditional", "control_plane", "data_plane", "standalone"}, + enum = { "traditional", "control_plane", "data_plane", "standalone" }, default = "traditional" - } + }, }, - }, - }, - required = {"apisix", "deployment"}, -} - -local admin_schema = { - type = "object", - properties = { - admin_key = { - type = "array", - properties = { - items = { - properties = { - name = {type = "string"}, - key = {type = "string"}, - role = {type = "string"}, + dependencies = { + role = { + oneOf = { + { + properties = { + role = { const = "traditional" }, + etcd = etcd_schema, + admin = admin_schema, + role_traditional = { + type = "object", + properties = { + config_provider = { + enum = { "etcd" } + }, + }, + required = { "config_provider" } + }, + }, + required = { "role_traditional" }, + }, + { + properties = { + role = { const = "control_plane" }, + etcd = etcd_schema, + admin = admin_schema, + role_control_plane = { + type = "object", + properties = { + config_provider = { + enum = { "etcd" } + }, + }, + required = { "config_provider" } + }, + }, + required = { "role_control_plane" }, + }, + { + properties = { + role = { const = "data_plane" }, + etcd = etcd_schema, + role_data_plane = { + type = "object", + properties = { + config_provider = { + enum = { "etcd", "yaml", "xds" } + }, + }, + required = { "config_provider" } + }, + }, + required = { "role_data_plane" }, + }, } } } }, - admin_listen = { - properties = { - listen = { type = "string" }, - port = { type = "integer" }, - }, - default = { - listen = "0.0.0.0", - port = 9180, - } - }, - https_admin = { - type = "boolean", - }, - admin_key_required = { - type = "boolean", - }, - } -} - -local deployment_schema = { - traditional = { - properties = { - etcd = etcd_schema, - admin = admin_schema, - role_traditional = { - properties = { - config_provider = { - enum = {"etcd"} - }, - }, - required = {"config_provider"} - } - }, - required = {"etcd"} }, - control_plane = { - properties = { - etcd = etcd_schema, - admin = admin_schema, - role_control_plane = { - properties = { - config_provider = { - enum = {"etcd"} - }, - }, - required = {"config_provider"} - }, - }, - required = {"etcd", "role_control_plane"} - }, - data_plane = { - properties = { - etcd = etcd_schema, - role_data_plane = { - properties = { - config_provider = { - enum = {"etcd", "yaml", "xds"} - }, - }, - required = {"config_provider"} - }, - }, - required = {"role_data_plane"} - } + required = { "apisix", "deployment" }, } - function _M.validate(yaml_conf) local validator = jsonschema.generate_validator(config_schema) local ok, err = validator(yaml_conf) @@ -426,15 +520,7 @@ function _M.validate(yaml_conf) end end - local role = yaml_conf.deployment.role - local validator = jsonschema.generate_validator(deployment_schema[role]) - local ok, err = validator(yaml_conf.deployment) - if not ok then - return false, "invalid deployment " .. role .. " configuration: " .. err - end - return true end - return _M