89 lines
1.9 KiB
Lua
89 lines
1.9 KiB
Lua
local http = require "resty.luasocket.http"
|
|
local print = print
|
|
local fmt = string.format
|
|
|
|
local conf_loader = require "kong.conf_loader"
|
|
local pl_path = require "pl.path"
|
|
local log = require "kong.cmd.utils.log"
|
|
local json_encode = require("cjson.safe").encode
|
|
|
|
local function execute(args)
|
|
log.disable()
|
|
|
|
-- only to retrieve the default prefix or use given one
|
|
local conf = assert(conf_loader(args.conf, {
|
|
prefix = args.prefix
|
|
}))
|
|
|
|
if pl_path.exists(conf.kong_env) then
|
|
-- load <PREFIX>/kong.conf containing running node's config
|
|
conf = assert(conf_loader(conf.kong_env))
|
|
end
|
|
|
|
log.enable()
|
|
|
|
if #conf.status_listeners == 0 then
|
|
print("No status listeners found in configuration.")
|
|
return
|
|
end
|
|
|
|
local status_listener = conf.status_listeners[1]
|
|
|
|
local scheme = "http"
|
|
if status_listener.ssl then
|
|
scheme = "https"
|
|
end
|
|
|
|
local url = scheme .. "://" .. status_listener.ip .. ":" .. status_listener.port .. "/status/ready"
|
|
|
|
local httpc = http.new()
|
|
httpc:set_timeout(1000)
|
|
|
|
|
|
local res, err = httpc:request_uri(url, {
|
|
method = "POST",
|
|
headers = {
|
|
["Content-Type"] = "application/json"
|
|
},
|
|
body = json_encode({
|
|
status = "draining"
|
|
}),
|
|
-- we don't need to verify the SSL certificate for this request
|
|
ssl_verify = false,
|
|
})
|
|
|
|
httpc:close()
|
|
|
|
if not res then
|
|
print(fmt("Failed to send request to %s: %s", url, err))
|
|
return
|
|
end
|
|
|
|
if res.status ~= 204 then
|
|
print(fmt("Unexpected response status from %s: %d", url, res.status))
|
|
return
|
|
end
|
|
|
|
print("Kong's status successfully changed to 'draining'")
|
|
end
|
|
|
|
|
|
local lapp = [[
|
|
Usage: kong drain [OPTIONS]
|
|
|
|
Make status listeners(`/status/ready`) return 503 Service Unavailable.
|
|
|
|
Example usage:
|
|
kong drain
|
|
|
|
Options:
|
|
-c,--conf (optional string) configuration file
|
|
-p,--prefix (optional string) override prefix directory
|
|
]]
|
|
|
|
|
|
return {
|
|
lapp = lapp,
|
|
execute = execute,
|
|
}
|