From 36d1b5960e58d39c128b228ab82c5891a1493d06 Mon Sep 17 00:00:00 2001
From: Erik Reid <erik.reid@geant.org>
Date: Tue, 28 May 2019 21:58:37 +0200
Subject: [PATCH] use sentinel to find master

---
 inventory_provider/tasks/config.py | 45 +++++++++++++++++++-----------
 1 file changed, 28 insertions(+), 17 deletions(-)

diff --git a/inventory_provider/tasks/config.py b/inventory_provider/tasks/config.py
index 3caa57d1..89d3792f 100644
--- a/inventory_provider/tasks/config.py
+++ b/inventory_provider/tasks/config.py
@@ -1,25 +1,36 @@
-import json
-from os import getenv
-
 import logging
+import os
+import re
+
+import redis.sentinel
 
 logger = logging.getLogger(__name__)
 
-broker_url = getenv(
-    'CELERY_BROKER_URL',
-    default='redis://test-dashboard02.geant.org:6379/1')
+broker_hostname = os.getenv('BROKER_HOSTNAME')
+assert broker_hostname is not None
+broker_port = int(os.getenv('BROKER_PORT'))
+broker_db_index = int(os.getenv('BROKER_DB_INDEX'))
+
+broker_scheme = os.getenv('BROKER_SCHEME', 'redis')
+assert broker_scheme in ('redis', 'sentinel'), 'unsupported broker scheme'
+
+if broker_scheme == 'sentinel':
+    master_name = os.getenv('SENTINEL_MASTER_NAME')
+    assert master_name is not None
+    sentinel = redis.sentinel.Sentinel(
+        [(broker_hostname, broker_port)],
+        socket_timeout=0.1)
+    master = sentinel.discover_master(master_name)
+    assert master
+    broker_hostname = master[0]
+    broker_port = master[1]
+
+if re.match('^[\d:]+$', broker_hostname):
+    # handle case where hostname is an ipv6 address
+    broker_hostname = '[%s]' % broker_hostname
 
+broker_url = 'redis://%s:%d/%d' % (
+    broker_hostname, broker_port, broker_db_index)
 result_backend = broker_url
-if result_backend:
-    # bugfix workaround
-    result_backend = result_backend.split(';')[0]
-
-tmp_options = getenv(
-    'BROKER_TRANSPORT_OPTIONS',
-    default='')
-if tmp_options:
-    broker_transport_options = json.loads(tmp_options)
-else:
-    broker_transport_options = {}
 
 task_eager_propagates = True
-- 
GitLab