diff --git a/mon/antietcd_adapter.js b/mon/antietcd_adapter.js index 184af069..a91178d7 100644 --- a/mon/antietcd_adapter.js +++ b/mon/antietcd_adapter.js @@ -28,23 +28,28 @@ class AntiEtcdAdapter is_local['::'] = true; is_local[''] = true; // split :, 3 -> :: - const selected = cluster.map(s => s.split(':', 3)).filter(ip => is_local[ip[1].substr(2)] && (!cfg_port || ip[2] == cfg_port)); + const cluster_local = cluster.map(s => + { + const m = /^https?:\/\/(?:\[(.*)\]|([^\[\:]+))(?::(\d+))?$/.exec(s); + return [ m[2] || m[1], m[3] || 2379 ]; + }); + const selected = cluster_local.filter(ip => is_local[ip[0]] && (!cfg_port || ip[1] == cfg_port)); if (selected.length > 1) { - console.error('More than 1 etcd_address matches local IPs, please specify port'); + console.error('More than 1 etcd_address matches local IPs: '+(selected.join(', '))+', please specify port'); process.exit(1); } else if (selected.length == 1) { const antietcd_config = { - ip: selected[0][1].substr(2), - port: selected[0][2], + ip: selected[0][0], + port: selected[0][1], cert: config.antietcd_cert, key: config.antietcd_key, ca: config.antietcd_ca, - data: config.antietcd_data_file || ((config.antietcd_data_dir || '/var/lib/vitastor') + '/mon_'+selected[0][2]+'.json.gz'), + data: config.antietcd_data_file || ((config.antietcd_data_dir || '/var/lib/vitastor') + '/mon_'+selected[0][1]+'.json.gz'), persist_filter: vitastor_persist_filter({ vitastor_prefix: config.etcd_prefix || '/vitastor' }), - node_id: selected[0][1].substr(2)+':'+selected[0][2], // node_id = ip:port + node_id: selected[0][0]+':'+selected[0][1], // node_id = ip:port cluster: (cluster.length == 1 ? null : cluster.reduce((a, c) => { a[c.replace(/^(https?:\/\/)/, '')] = c; return a; }, {})), cluster_key: (config.etcd_prefix || '/vitastor'), stale_read: 1,