in ansible/roles/slurm/files/scripts/destroy_nodes.py [0:0]
def main(args):
required_map = {
"labels.slurm_cluster_name": args.slurm_cluster_name,
"labels.slurm_instance_role": "compute",
}
required_list = [f"{k}={v}" for k, v in required_map.items()]
required_logic = " AND ".join(required_list)
target_list = (
" OR ".join([f"name={x}" for x in args.target.split(",")])
if args.target
else ""
)
target_logic = f"AND ({target_list})" if args.target else ""
exclude_list = (
" AND ".join([f"name!={x}" for x in args.exclude.split(",")])
if args.exclude
else ""
)
exclude_logic = f"AND ({exclude_list})" if args.exclude else ""
filter = f"{required_logic} {target_logic} {exclude_logic}"
log.debug(f'filter = "{filter}"')
# NOTE: It is not technically possible to filter by metadata or other
# complex nested items
p_id = args.project_id if args.project_id else lkp.project
if not p_id:
print("Error: Project id cannot be determined")
exit(1)
result = compute.instances().aggregatedList(project=p_id, filter=filter).execute()
compute_list = []
for item in result["items"].values():
instances = item.get("instances")
if instances is not None:
for instance in instances:
compute_list.append(instance["selfLink"])
delete_instances(compute_list)
if len(compute_list) > 0:
sleep_dur = 30
log.info(f"Done. Sleeping for {sleep_dur} seconds.")
sleep(sleep_dur)