Store tenants in unparsed abide as dict

Simplify the code here as preparation for the cross-scheduler config
loading.

Change-Id: I0afd8c814973199781598dbefd51498ec92d733a
This commit is contained in:
Simon Westphahl 2020-12-04 12:36:29 +01:00
parent b540d1aad8
commit 8b6a887336
4 changed files with 12 additions and 19 deletions

View File

@ -734,7 +734,7 @@ class Client(zuul.cmd.ZuulApp):
tenant_config, script = sched._checkTenantSourceConf(self.config)
unparsed_abide = loader.readConfig(tenant_config, from_script=script)
try:
for conf_tenant in unparsed_abide.tenants:
for conf_tenant in unparsed_abide.tenants.values():
loader.tenant_parser.getSchema()(conf_tenant)
print("Tenants config validated with success")
err_code = 0

View File

@ -2258,10 +2258,9 @@ class ConfigLoader(object):
abide.admin_rules[admin_rule.name] = admin_rule
if tenants:
tenants_to_load = [t for t in unparsed_abide.tenants
if t.get('name') in tenants]
tenants_to_load = [unparsed_abide.tenants[t] for t in tenants]
else:
tenants_to_load = unparsed_abide.tenants
tenants_to_load = unparsed_abide.tenants.values()
for conf_tenant in tenants_to_load:
# When performing a full reload, do not use cached data.
@ -2290,12 +2289,11 @@ class ConfigLoader(object):
# We got a new unparsed abide so re-load the tenant completely.
# First check if the tenant is still existing and if not remove
# from the abide.
if tenant.name not in unparsed_abide.known_tenants:
if tenant.name not in unparsed_abide.tenants:
del new_abide.tenants[tenant.name]
return new_abide
unparsed_config = next(t for t in unparsed_abide.tenants
if t['name'] == tenant.name)
unparsed_config = unparsed_abide.tenants[tenant.name]
else:
unparsed_config = tenant.unparsed_config

View File

@ -4305,13 +4305,12 @@ class UnparsedAbideConfig(object):
"""
def __init__(self):
self.tenants = []
self.tenants = {}
self.admin_rules = []
self.known_tenants = set()
def extend(self, conf):
if isinstance(conf, UnparsedAbideConfig):
self.tenants.extend(conf.tenants)
self.tenants.update(conf.tenants)
self.admin_rules.extend(conf.admin_rules)
return
@ -4325,9 +4324,7 @@ class UnparsedAbideConfig(object):
raise ConfigItemMultipleKeysError(item)
key, value = list(item.items())[0]
if key == 'tenant':
self.tenants.append(value)
if 'name' in value:
self.known_tenants.add(value['name'])
self.tenants[value["name"]] = value
elif key == 'admin-rule':
self.admin_rules.append(value)
else:

View File

@ -762,12 +762,10 @@ class Scheduler(threading.Thread):
# We need to handle new and deleted tenants so we need to process
# all tenants from the currently known and the new ones.
tenant_names = {t for t in self.abide.tenants}
tenant_names.update(self.unparsed_abide.known_tenants)
tenant_names.update(self.unparsed_abide.tenants.keys())
for tenant_name in tenant_names:
old_tenant = [x for x in old_unparsed_abide.tenants
if x['name'] == tenant_name]
new_tenant = [x for x in self.unparsed_abide.tenants
if x['name'] == tenant_name]
old_tenant = old_unparsed_abide.tenants.get(tenant_name)
new_tenant = self.unparsed_abide.tenants.get(tenant_name)
if old_tenant == new_tenant:
continue
@ -1845,7 +1843,7 @@ class Scheduler(threading.Thread):
data['pipelines'] = pipelines
tenant = self.abide.tenants.get(tenant_name)
if not tenant:
if tenant_name not in self.unparsed_abide.known_tenants:
if tenant_name not in self.unparsed_abide.tenants:
return json.dumps({
"message": "Unknown tenant",
"code": 404