package com.sequenceiq.cloudbreak.cloud.template;
import java.util.List;
import javax.inject.Inject;
import com.sequenceiq.cloudbreak.cloud.InstanceConnector;
import com.sequenceiq.cloudbreak.cloud.context.AuthenticatedContext;
import com.sequenceiq.cloudbreak.cloud.context.CloudContext;
import com.sequenceiq.cloudbreak.cloud.model.CloudInstance;
import com.sequenceiq.cloudbreak.cloud.model.CloudResource;
import com.sequenceiq.cloudbreak.cloud.model.CloudVmInstanceStatus;
import com.sequenceiq.cloudbreak.cloud.model.Platform;
import com.sequenceiq.cloudbreak.cloud.template.compute.ComputeResourceService;
import com.sequenceiq.cloudbreak.cloud.template.context.ResourceBuilderContext;
import com.sequenceiq.cloudbreak.cloud.template.init.ContextBuilders;
/**
* Abstract base implementation of {@link InstanceConnector} for cloud provider which do not have template based deployments. It provides
* the functionality to call the resource builders in order to stop and start the resources. <b>Only compute</b> resources can be stopped/started.
*/
public abstract class AbstractInstanceConnector implements InstanceConnector {
@Inject
private ComputeResourceService computeResourceService;
@Inject
private ContextBuilders contextBuilders;
@Override
public List<CloudVmInstanceStatus> stop(AuthenticatedContext ac, List<CloudResource> resources, List<CloudInstance> vms) throws Exception {
CloudContext cloudContext = ac.getCloudContext();
Platform platform = cloudContext.getPlatform();
//context
ResourceBuilderContext context = contextBuilders.get(platform).contextInit(cloudContext, ac, null, resources, false);
//compute
return computeResourceService.stopInstances(context, ac, resources, vms);
}
@Override
public List<CloudVmInstanceStatus> start(AuthenticatedContext ac, List<CloudResource> resources, List<CloudInstance> vms) throws Exception {
CloudContext cloudContext = ac.getCloudContext();
Platform platform = cloudContext.getPlatform();
//context
ResourceBuilderContext context = contextBuilders.get(platform).contextInit(cloudContext, ac, null, resources, true);
//compute
return computeResourceService.startInstances(context, ac, resources, vms);
}
}