From a63c487b293253381a3c31ba3fab8bf74c0ff390 Mon Sep 17 00:00:00 2001 From: Akayeshmantha Date: Mon, 16 Mar 2020 19:37:38 +0100 Subject: [PATCH] add multiple etcd support. --- bin/apisix | 41 ++++++++++++++++++++++++++++------------- conf/config.yaml | 3 ++- 2 files changed, 30 insertions(+), 14 deletions(-) diff --git a/bin/apisix b/bin/apisix index 2d21aa073372..3db29ec29ad8 100755 --- a/bin/apisix +++ b/bin/apisix @@ -706,28 +706,43 @@ local function init_etcd(show_output) end local etcd_conf = yaml_conf.etcd - local uri = etcd_conf.host .. "/v2/keys" .. (etcd_conf.prefix or "") local timeout = etcd_conf.timeout or 3 + local uri + local hostCount = table.getn(yaml_conf.etcd.host) - for _, dir_name in ipairs({"/routes", "/upstreams", "/services", - "/plugins", "/consumers", "/node_status", - "/ssl", "/global_rules", "/stream_routes", - "/proto"}) do - local cmd = "curl " .. uri .. dir_name + for index, host in ipairs(yaml_conf.etcd.host) do + + local is_success = true + uri = host .. "/v2/keys" .. (etcd_conf.prefix or "") + + for _, dir_name in ipairs({"/routes", "/upstreams", "/services", + "/plugins", "/consumers", "/node_status", + "/ssl", "/global_rules", "/stream_routes", + "/proto"}) do + local cmd = "curl " .. uri .. dir_name .. "?prev_exist=false -X PUT -d dir=true " .. "--connect-timeout " .. timeout .. " --max-time " .. timeout * 2 .. " --retry 1 2>&1" - local res = exec(cmd) - if not res:find("index", 1, true) - and not res:find("createdIndex", 1, true) then - error(cmd .. "\n" .. res) + local res = exec(cmd) + if not res:find("index", 1, true) + and not res:find("createdIndex", 1, true) then + is_success = false; + if (index == hostCount) then + error(cmd .. "\n" .. res) + end + break + end + + if show_output then + print(cmd) + print(res) + end end - if show_output then - print(cmd) - print(res) + if is_success then + break end end end diff --git a/conf/config.yaml b/conf/config.yaml index 4bb942d05f6e..baa5904279b7 100644 --- a/conf/config.yaml +++ b/conf/config.yaml @@ -113,7 +113,8 @@ nginx_config: # config for render the template to genarate n - 'unix:' etcd: - host: "http://127.0.0.1:2379" # etcd address + host: + - "http://127.0.0.1:2379" # multiple etcd address prefix: "/apisix" # apisix configurations prefix timeout: 3 # 3 seconds