Projet

Général

Profil

0001-worker-use-actual-tenants-to-determine-if-hobo_notif.patch

Frédéric Péters, 16 mars 2016 14:14

Télécharger (5,3 ko)

Voir les différences:

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(-)
hobo/agent/worker/services.py
29 29

  
30 30

  
31 31
class BaseService(object):
32
    tenants_dir = None
33

  
32 34
    def __init__(self, base_url, title, secret_key, **kwargs):
33 35
        self.base_url = base_url
34 36
        self.title = title
35 37
        self.secret_key = secret_key
36 38

  
37 39
    @classmethod
40
    def get_actual_tenants(cls):
41
        if cls.tenants_dir and os.path.exists(cls.tenants_dir):
42
            return os.listdir(cls.tenants_dir)
43
        return None
44

  
45
    @classmethod
38 46
    def is_for_us(cls, url):
39 47
        # This function checks if the requested service is to be hosted
40 48
        # on this server, and return True if appropriate.
......
75 83

  
76 84
    @classmethod
77 85
    def notify(cls, data):
78
        for audience in data.get('audience', []):
79
            if cls.is_for_us(audience):
80
                break
81
        else:
82
            return
83 86
        if not os.path.exists(cls.service_manage_try_cmd):
84 87
            return
88
        tenants = cls.get_actual_tenants()
89
        if tenants is not None:
90
            for audience in data.get('audience', []):
91
                parsed_url = urllib2.urlparse.urlsplit(audience)
92
                netloc = parsed_url.netloc.split(':')[0]
93
                if netloc in tenants:
94
                    break
95
            else:
96
                return
85 97
        cmd = cls.service_manage_cmd + ' hobo_notify -'
86 98
        try:
87 99
            cmd_process = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE,
......
97 109
    service_id = 'passerelle'
98 110
    service_manage_cmd = settings.PASSERELLE_MANAGE_COMMAND
99 111
    service_manage_try_cmd = settings.PASSERELLE_MANAGE_TRY_COMMAND
112
    tenants_dir = settings.PASSERELLE_TENANTS_DIRECTORY
100 113

  
101 114

  
102 115
class Wcs(BaseService):
103 116
    service_id = 'wcs'
104 117
    service_manage_cmd = settings.WCS_MANAGE_COMMAND
105 118
    service_manage_try_cmd = settings.WCS_MANAGE_TRY_COMMAND
119
    tenants_dir = settings.WCS_TENANTS_DIRECTORY
106 120

  
107 121

  
108 122
class Authentic(BaseService):
109 123
    service_id = 'authentic'
110 124
    service_manage_cmd = settings.AUTHENTIC_MANAGE_COMMAND
111 125
    service_manage_try_cmd = settings.AUTHENTIC_MANAGE_TRY_COMMAND
126
    tenants_dir = settings.AUTHENTIC_TENANTS_DIRECTORY
127

  
128
    @classmethod
129
    def notify(cls, data):
130
        return
112 131

  
113 132

  
114 133
class Chrono(BaseService):
115 134
    service_id = 'chrono'
116 135
    service_manage_cmd = settings.CHRONO_MANAGE_COMMAND
117 136
    service_manage_try_cmd = settings.CHRONO_MANAGE_TRY_COMMAND
137
    tenants_dir = settings.CHRONO_TENANTS_DIRECTORY
118 138

  
119 139

  
120 140
class Combo(BaseService):
121 141
    service_id = 'combo'
122 142
    service_manage_cmd = settings.COMBO_MANAGE_COMMAND
123 143
    service_manage_try_cmd = settings.COMBO_MANAGE_TRY_COMMAND
144
    tenants_dir = settings.COMBO_TENANTS_DIRECTORY
124 145

  
125 146

  
126 147
class Fargo(BaseService):
127 148
    service_id = 'fargo'
128 149
    service_manage_cmd = settings.FARGO_MANAGE_COMMAND
129 150
    service_manage_try_cmd = settings.FARGO_MANAGE_TRY_COMMAND
151
    tenants_dir = settings.FARGO_TENANTS_DIRECTORY
130 152

  
131 153

  
132 154
class Welco(BaseService):
133 155
    service_id = 'welco'
134 156
    service_manage_cmd = settings.WELCO_MANAGE_COMMAND
135 157
    service_manage_try_cmd = settings.WELCO_MANAGE_TRY_COMMAND
158
    tenants_dir = settings.WELCO_TENANTS_DIRECTORY
136 159

  
137 160

  
138 161
class Mandayejs(BaseService):
139 162
    service_id = 'mandayejs'
140 163
    service_manage_cmd = settings.MANDAYEJS_MANAGE_COMMAND
141 164
    service_manage_try_cmd = settings.MANDAYEJS_MANAGE_TRY_COMMAND
165
    tenants_dir = settings.MANDAYEJS_TENANTS_DIRECTORY
142 166

  
143 167

  
144 168
class Piwik(BaseService):
......
146 170
    service_manage_cmd = settings.PIWIK_MANAGE_COMMAND
147 171
    service_manage_try_cmd = settings.PIWIK_MANAGE_TRY_COMMAND
148 172

  
173
    @classmethod
174
    def notify(cls, data):
175
        return
176

  
149 177

  
150 178
def deploy(environment):
151 179
    if 'DJANGO_SETTINGS_MODULE' in os.environ:
hobo/agent/worker/settings.py
37 37
MANDAYEJS_MANAGE_TRY_COMMAND = MANDAYEJS_MANAGE_COMMAND
38 38
PIWIK_MANAGE_TRY_COMMAND = PIWIK_MANAGE_COMMAND
39 39

  
40
PASSERELLE_TENANTS_DIRECTORY = '/var/lib/passerelle/tenants'
41
WCS_TENANTS_DIRECTORY = '/var/lib/wcs-au-quotidien'
42
AUTHENTIC_TENANTS_DIRECTORY = '/var/lib/authentic2-multitenant/tenants'
43
CHRONO_TENANTS_DIRECTORY = '/var/lib/chrono/tenants'
44
COMBO_TENANTS_DIRECTORY = '/var/lib/combo/tenants'
45
FARGO_TENANTS_DIRECTORY = '/var/lib/fargo/tenants'
46
WELCO_TENANTS_DIRECTORY = '/var/lib/welco/tenants'
47
MANDAYEJS_TENANTS_DIRECTORY = '/var/lib/mandayejs/tenants'
48

  
49

  
50

  
40 51
local_settings_file = os.environ.get('HOBO_AGENT_SETTINGS_FILE',
41 52
    os.path.join(os.path.dirname(__file__), 'local_settings.py'))
42 53
if os.path.exists(local_settings_file):
43
-