Files
2026-07-13 12:32:21 +08:00

98 lines
2.8 KiB
Lua

local conf_loader = require "kong.conf_loader"
local pl_path = require "pl.path"
local prefix_handler = require "kong.cmd.utils.prefix_handler"
local log = require "kong.cmd.utils.log"
local strip = require("kong.tools.string").strip
local fmt = string.format
local compile_nginx_main_inject_conf = prefix_handler.compile_nginx_main_inject_conf
local compile_nginx_http_inject_conf = prefix_handler.compile_nginx_http_inject_conf
local compile_nginx_stream_inject_conf = prefix_handler.compile_nginx_stream_inject_conf
local prepare_prefix = prefix_handler.prepare_prefix
local function load_conf(args)
-- retrieve default prefix or use given one
log.disable()
local conf = assert(conf_loader(args.conf, {
prefix = args.prefix
}, { pre_cmd = true }))
log.enable()
if pl_path.exists(conf.kong_env) then
-- load <PREFIX>/kong.conf containing running node's config
conf = assert(conf_loader(conf.kong_env, {
prefix = conf.prefix
}))
end
-- make sure necessary files like `.ca_combined` exist
-- but skip_write to avoid overwriting the existing nginx configurations
assert(prepare_prefix(conf, nil, true))
return conf
end
-- convert relative path to absolute path
-- as resty will run a temporary nginx instance
local function convert_directive_path_to_absolute(prefix, nginx_conf, paths)
local new_conf = nginx_conf
for _, path in ipairs(paths) do
local pattern = fmt("(%s) (.+);", path)
local m, err = ngx.re.match(new_conf, pattern)
if err then
return nil, err
elseif m then
local path = strip(m[2])
if path:sub(1, 1) ~= '/' then
local absolute_path = prefix .. "/" .. path
local replace = "$1 " .. absolute_path .. ";"
local _, err
new_conf, _, err = ngx.re.sub(new_conf, pattern, replace)
if not new_conf then
return nil, err
end
end
end
end
return new_conf, nil
end
local function compile_main_inject(conf)
local nginx_main_inject_conf, err = compile_nginx_main_inject_conf(conf)
if not nginx_main_inject_conf then
return nil, err
end
-- path directives that needs to be converted
local paths = {
"lmdb_environment_path",
}
return convert_directive_path_to_absolute(conf.prefix, nginx_main_inject_conf, paths)
end
local function compile_http_inject(conf)
return compile_nginx_http_inject_conf(conf)
end
local function compile_stream_inject(conf)
return compile_nginx_stream_inject_conf(conf)
end
local function compile_confs(args)
local conf = load_conf(args)
local main_conf = assert(compile_main_inject(conf))
local http_conf = assert(compile_http_inject(conf))
local stream_conf = assert(compile_stream_inject(conf))
return { main_conf = main_conf, http_conf = http_conf, stream_conf = stream_conf, }
end
return {
compile_confs = compile_confs,
}