List of usage examples for com.amazonaws.services.ecs.model DescribeContainerInstancesRequest DescribeContainerInstancesRequest
DescribeContainerInstancesRequest
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()); }