in kong/spec/helpers/perf/drivers/terraform.lua [309:451]
function _M:setup_kong(version)
local ok, err = _M.setup(self)
if not ok then
return ok, err
end
local git_repo_path, _
if version:startswith("git:") then
git_repo_path = perf.git_checkout(version:sub(#("git:")+1))
version = perf.get_kong_version()
self.log.debug("current git hash resolves to Kong version ", version)
end
local download_path
local download_user, download_pass = "x", "x"
if version:sub(1, 1) == "2" then
download_path = "https://download.konghq.com/gateway-2.x-ubuntu-focal/pool/all/k/kong/kong_" ..
version .. "_amd64.deb"
else
error("Unknown download location for Kong version " .. version)
end
local docker_extract_cmds
self.daily_image_desc = nil
local daily_image = "kong/kong:master-nightly-ubuntu"
if self.opts.use_daily_image and git_repo_path then
local _, err = execute_batch(self, self.kong_ip, {
"sudo apt-get update -qq",
"sudo DEBIAN_FRONTEND=\"noninteractive\" apt-get install -y --force-yes docker.io",
"sudo docker version",
})
if err then
return false, err
end
docker_extract_cmds = {
"sudo docker rm -f daily || true",
"sudo docker rmi -f " .. daily_image,
"sudo docker pull " .. daily_image,
"sudo docker create --name daily " .. daily_image,
"sudo rm -rf /tmp/lua && sudo docker cp daily:/usr/local/share/lua/5.1/. /tmp/lua",
"sudo rm -rf /tmp/lua/kong && sudo cp -r /tmp/lua/. /usr/local/share/lua/5.1/",
}
for _, dir in ipairs({"/usr/local/openresty",
"/usr/local/kong/include", "/usr/local/kong/lib"}) do
table.insert(docker_extract_cmds, "sudo docker cp daily:" .. dir .."/. " .. dir)
end
table.insert(docker_extract_cmds, "sudo rm -rf /tmp/lua && sudo docker cp daily:/usr/local/share/lua/5.1/. /tmp/lua")
table.insert(docker_extract_cmds, "sudo rm -rf /tmp/lua/kong && sudo cp -r /tmp/lua/. /usr/local/share/lua/5.1/")
end
local ok, err = execute_batch(self, self.kong_ip, {
"sudo apt-get purge unattended-upgrades -y",
"sudo apt-get update -qq",
"echo | sudo tee " .. KONG_ERROR_LOG_PATH,
"sudo id",
"echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor || true",
"sudo sysctl net.ipv4.ip_local_port_range='10240 65535'",
"dpkg -l kong && (sudo kong stop; sudo dpkg -r kong) || true",
"sudo pkill -F /usr/local/kong/pids/nginx.pid || true",
"sudo rm -rf /usr/local/share/lua/5.1/kong",
"wget -nv " .. download_path ..
" --user " .. download_user .. " --password " .. download_pass .. " -O kong-" .. version .. ".deb",
"sudo dpkg -i kong-" .. version .. ".deb || sudo apt-get -f -y install",
"kong hybrid gen_cert " .. KONG_DEFAULT_HYBRID_CERT .. " " .. KONG_DEFAULT_HYBRID_CERT_KEY .. " || true",
})
if not ok then
return false, err
end
if docker_extract_cmds then
_, err = execute_batch(self, self.kong_ip, docker_extract_cmds)
if err then
return false, "error extracting docker daily image:" .. err
end
local manifest
manifest, err = perf.execute(ssh_execute_wrap(self, self.kong_ip, "sudo docker inspect " .. daily_image))
if err then
return nil, "failed to inspect daily image: " .. err
end
local labels
labels, err = perf.parse_docker_image_labels(manifest)
if err then
return nil, "failed to use parse daily image manifest: " .. err
end
self.log.debug("daily image " .. labels.version .." was pushed at ", labels.created)
self.daily_image_desc = labels.version .. ", " .. labels.created
end
local kong_conf = {}
kong_conf["pg_host"] = self.db_internal_ip
kong_conf["pg_password"] = PG_PASSWORD
kong_conf["pg_database"] = "kong_tests"
local kong_conf_blob = ""
for k, v in pairs(kong_conf) do
kong_conf_blob = string.format("%s\n%s=%s\n", kong_conf_blob, k, v)
end
kong_conf_blob = ngx.encode_base64(kong_conf_blob):gsub("\n", "")
_, err = execute_batch(self, nil, {
git_repo_path and ("(cd " .. git_repo_path .. " && tar zc kong) | " .. ssh_execute_wrap(self, self.kong_ip,
"sudo tar zx -C /usr/local/share/lua/5.1")) or "echo use stock files",
git_repo_path and (ssh_execute_wrap(self, self.kong_ip,
"sudo cp -r /usr/local/share/lua/5.1/kong/include/. /usr/local/kong/include/ && sudo chmod 777 -R /usr/local/kong/include/ || true"))
or "echo use stock files",
ssh_execute_wrap(self, self.kong_ip,
"sudo mkdir -p /etc/kong"),
ssh_execute_wrap(self, self.kong_ip,
"echo " .. kong_conf_blob .. " | base64 -d | sudo tee /etc/kong/kong.conf"),
ssh_execute_wrap(self, self.kong_ip,
"sudo kong migrations bootstrap"),
ssh_execute_wrap(self, self.kong_ip,
"sudo kong migrations up -y || true"),
ssh_execute_wrap(self, self.kong_ip,
"sudo kong migrations finish -y || true"),
})
if err then
return false, err
end
self.setup_kong_called = true
return prepare_spec_helpers(self, git_repo_path, version)
end