in scripts/resume.py [0:0]
def instance_properties(nodeset, model, placement_group, labels=None):
template = lkp.node_template(model)
template_info = lkp.template_info(template)
props = NSDict()
slurm_metadata = {
"slurm_cluster_name": cfg.slurm_cluster_name,
"slurm_instance_role": "compute",
"startup-script": (
Path(cfg.slurm_scripts_dir or util.dirs.scripts) / "startup.sh"
).read_text(),
}
info_metadata = {
item.get("key"): item.get("value") for item in template_info.metadata["items"]
}
props_metadata = {**info_metadata, **slurm_metadata}
props.metadata = {
"items": [NSDict({"key": k, "value": v}) for k, v in props_metadata.items()]
}
labels = {
"slurm_cluster_name": cfg.slurm_cluster_name,
"slurm_instance_role": "compute",
**(labels or {}),
}
props.labels = {**template_info.labels, **labels}
for disk in template_info.disks:
# do not label local ssd
if (
"diskType" not in disk.initializeParams
or disk.initializeParams.diskType == "local-ssd"
):
continue
disk.initializeParams.labels.update(labels)
props.disks = template_info.disks
if placement_group:
props.scheduling = {
"onHostMaintenance": "TERMINATE",
"automaticRestart": False,
}
props.resourcePolicies = [
placement_group,
]
if nodeset.reservation_name:
reservation_name = nodeset.reservation_name
zones = list(nodeset.zone_policy_allow or [])
assert len(zones) == 1, "Only single zone is supported if using a reservation"
reservation = lkp.reservation(reservation_name, zones[0])
props.reservationAffinity = {
"consumeReservationType": "SPECIFIC_RESERVATION",
"key": f"compute.{util.universe_domain()}/reservation-name",
"values": [reservation_name],
}
policies = util.reservation_resource_policies(reservation)
if policies:
props.scheduling = {
"onHostMaintenance": "TERMINATE",
"automaticRestart": False,
}
props.resourcePolicies = policies
log.info(
f"reservation {reservation_name} is being used with policies {props.resourcePolicies}"
)
else:
props.resourcePolicies = []
log.info(
f"reservation {reservation_name} is being used without any policies"
)
if nodeset.maintenance_interval:
props.scheduling = props.scheduling or {}
props.scheduling["maintenanceInterval"] = nodeset.maintenance_interval
return props