in src/slurm_plugin/fleet_manager.py [0:0]
def _retrieve_instances_info_from_ec2(self, instance_ids: list):
"""
Retrieve instance info from EC2 by Instance Ids and verify to have required info.
:return list of instances with complete information and list of IDs for instances with incomplete information
"""
complete_instances = []
partial_instance_ids = []
if instance_ids:
try:
ec2_client = boto3.client("ec2", region_name=self._region, config=self._boto3_config)
paginator = ec2_client.get_paginator("describe_instances")
response_iterator = paginator.paginate(InstanceIds=instance_ids)
filtered_iterator = response_iterator.search("Reservations[].Instances[]")
for instance_info in filtered_iterator:
try:
# Try to build EC2Instance objects using all the required fields
EC2Instance.from_describe_instance_data(instance_info)
complete_instances.append(instance_info)
except KeyError as e:
logger.debug("Unable to retrieve instance info: %s", e)
partial_instance_ids.append(instance_info["InstanceId"])
except ClientError as e:
logger.debug("Unable to retrieve instance info: %s", e)
partial_instance_ids.extend(instance_ids)
return complete_instances, partial_instance_ids