package com.sequenceiq.cloudbreak.cloud.openstack.nativ.compute; import java.util.Collections; import java.util.List; import java.util.Map; import javax.inject.Inject; import com.google.common.collect.Maps; import com.sequenceiq.cloudbreak.cloud.context.AuthenticatedContext; import com.sequenceiq.cloudbreak.cloud.model.CloudInstance; import com.sequenceiq.cloudbreak.cloud.model.CloudResource; import com.sequenceiq.cloudbreak.cloud.model.CloudResourceStatus; import com.sequenceiq.cloudbreak.cloud.model.CloudVmInstanceStatus; import com.sequenceiq.cloudbreak.cloud.model.Group; import com.sequenceiq.cloudbreak.cloud.model.Image; import com.sequenceiq.cloudbreak.cloud.model.InstanceTemplate; import com.sequenceiq.cloudbreak.cloud.openstack.common.OpenStackUtils; import com.sequenceiq.cloudbreak.cloud.openstack.nativ.AbstractOpenStackResourceBuilder; import com.sequenceiq.cloudbreak.cloud.openstack.nativ.OpenStackResourceException; import com.sequenceiq.cloudbreak.cloud.openstack.nativ.context.OpenStackContext; import com.sequenceiq.cloudbreak.cloud.openstack.nativ.service.OpenStackResourceNameService; import com.sequenceiq.cloudbreak.cloud.template.ComputeResourceBuilder; public abstract class AbstractOpenStackComputeResourceBuilder extends AbstractOpenStackResourceBuilder implements ComputeResourceBuilder<OpenStackContext> { private static final Map<Class<? extends AbstractOpenStackComputeResourceBuilder>, Integer> ORDER; static { Map<Class<? extends AbstractOpenStackComputeResourceBuilder>, Integer> map = Maps.newHashMap(); map.put(OpenStackPortBuilder.class, 0); map.put(OpenStackAttachedDiskResourceBuilder.class, 0); map.put(OpenStackInstanceBuilder.class, 1); map.put(OpenStackFloatingIPBuilder.class, 2); ORDER = Collections.unmodifiableMap(map); } @Inject private OpenStackResourceNameService resourceNameService; @Inject private OpenStackUtils utils; @Override public List<CloudResource> create(OpenStackContext context, long privateId, AuthenticatedContext auth, Group group, Image image) { String resourceName = resourceNameService.resourceName(resourceType(), utils.getStackName(auth), group.getName(), privateId); return Collections.singletonList(createNamedResource(resourceType(), group.getName(), resourceName)); } @Override public List<CloudVmInstanceStatus> checkInstances(OpenStackContext context, AuthenticatedContext auth, List<CloudInstance> instances) { return null; } @Override public CloudVmInstanceStatus start(OpenStackContext context, AuthenticatedContext auth, CloudInstance instance) { return null; } @Override public CloudVmInstanceStatus stop(OpenStackContext context, AuthenticatedContext auth, CloudInstance instance) { return null; } @Override public List<CloudResourceStatus> checkResources(OpenStackContext context, AuthenticatedContext auth, List<CloudResource> resources) { return checkResources(resourceType(), context, auth, resources); } @Override public int order() { Integer order = ORDER.get(getClass()); if (order == null) { throw new OpenStackResourceException(String.format("No resource order found for class: %s", getClass())); } return order; } public OpenStackUtils getUtils() { return utils; } public void setUtils(OpenStackUtils utils) { this.utils = utils; } protected InstanceTemplate getInstanceTemplate(Group group, long privateId) { for (CloudInstance instance : group.getInstances()) { InstanceTemplate template = instance.getTemplate(); if (template.getPrivateId() == privateId) { return template; } } return null; } }