List of usage examples for com.amazonaws.services.ec2.model InstanceStatus getInstanceState
public InstanceState getInstanceState()
The intended state of the instance.
From source file:com.cloudera.director.aws.ec2.EC2Provider.java
License:Apache License
/** * Returns a map from virtual instance IDs to instance state for the specified batch of virtual * instance IDs.// w w w .ja v a2 s .c o m * * @param virtualInstanceIds batch of virtual instance IDs * @return the map from instance IDs to instance state for the specified batch of virtual * instance IDs */ private Map<String, InstanceState> getBatchInstanceState(Collection<String> virtualInstanceIds) { Map<String, InstanceState> instanceStateByVirtualInstanceId = Maps .newHashMapWithExpectedSize(virtualInstanceIds.size()); BiMap<String, String> virtualInstanceIdsByEC2InstanceId = getEC2InstanceIdsByVirtualInstanceId( virtualInstanceIds).inverse(); int page = 0; LOG.info(">> Fetching page {}", page); if (virtualInstanceIdsByEC2InstanceId.isEmpty()) { // No EC2 instances are found, which means these id's are already terminated and gone. // In practice, this is possible when no instances were provisioned to begin with. // For example, when a deployment fails due to tagging error. return instanceStateByVirtualInstanceId; } DescribeInstanceStatusResult result = client.describeInstanceStatus(new DescribeInstanceStatusRequest() // Note that sending in an empty set will result in fetching _all_ instance Ids. // It requires you to send one or more EC2 Ids .withInstanceIds(virtualInstanceIdsByEC2InstanceId.keySet()).withIncludeAllInstances(true)); LOG.info("<< Result: {}", result); while (!result.getInstanceStatuses().isEmpty()) { for (InstanceStatus status : result.getInstanceStatuses()) { InstanceStateName currentState = InstanceStateName.fromValue(status.getInstanceState().getName()); String ec2InstanceId = status.getInstanceId(); String virtualInstanceId = virtualInstanceIdsByEC2InstanceId.get(ec2InstanceId); InstanceState instanceState = EC2InstanceState.fromInstanceStateName(currentState); instanceStateByVirtualInstanceId.put(virtualInstanceId, instanceState); } String nextToken = result.getNextToken(); if (nextToken != null) { page++; LOG.info(">> Fetching page {} using token {}", page, nextToken); result = client .describeInstanceStatus(new DescribeInstanceStatusRequest().withNextToken(nextToken)); LOG.info("<< Result: {}", result); } else { break; } } return instanceStateByVirtualInstanceId; }
From source file:com.cloudera.director.aws.ec2.EC2Provider.java
License:Apache License
/** * Waits until the instance has entered a running state. * * @param ec2InstanceId the EC2 instance id * @return true if the instance has entered a running state, false if the instance is shutting down/terminated or * the function has timed out waiting for the instance to enter one of these two states. *///from ww w. java 2 s . c om private boolean waitUntilInstanceHasStarted(String ec2InstanceId) throws InterruptedException { // TODO: Add a timeout to this loop. while (true) { DescribeInstanceStatusResult result = client.describeInstanceStatus(new DescribeInstanceStatusRequest() .withIncludeAllInstances(true).withInstanceIds(ec2InstanceId)); for (InstanceStatus status : result.getInstanceStatuses()) { InstanceStateName currentState = InstanceStateName.fromValue(status.getInstanceState().getName()); if (ec2InstanceId.equals(status.getInstanceId())) { if (currentState.equals(InstanceStateName.Terminated) || currentState.equals(InstanceStateName.ShuttingDown)) { LOG.error("Instance {} has unexpectedly terminated", ec2InstanceId); return false; } else if (!currentState.equals(InstanceStateName.Pending)) { return true; } } } TimeUnit.SECONDS.sleep(5); } }
From source file:com.dowdandassociates.gentoo.bootstrap.InstanceUtils.java
License:Apache License
public static Optional<Instance> onDemandInstance(AmazonEC2 ec2Client, Optional<Image> image, Integer minCount, Integer maxCount, SecurityGroupInformation securityGroupInformation, KeyPairInformation keyPairInformation, Optional<String> instanceType, Optional<String> availabilityZone, Long sleep) {//from w w w. j a v a 2 s . com if (!image.isPresent()) { return Optional.absent(); } RunInstancesRequest runInstancesRequest = new RunInstancesRequest().withImageId(image.get().getImageId()) .withMinCount(minCount).withMaxCount(maxCount) .withSecurityGroups(securityGroupInformation.getGroupName()) .withKeyName(keyPairInformation.getName()); log.info("ImageId=" + image.get().getImageId()); log.info("MinCount=" + minCount); log.info("MaxCount=" + maxCount); log.info("SecurityGroups.1=" + securityGroupInformation.getGroupName()); log.info("KeyName=" + keyPairInformation.getName()); if (instanceType.isPresent()) { runInstancesRequest.setInstanceType(instanceType.get()); log.info("InstanceType=" + instanceType.get()); } if (availabilityZone.isPresent()) { runInstancesRequest.setPlacement(new Placement().withAvailabilityZone(availabilityZone.get())); log.info("Placement.AvailabilityZone=" + availabilityZone.get()); } RunInstancesResult runInstancesResult = ec2Client.runInstances(runInstancesRequest); DescribeInstanceStatusRequest describeInstanceStatusRequest = new DescribeInstanceStatusRequest() .withInstanceIds(runInstancesResult.getReservation().getInstances().get(0).getInstanceId()); try { while (true) { log.info("Sleeping for " + sleep + " ms"); Thread.sleep(sleep); DescribeInstanceStatusResult describeInstanceStatusResult = ec2Client .describeInstanceStatus(describeInstanceStatusRequest); if (describeInstanceStatusResult.getInstanceStatuses().isEmpty()) { continue; } InstanceStatus instance = describeInstanceStatusResult.getInstanceStatuses().get(0); String instanceState = instance.getInstanceState().getName(); log.info("instanceState = " + instanceState); if ("pending".equals(instanceState)) { continue; } if (!"running".equals(instanceState)) { return Optional.absent(); } String instanceStatus = instance.getInstanceStatus().getStatus(); String systemStatus = instance.getSystemStatus().getStatus(); log.info("instanceStatus = " + instanceStatus); log.info("systemStatus = " + systemStatus); if ("impaired".equals(instanceStatus)) { return Optional.absent(); } if ("impaired".equals(systemStatus)) { return Optional.absent(); } if (!"ok".equals(instanceStatus)) { continue; } if (!"ok".equals(systemStatus)) { continue; } break; } } catch (InterruptedException e) { return Optional.absent(); } DescribeInstancesResult describeInstancesResult = ec2Client.describeInstances(new DescribeInstancesRequest() .withInstanceIds(runInstancesResult.getReservation().getInstances().get(0).getInstanceId())); return Optional.fromNullable(describeInstancesResult.getReservations().get(0).getInstances().get(0)); }
From source file:com.ipcglobal.awscdh.config.ManageEc2.java
License:Apache License
/** * Verify EC2 instances running./* w ww . j a v a2 s . c o m*/ * * @param instances the instances * @throws Exception the exception */ private void verifyInstancesRunning(List<Instance> instances) throws Exception { List<String> instanceIds = new ArrayList<String>(); Map<String, InstanceStatusCheck> instanceStatusChecksByInstanceId = new HashMap<String, InstanceStatusCheck>(); for (Instance instance : instances) { instanceIds.add(instance.getInstanceId()); instanceStatusChecksByInstanceId.put(instance.getInstanceId(), new InstanceStatusCheck(instance)); } boolean isSuccess = false; long pollExpiresAt = System.currentTimeMillis() + (60000 * timeoutMinutesStartEc2Instances); while (true) { for (InstanceStatusCheck instanceStatusCheck : instanceStatusChecksByInstanceId.values()) instanceStatusCheck.reset(); DescribeInstanceStatusRequest describeInstanceStatusRequest = new DescribeInstanceStatusRequest() .withInstanceIds(instanceIds); while (true) { DescribeInstanceStatusResult describeInstanceStatusResult = ec2Client .describeInstanceStatus(describeInstanceStatusRequest); for (InstanceStatus instanceStatus : describeInstanceStatusResult.getInstanceStatuses()) { InstanceStatusCheck instanceStatusCheck = instanceStatusChecksByInstanceId .get(instanceStatus.getInstanceId()); instanceStatusCheck.updateState(instanceStatus.getInstanceState().getName(), instanceStatus.getSystemStatus().getStatus()); if (POLLING_VERBOSE) log.info("Status: id=" + instanceStatus.getInstanceId() + ", instance state=" + instanceStatus.getInstanceState().getName() + ", status checks=" + instanceStatus.getSystemStatus().getStatus()); } if (describeInstanceStatusResult.getNextToken() == null) break; describeInstanceStatusRequest.setNextToken(describeInstanceStatusResult.getNextToken()); } // Check if all instances are running or stopped int numInstancesRunning = 0; for (InstanceStatusCheck instanceStatusCheck : instanceStatusChecksByInstanceId.values()) { if (instanceStatusCheck.isInstanceRunning()) numInstancesRunning++; } if (numInstancesRunning == instanceStatusChecksByInstanceId.size()) { isSuccess = true; break; } // log.info(">>>>> verifyCdhInstancesRunning Instance Status - Start" // + ", numInstances=" + instanceStatusChecksByInstanceId.size() // + ", numInstancesInTargetStatus=" + numInstancesRunning ); // for( InstanceStatusCheck instanceStatusCheck : instanceStatusChecksByInstanceId.values() ) // log.info( instanceStatusCheck.toString() ); // log.info(">>>>> verifyCdhInstancesRunning Instance Status - End" ); if (System.currentTimeMillis() > pollExpiresAt) break; Thread.sleep(POLLING_INTERVAL_SECONDS * 1000L); } if (!isSuccess) throw new InstanceStatusCheckException(InstanceTargetStatus.RUNNING.toString(), new ArrayList<InstanceStatusCheck>(instanceStatusChecksByInstanceId.values())); }