List of usage examples for com.amazonaws.services.ecs.model Task getContainerInstanceArn
public String getContainerInstanceArn()
The ARN of the container instances that host the task.
From source file:com.netflix.spinnaker.clouddriver.ecs.provider.agent.TaskCachingAgent.java
License:Apache License
public static Map<String, Object> convertTaskToAttributes(Task task) { String taskId = StringUtils.substringAfterLast(task.getTaskArn(), "/"); Map<String, Object> attributes = new HashMap<>(); attributes.put("taskId", taskId); attributes.put("taskArn", task.getTaskArn()); attributes.put("clusterArn", task.getClusterArn()); attributes.put("containerInstanceArn", task.getContainerInstanceArn()); attributes.put("group", task.getGroup()); attributes.put("containers", task.getContainers()); attributes.put("lastStatus", task.getLastStatus()); attributes.put("desiredStatus", task.getDesiredStatus()); attributes.put("startedAt", task.getStartedAt().getTime()); return attributes; }
From source file:com.remediatetheflag.global.utils.AWSHelper.java
License:Apache License
protected RTFECSContainerTask createInstance(String clusterName, String instanceName, String password, RTFECSTaskDefinition taskDef, Integer duration, User user) { AmazonECS client = AmazonECSClientBuilder.standard().withRegion(taskDef.getRegion()) .withCredentials(new DefaultAWSCredentialsProviderChain()).build(); TaskOverride overrides = new TaskOverride(); List<ContainerOverride> containerOverrides = new LinkedList<ContainerOverride>(); ContainerOverride co = new ContainerOverride(); List<KeyValuePair> environment = new LinkedList<KeyValuePair>(); KeyValuePair kv = new KeyValuePair(); kv.setName(Constants.ENV_USR_PWD);/*from w w w . j ava 2s . c om*/ kv.setValue(password); environment.add(kv); co.setEnvironment(environment); co.setName(taskDef.getContainerName()); containerOverrides.add(co); overrides.setContainerOverrides(containerOverrides); RunTaskRequest request = new RunTaskRequest().withCluster(clusterName) .withTaskDefinition(taskDef.getTaskDefinitionArn()).withOverrides(overrides); logger.debug("# ECS Requesting Task " + instanceName + " for user " + user.getIdUser() + " with task definition: " + taskDef.getTaskDefinitionArn() + " on cluster: " + clusterName + " on region " + taskDef.getRegion().getName()); try { RunTaskResult response = client.runTask(request); String failureReason = ""; if (response.getTasks().isEmpty()) { for (Failure failure : response.getFailures()) { failureReason += "\n" + failure.getReason(); } logger.error("Task creation failed due to: \n" + failureReason); return null; } Task task = response.getTasks().get(0); RTFECSContainerTask rtfInstance = new RTFECSContainerTask(); rtfInstance.setCluster(task.getClusterArn()); rtfInstance.setTaskArn(task.getTaskArn()); rtfInstance.setIdContainerInstance(task.getContainerInstanceArn()); rtfInstance.setName(instanceName); rtfInstance.setRegion(taskDef.getRegion()); rtfInstance.setUser(user); rtfInstance.setCreateTime(task.getCreatedAt()); rtfInstance.setStatus(Constants.STATUS_PENDING); logger.debug("# ECS Task " + instanceName + " created for user " + user.getIdUser() + " with task definition: " + taskDef.getTaskDefinitionName() + " start: " + rtfInstance.getCreateTime()); return rtfInstance; } catch (Exception e) { logger.warn("# ECS Task " + instanceName + " could not be created for user " + user.getIdUser() + " " + e.getMessage()); return null; } }
From source file:com.remediatetheflag.global.utils.AWSHelper.java
License:Apache License
public RTFInstanceReservation pollReservation(RTFInstanceReservation reservation) { if (null == reservation.getEcs()) { reservation.setError(true);/*from w w w .ja v a 2 s . c o m*/ 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; } }