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

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

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

import io.fathom.cloud.CloudException;
import io.fathom.cloud.compute.api.aws.ec2.model.InstanceStateChange;
import io.fathom.cloud.compute.api.aws.ec2.model.TerminateInstancesResponse;
import io.fathom.cloud.compute.scheduler.InstanceScheduler;
import io.fathom.cloud.compute.services.AsyncTasks;
import io.fathom.cloud.protobuf.CloudModel;
import io.fathom.cloud.protobuf.CloudModel.InstanceData;
import io.fathom.cloud.server.model.Project;

import java.util.List;

import javax.inject.Inject;

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

import com.google.common.collect.Lists;

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

    @Inject
    AsyncTasks asyncTasks;

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

        List<String> instanceEc2Ids = getList("InstanceId");

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

        response.instances = Lists.newArrayList();

        List<InstanceData> stopInstances = Lists.newArrayList();

        for (String instanceEc2Id : instanceEc2Ids) {
            long instanceId = decodeEc2Id("i-", instanceEc2Id);
            InstanceData instance = instanceStateStore.getInstances(getProject().getId()).find(instanceId);
            if (instance == null) {
                throw new CloudException("The instance ID '" + instanceEc2Id + "' does not exist");
            }
            stopInstances.add(instance);
        }

        asyncTasks.stopInstances(stopInstances);
        for (InstanceData instance : stopInstances) {
            // This is a very abbreviated state
            InstanceStateChange instanceStateChange = new InstanceStateChange();
            instanceStateChange.instanceId = toEc2InstanceId(instance.getId());

            instanceStateChange.currentState = buildInstanceState(instance);
            instanceStateChange.previousState = buildInstanceState(CloudModel.InstanceState.STOPPING);

            response.instances.add(instanceStateChange);
        }

        return response;
    }

}
TOP

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

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.