is sorting good?

This commit is contained in:
2023-11-11 22:54:49 +01:00
parent 291d420e71
commit 325ac41ef1

35
main.py
View File

@@ -110,17 +110,38 @@ def yaml_to_services_list(filepath: str) -> dict|None:
print(f"appending {servicename}") print(f"appending {servicename}")
mustbefore = [] mustbefore = []
if "depends_on" in ycontent["services"][servicename]: if "depends_on" in ycontent["services"][servicename]:
for dependance in ycontent["services"][servicename]["depends_on"]: for dependencie in ycontent["services"][servicename]["depends_on"]:
mustbefore.append(dependance) mustbefore.append(dependencie)
serviceslist[servicename] = {"must_before": mustbefore, "must_after": [], "backupdone": False} serviceslist[servicename] = {"must_before": mustbefore, "must_after": [], "backupdone": False}
# on reparcourt une seconde fois pour définir de quels services ilssont les dépendances # on reparcourt une seconde fois pour définir de quels services ilssont les dépendances
for service in serviceslist: for service in serviceslist:
if len(serviceslist[service]["must_before"]): if len(serviceslist[service]["must_before"]):
for dependance in serviceslist[service]["must_before"]: for dependencie in serviceslist[service]["must_before"]:
if service not in serviceslist[dependance]["must_after"]: if service not in serviceslist[dependencie]["must_after"]:
serviceslist[dependance]["must_after"].append(service) serviceslist[dependencie]["must_after"].append(service)
return serviceslist
def order_services_by_dependencies(servicesdict: dict) -> list:
'''
Génère une liste avec les noms de services pour ordonner leurs coupures par dépendances.
Les containers étant requis seront placés avant ceux les requérant.
:param servicesdict: dict
:return: list
'''
serviceslist = []
for service in servicesdict:
if len(servicesdict[service]["must_after"]) and len(serviceslist):
depindex = len(serviceslist) -1
for dependencieof in servicesdict[service]["must_after"]:
if dependencieof in serviceslist and serviceslist.index(dependencieof) < depindex:
depindex = serviceslist.index(dependencieof)
serviceslist.insert(service, depindex)
else:
serviceslist.append(service)
return serviceslist return serviceslist
@@ -181,4 +202,6 @@ if __name__ == '__main__':
#read_config_file() #read_config_file()
print(json.dumps(yaml_to_services_list(composefile), indent=4)) servicesDict = yaml_to_services_list(composefile)
servicesList = order_services_by_dependencies(servicesDict)
print(servicesList)