From 21686e160532158100bbb91bc6897dfac1b9cec1 Mon Sep 17 00:00:00 2001 From: Joao Gilberto Magalhaes Date: Sun, 21 Jul 2019 00:18:13 -0500 Subject: [PATCH] Group the bind to the same port. --- swarm.py | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/swarm.py b/swarm.py index f180a26..a74cef1 100644 --- a/swarm.py +++ b/swarm.py @@ -2,6 +2,7 @@ import json import time import base64 +import hashlib from easymapping import HaproxyConfigGenerator # path = os.path.dirname(os.path.realpath(__file__)) @@ -12,6 +13,8 @@ "easymapping": [], "customerrors": True if os.getenv("HAPROXY_CUSTOMERRORS") == "true" else False } +easymapping = dict() + if os.getenv("HAPROXY_PASSWORD"): result["stats"] = { "username": os.getenv("HAPROXY_USERNAME") if os.getenv("HAPROXY_USERNAME") else "admin", @@ -34,18 +37,23 @@ continue port = d["com.byjg.easyhaproxy.port." + definition] if "com.byjg.easyhaproxy.port." + definition in d else "80" - data = { - "port": port, - "hosts": dict(), - "redirect": dict(), - # "ssl_cert": "" - } + hash = hashlib.md5(d["com.byjg.easyhaproxy.sslcert." + definition].encode('utf-8')).hexdigest() if "com.byjg.easyhaproxy.sslcert." + definition in d else "" + + key = port+hash + + if key not in easymapping: + easymapping[key] = { + "port": port, + "hosts": dict(), + "redirect": dict(), + # "ssl_cert": "" + } - data["hosts"][d["com.byjg.easyhaproxy.host." + definition]] = container + ":" + (d["com.byjg.easyhaproxy.localport." + definition] if "com.byjg.easyhaproxy.localport." + definition in d else "80") + easymapping[key]["hosts"][d["com.byjg.easyhaproxy.host." + definition]] = container + ":" + (d["com.byjg.easyhaproxy.localport." + definition] if "com.byjg.easyhaproxy.localport." + definition in d else "80") if "com.byjg.easyhaproxy.sslcert." + definition in d: filename = '/etc/haproxy/certs/' + d["com.byjg.easyhaproxy.host." + definition] + "." + str(time.time()) + ".pem" - data["ssl_cert"] = filename + easymapping[key]["ssl_cert"] = filename with open(filename, 'wb') as file: file.write(base64.b64decode(d["com.byjg.easyhaproxy.sslcert." + definition])) @@ -53,9 +61,9 @@ redirect = d["com.byjg.easyhaproxy.redirect." + definition] if "com.byjg.easyhaproxy.redirect." + definition in d else "" for r in redirect.split(","): r_parts = r.split("--") - data["redirect"][r_parts[0]] = r_parts[1] + easymapping[key]["redirect"][r_parts[0]] = r_parts[1] - result["easymapping"].append(data) + result["easymapping"] = easymapping.values() cfg = HaproxyConfigGenerator(result)