in ansible/roles/slurm/files/scripts/util.py [0:0]
def instances(self, project=None, slurm_cluster_name=None):
slurm_cluster_name = slurm_cluster_name or self.cfg.slurm_cluster_name
project = project or self.project
instance_information_fields = [
"advancedMachineFeatures",
"cpuPlatform",
"creationTimestamp",
"disks",
"disks",
"fingerprint",
"guestAccelerators",
"hostname",
"id",
"kind",
"labelFingerprint",
"labels",
"lastStartTimestamp",
"lastStopTimestamp",
"lastSuspendedTimestamp",
"machineType",
"metadata",
"name",
"networkInterfaces",
"resourceStatus",
"scheduling",
"selfLink",
"serviceAccounts",
"shieldedInstanceConfig",
"shieldedInstanceIntegrityPolicy",
"sourceMachineImage",
"status",
"statusMessage",
"tags",
"zone",
# "deletionProtection",
# "startRestricted",
]
if lkp.cfg.enable_slurm_gcp_plugins:
slurm_gcp_plugins.register_instance_information_fields(
lkp=lkp,
project=project,
slurm_cluster_name=slurm_cluster_name,
instance_information_fields=instance_information_fields,
)
instance_information_fields = sorted(set(instance_information_fields))
instance_fields = ",".join(instance_information_fields)
fields = f"items.zones.instances({instance_fields}),nextPageToken"
flt = f"labels.slurm_cluster_name={slurm_cluster_name} AND name:{slurm_cluster_name}-*"
act = self.compute.instances()
op = act.aggregatedList(project=project, fields=fields, filter=flt)
def properties(inst):
"""change instance properties to a preferred format"""
inst["zone"] = trim_self_link(inst["zone"])
inst["machineType"] = trim_self_link(inst["machineType"])
# metadata is fetched as a dict of dicts like:
# {'key': key, 'value': value}, kinda silly
metadata = {i["key"]: i["value"] for i in inst["metadata"].get("items", [])}
if "slurm_instance_role" not in metadata:
return None
inst["role"] = metadata["slurm_instance_role"]
inst["metadata"] = metadata
# del inst["metadata"] # no need to store all the metadata
return NSDict(inst)
instances = {}
while op is not None:
result = ensure_execute(op)
instance_iter = (
(inst["name"], properties(inst))
for inst in chain.from_iterable(
m["instances"] for m in result.get("items", {}).values()
)
)
instances.update(
{name: props for name, props in instance_iter if props is not None}
)
op = act.aggregatedList_next(op, result)
return instances