Example usage for com.amazonaws.services.ecs.model DescribeContainerInstancesRequest DescribeContainerInstancesRequest

List of usage examples for com.amazonaws.services.ecs.model DescribeContainerInstancesRequest DescribeContainerInstancesRequest

Introduction

In this page you can find the example usage for com.amazonaws.services.ecs.model DescribeContainerInstancesRequest DescribeContainerInstancesRequest.

Prototype

DescribeContainerInstancesRequest

Source Link

Usage

From source file:com.cloudbees.jenkins.plugins.amazonecs.ECSService.java

License:Open Source License

void waitForSufficientClusterResources(Date timeout, ECSTaskTemplate template, String clusterArn)
        throws InterruptedException, AbortException {
    AmazonECSClient client = getAmazonECSClient();

    boolean hasEnoughResources = false;
    WHILE: do {/*  www  . j  av  a 2  s. c  o m*/
        ListContainerInstancesResult listContainerInstances = client
                .listContainerInstances(new ListContainerInstancesRequest().withCluster(clusterArn));
        DescribeContainerInstancesResult containerInstancesDesc = client
                .describeContainerInstances(new DescribeContainerInstancesRequest()
                        .withContainerInstances(listContainerInstances.getContainerInstanceArns())
                        .withCluster(clusterArn));
        LOGGER.log(Level.INFO, "Found {0} instances", containerInstancesDesc.getContainerInstances().size());
        for (ContainerInstance instance : containerInstancesDesc.getContainerInstances()) {
            LOGGER.log(Level.INFO, "Resources found in instance {1}: {0}",
                    new Object[] { instance.getRemainingResources(), instance.getContainerInstanceArn() });
            Resource memoryResource = null;
            Resource cpuResource = null;
            for (Resource resource : instance.getRemainingResources()) {
                if ("MEMORY".equals(resource.getName())) {
                    memoryResource = resource;
                } else if ("CPU".equals(resource.getName())) {
                    cpuResource = resource;
                }
            }

            LOGGER.log(Level.INFO, "Instance {0} has {1}mb of free memory. {2}mb are required",
                    new Object[] { instance.getContainerInstanceArn(), memoryResource.getIntegerValue(),
                            template.getMemory() });
            LOGGER.log(Level.INFO, "Instance {0} has {1} units of free cpu. {2} units are required",
                    new Object[] { instance.getContainerInstanceArn(), cpuResource.getIntegerValue(),
                            template.getCpu() });
            if (memoryResource.getIntegerValue() >= template.getMemory()
                    && cpuResource.getIntegerValue() >= template.getCpu()) {
                hasEnoughResources = true;
                break WHILE;
            }
        }

        // sleep 10s and check memory again
        Thread.sleep(10000);
    } while (!hasEnoughResources && timeout.after(new Date()));

    if (!hasEnoughResources) {
        final String msg = MessageFormat.format(
                "Timeout while waiting for sufficient resources: {0} cpu units, {1}mb free memory",
                template.getCpu(), template.getMemory());
        LOGGER.log(Level.WARNING, msg);
        throw new AbortException(msg);
    }
}

From source file:com.netflix.spinnaker.clouddriver.ecs.provider.agent.ContainerInstanceCachingAgent.java

License:Apache License

@Override
protected List<ContainerInstance> getItems(AmazonECS ecs, ProviderCache providerCache) {
    List<ContainerInstance> containerInstanceList = new LinkedList<>();
    Set<String> clusters = getClusters(ecs, providerCache);

    for (String cluster : clusters) {
        String nextToken = null;/*www. j  a v a 2 s.  c  o m*/
        do {
            ListContainerInstancesRequest listContainerInstancesRequest = new ListContainerInstancesRequest()
                    .withCluster(cluster);
            if (nextToken != null) {
                listContainerInstancesRequest.setNextToken(nextToken);
            }

            ListContainerInstancesResult listContainerInstancesResult = ecs
                    .listContainerInstances(listContainerInstancesRequest);
            List<String> containerInstanceArns = listContainerInstancesResult.getContainerInstanceArns();
            if (containerInstanceArns.size() == 0) {
                continue;
            }

            List<ContainerInstance> containerInstances = ecs
                    .describeContainerInstances(new DescribeContainerInstancesRequest().withCluster(cluster)
                            .withContainerInstances(containerInstanceArns))
                    .getContainerInstances();
            containerInstanceList.addAll(containerInstances);

            nextToken = listContainerInstancesResult.getNextToken();
        } while (nextToken != null && nextToken.length() != 0);
    }
    return containerInstanceList;
}

From source file:com.remediatetheflag.global.utils.AWSHelper.java

License:Apache License

public RTFInstanceReservation pollReservation(RTFInstanceReservation reservation) {

    if (null == reservation.getEcs()) {
        reservation.setError(true);/*  w w  w.  j  av  a2 s  .c om*/
        reservation.setFulfilled(false);
        reservation.setWaitSeconds(0);
        return reservation;
    }
    AmazonECS client = AmazonECSClientBuilder.standard().withRegion(reservation.getEcs().getRegion())
            .withCredentials(new DefaultAWSCredentialsProviderChain()).build();

    DescribeTasksRequest request = new DescribeTasksRequest().withCluster(RTFConfig.getExercisesCluster())
            .withTasks(reservation.getEcs().getTaskArn());
    try {
        DescribeTasksResult response = client.describeTasks(request);

        if (response.getTasks().isEmpty()) {
            reservation.setError(true);
            reservation.setFulfilled(true);
            reservation.setWaitSeconds(0);
            return reservation;
        }

        Integer rdpPort = -1;
        Integer httpPort = -1;

        Task task = response.getTasks().get(0);

        if (task.getLastStatus().equalsIgnoreCase(Constants.AWS_ECS_STATUS_STOPPED)) {
            reservation.setError(true);
            reservation.setFulfilled(true);
            reservation.setWaitSeconds(0);
            return reservation;
        }

        List<NetworkBinding> nb = task.getContainers().get(0).getNetworkBindings();
        if (nb.size() > 2) {
            logger.warn("More than two port bindings, only RDP 3389 and HTTP 8080 will be mapped");
        }
        for (NetworkBinding b : nb) {
            if (b.getContainerPort().equals(3389)) {
                rdpPort = b.getHostPort();
            } else if (b.getContainerPort().equals(8080)) {
                httpPort = b.getHostPort();
            }
        }
        if (rdpPort == -1 || httpPort == -1) {
            reservation.setFulfilled(false);
            reservation.setError(false);
            reservation.setWaitSeconds(10);
            return reservation;
        }
        reservation.getEcs().setHttpPort(httpPort);
        reservation.getEcs().setRdpPort(rdpPort);

        String containerInstanceId = task.getContainerInstanceArn();
        DescribeContainerInstancesRequest containerRequest = new DescribeContainerInstancesRequest()
                .withCluster(RTFConfig.getExercisesCluster()).withContainerInstances(containerInstanceId);
        DescribeContainerInstancesResult containerResponse = client
                .describeContainerInstances(containerRequest);

        if (containerResponse.getContainerInstances().isEmpty()) {
            reservation.setFulfilled(false);
            reservation.setError(true);
            reservation.setWaitSeconds(0);
            return reservation;
        }
        String ec2InstanceId = containerResponse.getContainerInstances().get(0).getEc2InstanceId();

        AmazonEC2 ec2 = AmazonEC2ClientBuilder.standard().withRegion(reservation.getEcs().getRegion())
                .withCredentials(new DefaultAWSCredentialsProviderChain()).build();
        DescribeInstancesRequest instanceRequest = new DescribeInstancesRequest()
                .withInstanceIds(ec2InstanceId);
        DescribeInstancesResult instanceInstances = ec2.describeInstances(instanceRequest);

        if (instanceInstances.getReservations().isEmpty()
                || instanceInstances.getReservations().get(0).getInstances().isEmpty()) {
            reservation.setFulfilled(false);
            reservation.setError(true);
            reservation.setWaitSeconds(0);
            return reservation;
        }

        String ipAddress = instanceInstances.getReservations().get(0).getInstances().get(0)
                .getPrivateIpAddress();
        reservation.getEcs().setIpAddress(ipAddress);
        reservation.setFulfilled(true);
        reservation.setError(false);
        reservation.setWaitSeconds(0);
        return reservation;

    } catch (Exception e) {
        logger.error("Error pollReservation " + e.getMessage());
        reservation.setError(true);
        reservation.setFulfilled(false);
        reservation.setWaitSeconds(0);
        return reservation;
    }
}

From source file:com.steelbridgelabs.oss.neo4j.cluster.ecs.AutoscalingGroupMembers.java

License:Apache License

private static List<String> ec2Instances(String cluster) {
    // aws ecs client
    AmazonECS client = AmazonECSClientBuilder.defaultClient();
    // create request
    DescribeContainerInstancesRequest request = new DescribeContainerInstancesRequest();
    // cluster name
    request.withCluster(cluster);//w  w  w. j a  v a 2 s  .  c o m
    // container instances to describe
    request.withContainerInstances(containerInstanceArns(client, cluster));
    // describe instances
    DescribeContainerInstancesResult result = client.describeContainerInstances(request);
    // return ec2 instance ids
    return result.getContainerInstances().stream().map(ContainerInstance::getEc2InstanceId)
            .collect(Collectors.toList());
}