is sorting good?
This commit is contained in:
35
main.py
35
main.py
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user