fix handling of addons in get_server_state

This commit is contained in:
zolliker 2024-05-13 14:30:44 +02:00
parent 15abee1bb1
commit 02b24ed202

View File

@ -377,16 +377,29 @@ class FrappyManager(ServiceManager):
proposed_cfg[service] = proposed proposed_cfg[service] = proposed
self.state[f'sea {service}'] = seacfg self.state[f'sea {service}'] = seacfg
given_addons = givencfgs.get('addons', '') running_addons = self.frappy_cfgs.get('addons')
running_addons = self.frappy_cfgs.get('addons', '') running_addons = set(','.split(running_addons)) if running_addons else ()
if running_addons: proposed_addons = set()
for cfg in running_addons.split(','): running_sea_addons = set()
seacfg = self.frappy2sea.get(cfg.strip()) for cfg in running_addons:
if seacfg is not None and seacfg.endswith('.addon') and seacfg[:-6] not in sealist[2:]: seacfg = self.frappy2sea.get(cfg.strip())
proposed_cfg['addons'] = {running_addons} if seacfg is None:
break proposed_addons.add(cfg) # addons with no sea cfg should be kept
elif given_addons: elif seacfg.endswith('.addon') and seacfg[:-6] in sealist[2:]:
proposed_cfg['addons'] = {given_addons} proposed_addons.add(cfg)
running_sea_addons.add(seacfg)
for scfg in sealist[2:]:
seacfg = scfg + '.addon'
if seacfg not in running_sea_addons:
proposed = self.sea2frappy.get(seacfg) or set()
if proposed:
if len(proposed) > 1:
self.error = f'ambiguous frappy cfg for {seacfg}.addon: {proposed}'
else:
proposed_addons |= proposed
if proposed_addons and set(proposed_addons) != set(running_addons):
proposed_cfg['addons'] = {','.join(sorted(proposed_addons))}
for service in FrappyManager.services: for service in FrappyManager.services:
given = givencfgs.get(service) given = givencfgs.get(service)
@ -412,7 +425,7 @@ class FrappyManager(ServiceManager):
proposed = running proposed = running
if proposed is None: if proposed is None:
self.remarks[service] = 'ambiguous frappy cfg' self.remarks[service] = 'ambiguous frappy cfg'
self.error = True self.error = f'ambiguous frappy cfg for {seacfg}: {available}'
else: else:
self.remarks[service] = '' self.remarks[service] = ''
if running == proposed: if running == proposed: