in awsbatch-cli/src/awsbatch/awsbhosts.py [0:0]
def _add_host_items(self, ecs_cluster_arn, container_instances_arns, instance_ids=None):
"""
Add a list of Hosts to the output.
:param ecs_cluster_arn: ECS Cluster arn
:param container_instances_arns: container ids
:param instance_ids: hosts requested
"""
self.log.info("Container ARNs = %s" % container_instances_arns)
if container_instances_arns:
response = self.ecs_client.describe_container_instances(
cluster=ecs_cluster_arn, containerInstances=container_instances_arns
)
container_instances = response["containerInstances"]
self.log.debug("Container Instances = %s" % container_instances)
# get ec2_instance_ids
ec2_instances_ids = []
for container_instance in container_instances:
ec2_instances_ids.append(container_instance["ec2InstanceId"])
# get ec2 instances information
ec2_instances = {}
try:
ec2_client = self.boto3_factory.get_client("ec2")
paginator = ec2_client.get_paginator("describe_instances")
for page in paginator.paginate(InstanceIds=ec2_instances_ids):
for reservation in page["Reservations"]:
for instance in reservation["Instances"]:
ec2_instances[instance["InstanceId"]] = instance
except Exception as e:
fail("Error listing EC2 instances from AWS EC2. Failed with exception: %s" % e)
# merge ec2 and container information
for container_instance in container_instances:
ec2_instance_id = container_instance["ec2InstanceId"]
# filter by instance_id if there
if not instance_ids or ec2_instance_id in instance_ids:
self.log.debug("Container Instance = %s" % container_instance)
self.log.debug("EC2 Instance = %s" % ec2_instances[ec2_instance_id])
self.output.add(self.__create_host_item(container_instance, ec2_instances[ec2_instance_id]))