in scripts/resume.py [0:0]
def create_instances_request(nodes, partition_name, placement_group, job_id=None):
"""Call regionInstances.bulkInsert to create instances"""
assert len(nodes) > 0
if placement_group:
assert len(nodes) <= min(PLACEMENT_MAX_CNT, BULK_INSERT_LIMIT)
else:
assert len(nodes) <= BULK_INSERT_LIMIT
# model here indicates any node that can be used to describe the rest
model = next(iter(nodes))
nodeset = lkp.node_nodeset(model)
template = lkp.node_template(model)
region = lkp.node_region(model)
partition = cfg.partitions[partition_name]
log.debug(f"create_instances_request: {model} placement: {placement_group}")
body = NSDict()
body.count = len(nodes)
body.minCount = 1
# source of instance properties
body.sourceInstanceTemplate = template
labels = (
dict(slurm_job_id=job_id)
if job_id is not None and partition.enable_job_exclusive
else None
)
# overwrites properties across all instances
body.instanceProperties = instance_properties(
nodeset, model, placement_group, labels
)
# key is instance name, value overwrites properties
body.perInstanceProperties = {k: per_instance_properties(k) for k in nodes}
zones = {
**{
f"zones/{zone}": {"preference": "ALLOW"}
for zone in nodeset.zone_policy_allow or []
},
**{
f"zones/{zone}": {"preference": "DENY"}
for zone in nodeset.zone_policy_deny or []
},
}
body.locationPolicy.targetShape = cfg.zone_target_shape or "ANY_SINGLE_ZONE"
if zones:
body.locationPolicy.locations = zones
if lkp.cfg.enable_slurm_gcp_plugins:
slurm_gcp_plugins.pre_instance_bulk_insert(
lkp=lkp,
nodes=nodes,
placement_group=placement_group,
request_body=body,
)
request = util.compute.regionInstances().bulkInsert(
project=cfg.project, region=region, body=body.to_dict()
)
if log.isEnabledFor(logging.DEBUG):
log.debug(
f"new request: endpoint={request.methodId} nodes={to_hostlist_fast(nodes)}"
)
log_api_request(request)
return request