From d1780b0a87a3af4805fdca75f37b936db697ef51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Wed, 10 Feb 2016 09:08:32 +0100 Subject: [PATCH] worker: use actual tenants to determine if hobo_notify is relevant (#9821) --- hobo/agent/worker/services.py | 38 +++++++++++++++++++++++++++++++++----- hobo/agent/worker/settings.py | 11 +++++++++++ 2 files changed, 44 insertions(+), 5 deletions(-) diff --git a/hobo/agent/worker/services.py b/hobo/agent/worker/services.py index 53ba5d0..9647590 100644 --- a/hobo/agent/worker/services.py +++ b/hobo/agent/worker/services.py @@ -29,12 +29,20 @@ from . import settings class BaseService(object): + tenants_dir = None + def __init__(self, base_url, title, secret_key, **kwargs): self.base_url = base_url self.title = title self.secret_key = secret_key @classmethod + def get_actual_tenants(cls): + if cls.tenants_dir and os.path.exists(cls.tenants_dir): + return os.listdir(cls.tenants_dir) + return None + + @classmethod def is_for_us(cls, url): # This function checks if the requested service is to be hosted # on this server, and return True if appropriate. @@ -75,13 +83,17 @@ class BaseService(object): @classmethod def notify(cls, data): - for audience in data.get('audience', []): - if cls.is_for_us(audience): - break - else: - return if not os.path.exists(cls.service_manage_try_cmd): return + tenants = cls.get_actual_tenants() + if tenants is not None: + for audience in data.get('audience', []): + parsed_url = urllib2.urlparse.urlsplit(audience) + netloc = parsed_url.netloc.split(':')[0] + if netloc in tenants: + break + else: + return cmd = cls.service_manage_cmd + ' hobo_notify -' try: cmd_process = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, @@ -97,48 +109,60 @@ class Passerelle(BaseService): service_id = 'passerelle' service_manage_cmd = settings.PASSERELLE_MANAGE_COMMAND service_manage_try_cmd = settings.PASSERELLE_MANAGE_TRY_COMMAND + tenants_dir = settings.PASSERELLE_TENANTS_DIRECTORY class Wcs(BaseService): service_id = 'wcs' service_manage_cmd = settings.WCS_MANAGE_COMMAND service_manage_try_cmd = settings.WCS_MANAGE_TRY_COMMAND + tenants_dir = settings.WCS_TENANTS_DIRECTORY class Authentic(BaseService): service_id = 'authentic' service_manage_cmd = settings.AUTHENTIC_MANAGE_COMMAND service_manage_try_cmd = settings.AUTHENTIC_MANAGE_TRY_COMMAND + tenants_dir = settings.AUTHENTIC_TENANTS_DIRECTORY + + @classmethod + def notify(cls, data): + return class Chrono(BaseService): service_id = 'chrono' service_manage_cmd = settings.CHRONO_MANAGE_COMMAND service_manage_try_cmd = settings.CHRONO_MANAGE_TRY_COMMAND + tenants_dir = settings.CHRONO_TENANTS_DIRECTORY class Combo(BaseService): service_id = 'combo' service_manage_cmd = settings.COMBO_MANAGE_COMMAND service_manage_try_cmd = settings.COMBO_MANAGE_TRY_COMMAND + tenants_dir = settings.COMBO_TENANTS_DIRECTORY class Fargo(BaseService): service_id = 'fargo' service_manage_cmd = settings.FARGO_MANAGE_COMMAND service_manage_try_cmd = settings.FARGO_MANAGE_TRY_COMMAND + tenants_dir = settings.FARGO_TENANTS_DIRECTORY class Welco(BaseService): service_id = 'welco' service_manage_cmd = settings.WELCO_MANAGE_COMMAND service_manage_try_cmd = settings.WELCO_MANAGE_TRY_COMMAND + tenants_dir = settings.WELCO_TENANTS_DIRECTORY class Mandayejs(BaseService): service_id = 'mandayejs' service_manage_cmd = settings.MANDAYEJS_MANAGE_COMMAND service_manage_try_cmd = settings.MANDAYEJS_MANAGE_TRY_COMMAND + tenants_dir = settings.MANDAYEJS_TENANTS_DIRECTORY class Piwik(BaseService): @@ -146,6 +170,10 @@ class Piwik(BaseService): service_manage_cmd = settings.PIWIK_MANAGE_COMMAND service_manage_try_cmd = settings.PIWIK_MANAGE_TRY_COMMAND + @classmethod + def notify(cls, data): + return + def deploy(environment): if 'DJANGO_SETTINGS_MODULE' in os.environ: diff --git a/hobo/agent/worker/settings.py b/hobo/agent/worker/settings.py index f6165a9..6ec16d2 100644 --- a/hobo/agent/worker/settings.py +++ b/hobo/agent/worker/settings.py @@ -37,6 +37,17 @@ WELCO_MANAGE_TRY_COMMAND = WELCO_MANAGE_COMMAND MANDAYEJS_MANAGE_TRY_COMMAND = MANDAYEJS_MANAGE_COMMAND PIWIK_MANAGE_TRY_COMMAND = PIWIK_MANAGE_COMMAND +PASSERELLE_TENANTS_DIRECTORY = '/var/lib/passerelle/tenants' +WCS_TENANTS_DIRECTORY = '/var/lib/wcs-au-quotidien' +AUTHENTIC_TENANTS_DIRECTORY = '/var/lib/authentic2-multitenant/tenants' +CHRONO_TENANTS_DIRECTORY = '/var/lib/chrono/tenants' +COMBO_TENANTS_DIRECTORY = '/var/lib/combo/tenants' +FARGO_TENANTS_DIRECTORY = '/var/lib/fargo/tenants' +WELCO_TENANTS_DIRECTORY = '/var/lib/welco/tenants' +MANDAYEJS_TENANTS_DIRECTORY = '/var/lib/mandayejs/tenants' + + + local_settings_file = os.environ.get('HOBO_AGENT_SETTINGS_FILE', os.path.join(os.path.dirname(__file__), 'local_settings.py')) if os.path.exists(local_settings_file): -- 2.7.0