in kong/spec/helpers/perf/drivers/docker.lua [337:421]
function _M:start_kong(kong_conf, driver_conf)
if not self.setup_kong_called then
return false, "setup_kong() must be called before start_kong()"
end
local kong_name = driver_conf.name
or 'default'
if not driver_conf.ports then
driver_conf.ports = { 8000 }
end
if self.kong_ct_ids[kong_name] == nil then
if not kong_conf['cluster_cert'] then
kong_conf['cluster_cert'] = KONG_DEFAULT_HYBRID_CERT
kong_conf['cluster_cert_key'] = KONG_DEFAULT_HYBRID_CERT_KEY
end
local docker_args = "--name kong_perf_kong_$(date +%s)_" .. kong_name .. " "
for k, v in pairs(kong_conf) do
docker_args = docker_args .. string.format("-e KONG_%s=%s ", k:upper(), v)
end
docker_args = docker_args .. "-e KONG_PROXY_ACCESS_LOG=/dev/null "
if kong_conf['database'] == nil then
docker_args = docker_args .. "--link " .. self.psql_ct_id .. ":postgres " ..
"-e KONG_PG_HOST=postgres " ..
"-e KONG_PG_DATABASE=kong_tests "
end
for name, ctid in pairs(self.kong_ct_ids) do
docker_args = docker_args .. string.format("--link %s:%s ", ctid, name)
end
for _, port in ipairs(driver_conf.ports) do
docker_args = docker_args .. string.format("-p %d ", port)
end
local cid, err = create_container(self, docker_args, self.kong_image,
"/bin/bash -c 'kong migrations bootstrap; kong migrations up -y; kong migrations finish -y; /docker-entrypoint.sh kong docker-start'")
if err then
return false, "error running docker create when creating kong container: " .. err
end
self.kong_ct_ids[kong_name] = cid
perf.execute("docker cp ./spec/fixtures/kong_clustering.crt " .. cid .. ":" .. KONG_DEFAULT_HYBRID_CERT)
perf.execute("docker cp ./spec/fixtures/kong_clustering.key " .. cid .. ":" .. KONG_DEFAULT_HYBRID_CERT_KEY)
if self.git_repo_path then
perf.execute("docker exec --user=root " .. cid ..
" find /usr/local/openresty/site/lualib/kong/ -name '*.ljbc' -delete; true")
perf.execute("docker cp " .. self.git_repo_path .. "/kong " .. cid .. ":/usr/local/share/lua/5.1/")
end
end
self.log.info("starting kong container \"" .. kong_name .. "\" with ID ", self.kong_ct_ids[kong_name])
local ok, err = start_container(self.kong_ct_ids[kong_name])
if not ok then
return false, "kong is not running: " .. err
end
if not perf.wait_output("docker logs -f " .. self.kong_ct_ids[kong_name], " start worker process", 30) then
self.log.info("kong container logs:")
perf.execute("docker logs " .. self.kong_ct_ids[kong_name], { logger = self.log.log_exec })
return false, "timeout waiting kong to start (5s)"
end
local ports = driver_conf.ports
local port_maps = {}
for _, port in ipairs(ports) do
local mport, err = get_container_port(self.kong_ct_ids[kong_name], port .. "/tcp")
if not mport then
return false, "can't find exposed port " .. port .. " for kong " ..
self.kong_ct_ids[kong_name] .. " :" .. err
end
table.insert(port_maps, string.format("%s->%s/tcp", mport, port))
end
self.log.info("kong container \"" .. kong_name .. "\" is started to listen at port ", table.concat(port_maps, ", "))
return self.kong_ct_ids[kong_name]
end