diff --git a/inventory_provider/tasks/config.py b/inventory_provider/tasks/config.py index 3caa57d149ec8f773d5384309c04f2c1dbfc8816..89d3792f9d54c47d62f8fccdb400088bcfc3ee6f 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