Example usage for com.amazonaws.services.ec2.model InstanceStatus getInstanceState

List of usage examples for com.amazonaws.services.ec2.model InstanceStatus getInstanceState

Introduction

In this page you can find the example usage for com.amazonaws.services.ec2.model InstanceStatus getInstanceState.

Prototype


public InstanceState getInstanceState() 

Source Link

Document

The intended state of the instance.

Usage

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()));
}