spacewander commented on a change in pull request #2965: URL: https://github.com/apache/apisix/pull/2965#discussion_r535974232
########## File path: .travis/apisix_cli_test.sh ########## @@ -817,3 +817,53 @@ fi done echo "passed: etcd auth enabled and init kv has been set up correctly" + +# check etcd connect refused +git checkout conf/config.yaml + +echo ' +etcd: + host: + - "http://127.0.0.1:2389" + prefix: "/apisix" +' > conf/config.yaml + +make init &>/tmp/apisix_temp & Review comment: Why need to run in the background? ########## File path: apisix/cli/etcd.lua ########## @@ -106,9 +111,6 @@ function _M.init(env, show_output) local etcd_conf = yaml_conf.etcd - local timeout = etcd_conf.timeout or 3 Review comment: Should allow configuring timeout in the new way ########## File path: apisix/cli/etcd.lua ########## @@ -132,22 +134,23 @@ function _M.init(env, show_output) -- check the etcd cluster version for index, host in ipairs(yaml_conf.etcd.host) do - uri = host .. "/version" - local cmd = str_format("curl -s -m %d %s", timeout * 2, uri) - local res = util.execute_cmd(cmd) - local errmsg = str_format("got malformed version message: \"%s\" from etcd\n", - res) + local version_url = host .. "/version" + local errmsg - local body, _, err = dkjson.decode(res) - if err then + local res, err = http.request(version_url) Review comment: Look like this library doesn't support max-timeout? Only operation level timeout is supported. ########## File path: .travis/apisix_cli_test.sh ########## @@ -817,3 +817,53 @@ fi done echo "passed: etcd auth enabled and init kv has been set up correctly" + +# check etcd connect refused +git checkout conf/config.yaml + +echo ' +etcd: + host: + - "http://127.0.0.1:2389" + prefix: "/apisix" +' > conf/config.yaml + +make init &>/tmp/apisix_temp & +sleep 1 +if [`grep -c "connection refused" /tmp/apisix_temp` -ne '1']; then + echo "failed: not output connection refused" + exit 1 +fi + +echo "passed: show connection refused info successfully" + +# check etcd auth error +git checkout conf/config.yaml + +export ETCDCTL_API=3 +etcdctl version +etcdctl --endpoints=127.0.0.1:2379 user add "root:apache-api6" Review comment: Need to clean the user/role after running the test ########## File path: apisix/cli/etcd.lua ########## @@ -191,26 +206,36 @@ function _M.init(env, show_output) local key = (etcd_conf.prefix or "") .. dir_name .. "/" - local uri = host .. "/v3/kv/put" + local put_url = host .. "/v3/kv/put" local post_json = '{"value":"' .. base64_encode("init_dir") .. '", "key":"' .. base64_encode(key) .. '"}' - local cmd = "curl " .. uri .. token_head .. " -X POST -d '" .. post_json - .. "' --connect-timeout " .. timeout - .. " --max-time " .. timeout * 2 .. " --retry 1 2>&1" + local response_body = {} + local headers = {["Content-Length"] = #post_json} + if auth_token then + headers["Authorization"] = auth_token + end - local res = util.execute_cmd(cmd) - if res:find("error", 1, true) then + local _, err = http.request{url = put_url, method = "POST", + source = ltn12.source.string(post_json), + sink = ltn12.sink.table(response_body), + headers = headers} + if err and type(err) == "string" then + errmsg = str_format("request etcd endpoint \"%s\" error, %s\n", host, err) Review comment: Better to log the full uri ########## File path: apisix/cli/etcd.lua ########## @@ -132,22 +134,23 @@ function _M.init(env, show_output) -- check the etcd cluster version for index, host in ipairs(yaml_conf.etcd.host) do - uri = host .. "/version" - local cmd = str_format("curl -s -m %d %s", timeout * 2, uri) - local res = util.execute_cmd(cmd) - local errmsg = str_format("got malformed version message: \"%s\" from etcd\n", - res) + local version_url = host .. "/version" + local errmsg - local body, _, err = dkjson.decode(res) - if err then + local res, err = http.request(version_url) + if err and type(err) == "string" then + errmsg = str_format("request etcd endpoint \'%s\' error, %s\n", host, err) Review comment: Better to log the full uri ########## File path: apisix/cli/etcd.lua ########## @@ -160,27 +163,39 @@ function _M.init(env, show_output) for index, host in ipairs(yaml_conf.etcd.host) do local is_success = true - local token_head = "" + local errmsg + local auth_token local user = yaml_conf.etcd.user local password = yaml_conf.etcd.password if user and password then - local uri_auth = host .. "/v3/auth/authenticate" + local auth_url = host .. "/v3/auth/authenticate" local json_auth = { name = etcd_conf.user, password = etcd_conf.password } + local post_json_auth = dkjson.encode(json_auth) - local cmd_auth = "curl -s " .. uri_auth .. " -X POST -d '" .. - post_json_auth .. "' --connect-timeout " .. timeout - .. " --max-time " .. timeout * 2 .. " --retry 1 2>&1" + local response_body = {} + local _, err = http.request{url = auth_url, method = "POST", + source = ltn12.source.string(post_json_auth), + sink = ltn12.sink.table(response_body), + headers = {["Content-Length"] = #post_json_auth}} + + -- err is string type + if err and type(err) == "string" then + errmsg = str_format("request etcd endpoint \"%s\" error, %s\n", host, err) Review comment: Better to log the full uri ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: [email protected]
