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