in src/slurm_plugin/instance_manager.py [0:0]
def get_cluster_instances(self, include_head_node=False, alive_states_only=True):
"""
Get instances that are associated with the cluster.
Instances without all the info set are ignored and not returned
"""
ec2_client = boto3.client("ec2", region_name=self._region, config=self._boto3_config)
paginator = ec2_client.get_paginator("describe_instances")
args = {
"Filters": [{"Name": "tag:parallelcluster:cluster-name", "Values": [self._cluster_name]}],
}
if alive_states_only:
args["Filters"].append({"Name": "instance-state-name", "Values": list(EC2_INSTANCE_ALIVE_STATES)})
if not include_head_node:
args["Filters"].append({"Name": "tag:parallelcluster:node-type", "Values": ["Compute"]})
response_iterator = paginator.paginate(PaginationConfig={"PageSize": BOTO3_PAGINATION_PAGE_SIZE}, **args)
filtered_iterator = response_iterator.search("Reservations[].Instances[]")
instances = []
for instance_info in filtered_iterator:
try:
private_ip, private_dns_name, all_private_ips = get_private_ip_address_and_dns_name(instance_info)
instances.append(
EC2Instance(
instance_info["InstanceId"],
private_ip,
private_dns_name.split(".")[0],
all_private_ips,
instance_info["LaunchTime"],
)
)
except Exception as e:
logger.warning(
"Ignoring instance %s because not all EC2 info are available, exception: %s, message: %s",
instance_info["InstanceId"],
type(e).__name__,
e,
)
return instances