def _retrieve_instances_info_from_ec2()

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