From c457ccfa6060229faf39cfa5aceedd0fd047d1d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20M=C3=B6hlmann?= Date: Sun, 7 Oct 2018 00:32:05 +0300 Subject: [PATCH] Use tenacity for resolver retries --- core/dovecot/Dockerfile | 3 ++- core/dovecot/start.py | 26 +++++++++----------------- core/postfix/Dockerfile | 3 ++- core/postfix/start.py | 19 ++++++------------- services/rspamd/Dockerfile | 3 ++- services/rspamd/start.py | 19 ++++++------------- 6 files changed, 27 insertions(+), 46 deletions(-) diff --git a/core/dovecot/Dockerfile b/core/dovecot/Dockerfile index 363a7244..3bfd67fc 100644 --- a/core/dovecot/Dockerfile +++ b/core/dovecot/Dockerfile @@ -3,7 +3,8 @@ FROM alpine:3.7 RUN echo "@testing http://nl.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories \ && apk add --no-cache \ dovecot dovecot-sqlite dovecot-pigeonhole-plugin dovecot-pigeonhole-plugin-extdata \ - dovecot-fts-lucene rspamd-client@testing python py-jinja2 + dovecot-fts-lucene rspamd-client@testing python py-jinja2 py-pip \ + && pip install tenacity COPY conf /conf COPY sieve /var/lib/dovecot diff --git a/core/dovecot/start.py b/core/dovecot/start.py index 2de114fd..bab5f1ee 100755 --- a/core/dovecot/start.py +++ b/core/dovecot/start.py @@ -4,27 +4,19 @@ import jinja2 import os import socket import glob -import time +from tenacity import retry convert = lambda src, dst: open(dst, "w").write(jinja2.Template(open(src).read()).render(**os.environ)) -# Actual startup script -i = 0 -t = 10 -while True: - i += 1 - try: - os.environ["FRONT_ADDRESS"] = socket.gethostbyname(os.environ.get("FRONT_ADDRESS", "front")) - os.environ["REDIS_ADDRESS"] = socket.gethostbyname(os.environ.get("REDIS_ADDRESS", "redis")) - if os.environ["WEBMAIL"] != "none": - os.environ["WEBMAIL_ADDRESS"] = socket.gethostbyname(os.environ.get("WEBMAIL_ADDRESS", "webmail")) - except socket.gaierror as err: - if i >= t: - raise - time.sleep(10) - continue - break +@retry(stop=stop_after_attempt(10), wait=wait_random(min=2, max=5)) +def resolve(): + os.environ["FRONT_ADDRESS"] = socket.gethostbyname(os.environ.get("FRONT_ADDRESS", "front")) + os.environ["REDIS_ADDRESS"] = socket.gethostbyname(os.environ.get("REDIS_ADDRESS", "redis")) + if os.environ["WEBMAIL"] != "none": + os.environ["WEBMAIL_ADDRESS"] = socket.gethostbyname(os.environ.get("WEBMAIL_ADDRESS", "webmail")) +# Actual startup script +resolve() for dovecot_file in glob.glob("/conf/*"): convert(dovecot_file, os.path.join("/etc/dovecot", os.path.basename(dovecot_file))) diff --git a/core/postfix/Dockerfile b/core/postfix/Dockerfile index d853c9f9..61b8f1ea 100644 --- a/core/postfix/Dockerfile +++ b/core/postfix/Dockerfile @@ -1,6 +1,7 @@ FROM alpine:3.7 -RUN apk add --no-cache postfix postfix-sqlite postfix-pcre rsyslog python py-jinja2 +RUN apk add --no-cache postfix postfix-sqlite postfix-pcre rsyslog python py-jinja2 py-pip \ + && pip install tenacity COPY conf /conf COPY start.py /start.py diff --git a/core/postfix/start.py b/core/postfix/start.py index f3c6aaca..30167da5 100755 --- a/core/postfix/start.py +++ b/core/postfix/start.py @@ -5,23 +5,16 @@ import os import socket import glob import shutil -import time +from tenacity import retry convert = lambda src, dst: open(dst, "w").write(jinja2.Template(open(src).read()).render(**os.environ)) +@retry(stop=stop_after_attempt(10), wait=wait_random(min=2, max=5)) +def resolve(): + os.environ["FRONT_ADDRESS"] = socket.gethostbyname(os.environ.get("FRONT_ADDRESS", "front")) + # Actual startup script -i = 0 -t = 10 -while True: - i += 1 - try: - os.environ["FRONT_ADDRESS"] = socket.gethostbyname(os.environ.get("FRONT_ADDRESS", "front")) - except socket.gaierror as err: - if i >= t: - raise - time.sleep(10) - continue - break +resolve() os.environ["HOST_ANTISPAM"] = os.environ.get("HOST_ANTISPAM", "antispam:11332") os.environ["HOST_LMTP"] = os.environ.get("HOST_LMTP", "imap:2525") diff --git a/services/rspamd/Dockerfile b/services/rspamd/Dockerfile index d5e93db7..e8eb49f9 100644 --- a/services/rspamd/Dockerfile +++ b/services/rspamd/Dockerfile @@ -1,6 +1,7 @@ FROM alpine:edge -RUN apk add --no-cache python py-jinja2 rspamd rspamd-controller rspamd-proxy ca-certificates +RUN apk add --no-cache python py-jinja2 rspamd rspamd-controller rspamd-proxy ca-certificates py-pip \ + && pip install tenacity RUN mkdir /run/rspamd diff --git a/services/rspamd/start.py b/services/rspamd/start.py index 08301a0d..cb9a1788 100755 --- a/services/rspamd/start.py +++ b/services/rspamd/start.py @@ -4,23 +4,16 @@ import jinja2 import os import socket import glob -import time +from tenacity import retry convert = lambda src, dst: open(dst, "w").write(jinja2.Template(open(src).read()).render(**os.environ)) +@retry(stop=stop_after_attempt(10), wait=wait_random(min=2, max=5)) +def resolve(): + os.environ["FRONT_ADDRESS"] = socket.gethostbyname(os.environ.get("FRONT_ADDRESS", "front")) + # Actual startup script -i = 0 -t = 10 -while True: - i += 1 - try: - os.environ["FRONT_ADDRESS"] = socket.gethostbyname(os.environ.get("FRONT_ADDRESS", "front")) - except socket.gaierror as err: - if i >= t: - raise - time.sleep(10) - continue - break +resolve() if "HOST_REDIS" not in os.environ: os.environ["HOST_REDIS"] = "redis" for rspamd_file in glob.glob("/conf/*"):