Package io.fathom.cloud.compute.api.aws.ec2.actions

Source Code of io.fathom.cloud.compute.api.aws.ec2.actions.RunInstancesHandler

package io.fathom.cloud.compute.api.aws.ec2.actions;

import io.fathom.cloud.CloudException;
import io.fathom.cloud.compute.actions.StartInstancesAction;
import io.fathom.cloud.compute.api.aws.ec2.model.Instance;
import io.fathom.cloud.compute.api.aws.ec2.model.RunInstancesResponse;
import io.fathom.cloud.compute.scheduler.InstanceScheduler;
import io.fathom.cloud.protobuf.CloudModel.InstanceData;
import io.fathom.cloud.protobuf.CloudModel.ReservationData;
import io.fathom.cloud.protobuf.CloudModel.SecurityGroupData;
import io.fathom.cloud.server.model.Project;
import io.fathom.cloud.services.ImageService;

import java.util.List;

import javax.inject.Inject;

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

import com.google.common.collect.Lists;

@AwsAction("RunInstances")
public class RunInstancesHandler extends AwsActionHandler {
    private static final Logger log = LoggerFactory.getLogger(RunInstancesHandler.class);
    @Inject
    InstanceScheduler scheduler;

    @Inject
    ImageService imageService;

    @Override
    public Object go() throws CloudException {
        // User user = getUser();
        Project project = getProject();

        // ImageId=ami-5168f861
        // MinCount=1
        // MaxCount=1
        // DisableApiTermination=false
        // Monitoring.Enabled=false
        // EbsOptimized=false

        StartInstancesAction action = new StartInstancesAction();

        long imageId = decodeEc2Id(get("ImageId"));

        {
            ReservationData.Builder reservation = ReservationData.newBuilder();

            ImageService.Image image = imageService.findImage(project, imageId);
            if (image == null) {
                throw new IllegalArgumentException();
            }

            reservation.setImageId(image.getId());

            action.reservationTemplate = reservation.build();
        }

        List<SecurityGroupData> securityGroups = getSecurityGroups();

        {
            InstanceData.Builder instance = InstanceData.newBuilder();

            for (SecurityGroupData securityGroup : securityGroups) {
                instance.addSecurityGroupId(securityGroup.getId());
            }
            action.instanceTemplate = instance.build();
        }

        action.maxCount = get("MaxCount", 1);
        action.minCount = get("MinCount", 1);

        // action.user = getUser();
        action.project = project;

        StartInstancesAction.Result result = action.go();

        RunInstancesResponse response = new RunInstancesResponse();
        response.requestId = getRequestId();

        response.reservationId = toEc2ReservationId(result.reservation.getId());
        response.ownerId = toEc2Owner(project.getId());

        response.groups = buildGroupsXml(securityGroups);

        response.instances = Lists.newArrayList();

        for (InstanceData instanceInfo : result.instances) {
            Instance instance = buildRunningInstanceXml(result.reservation, instanceInfo);
            response.instances.add(instance);

            instance.groups = response.groups;
        }

        // <instanceId>i-e6655ad3</instanceId>[\n]"
        // <imageId>ami-5168f861</imageId>[\n]"
        // <instanceState>[\n]"
        // <code>0</code>[\n]"
        // <name>pending</name>[\n]"
        // </instanceState>[\n]"
        // <privateDnsName/>[\n]"
        // <dnsName/>[\n]"
        // <reason/>[\n]"
        // <amiLaunchIndex>0</amiLaunchIndex>[\n]"
        // <productCodes/>[\n]"
        // <instanceType>m1.small</instanceType>[\n]"
        // <launchTime>2013-06-25T22:18:51.000Z</launchTime>[\n]"
        // <placement>[\n]"
        // <availabilityZone>us-west-2a</availabilityZone>[\n]"
        // <groupName/>[\n]"
        // <tenancy>default</tenancy>[\n]"
        // </placement>[\n]"
        // <kernelId>aki-fc37bacc</kernelId>[\n]"
        // <monitoring>[\n]"
        // <state>disabled</state>[\n]"
        // </monitoring>[\n]"
        // <groupSet>[\n]"
        // <item>[\n]"
        // <groupId>sg-44412974</groupId>[\n]"
        // <groupName>default</groupName>[\n]"
        // </item>[\n]"
        // </groupSet>[\n]"
        // <stateReason>[\n]"
        // <code>pending</code>[\n]"
        // <message>pending</message>[\n]"
        // </stateReason>[\n]"
        // <architecture>x86_64</architecture>[\n]"
        // <rootDeviceType>instance-store</rootDeviceType>[\n]"
        // <blockDeviceMapping/>[\n]"
        // <virtualizationType>paravirtual</virtualizationType>[\n]"
        // <clientToken/>[\n]"
        // <hypervisor>xen</hypervisor>[\n]"
        // <networkInterfaceSet/>[\n]"
        // <ebsOptimized>false</ebsOptimized>[\n]"
        // </item>[\n]"
        // </instancesSet>[\n]"

        return response;
    }
}
TOP

Related Classes of io.fathom.cloud.compute.api.aws.ec2.actions.RunInstancesHandler

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.