Package com.dowdandassociates.gentoo.bootstrap

Source Code of com.dowdandassociates.gentoo.bootstrap.InstanceUtils

/*
*
* InstanceUtils.java
*
*-----------------------------------------------------------------------------
* Copyright 2013 Dowd and Associates
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-----------------------------------------------------------------------------
*
*/

package com.dowdandassociates.gentoo.bootstrap;

import com.amazonaws.services.ec2.AmazonEC2;
import com.amazonaws.services.ec2.model.DescribeInstancesRequest;
import com.amazonaws.services.ec2.model.DescribeInstancesResult;
import com.amazonaws.services.ec2.model.DescribeInstanceStatusRequest;
import com.amazonaws.services.ec2.model.DescribeInstanceStatusResult;
import com.amazonaws.services.ec2.model.Image;
import com.amazonaws.services.ec2.model.Instance;
import com.amazonaws.services.ec2.model.InstanceStatus;
import com.amazonaws.services.ec2.model.Placement;
import com.amazonaws.services.ec2.model.RunInstancesRequest;
import com.amazonaws.services.ec2.model.RunInstancesResult;

import com.google.common.base.Optional;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class InstanceUtils
{
    private static Logger log = LoggerFactory.getLogger(InstanceUtils.class);

    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)
    {
        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));
    }
}
TOP

Related Classes of com.dowdandassociates.gentoo.bootstrap.InstanceUtils

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.