Yes it was my fault :-( I will try to remove everything and merge the PR back.
On Mon, Nov 24, 2014 at 9:56 PM, Nirmal Fernando <[email protected]> wrote: > Unfortunately, the whole history of this file has been lost :-( > > On Mon, Nov 24, 2014 at 5:36 PM, Imesh Gunaratne <[email protected]> wrote: > >> [Resending due to a mail failure] >> >> Yes while fixing the class names issue due some reason it has marked the >> files as removed. I just reverted this commit and pushed it with commit >> revision: de05f5c551eea399327a10dd1555b4edf52d2786 >> >> On Wed, Nov 19, 2014 at 5:15 PM, Nirmal Fernando <[email protected]> >> wrote: >> >>> Hi Imesh, >>> >>> Any idea where is CloudStackIaas class? >>> >>> On Thu, Nov 13, 2014 at 8:26 PM, Nirmal Fernando <[email protected] >>> > wrote: >>> >>>> Hi Imesh, >>>> >>>> You have removed the CloudStackIaas class?? >>>> https://git-wip-us.apache.org/repos/asf?p=stratos.git;a=tree;f=components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases;h=c6d52c93f78927b5e8d07c5614f871a984297138;hb=HEAD >>>> >>>> On Thu, Nov 13, 2014 at 5:59 PM, <[email protected]> wrote: >>>> >>>>> Repository: stratos >>>>> Updated Branches: >>>>> refs/heads/master a80085efa -> e04f271ce >>>>> >>>>> >>>>> Fixing file name mismatch issue >>>>> >>>>> >>>>> Project: http://git-wip-us.apache.org/repos/asf/stratos/repo >>>>> Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/e04f271c >>>>> Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/e04f271c >>>>> Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/e04f271c >>>>> >>>>> Branch: refs/heads/master >>>>> Commit: e04f271ceb9d861170fe47841d762e8ff84cb17f >>>>> Parents: a80085e >>>>> Author: Imesh Gunaratne <[email protected]> >>>>> Authored: Thu Nov 13 22:29:06 2014 +0530 >>>>> Committer: Imesh Gunaratne <[email protected]> >>>>> Committed: Thu Nov 13 22:29:06 2014 +0530 >>>>> >>>>> ---------------------------------------------------------------------- >>>>> .../cloud/controller/iaases/CloudStackIaas.java | 540 >>>>> ------------------- >>>>> .../validate/CloudStackPartitionValidator.java | 53 -- >>>>> 2 files changed, 593 deletions(-) >>>>> ---------------------------------------------------------------------- >>>>> >>>>> >>>>> >>>>> http://git-wip-us.apache.org/repos/asf/stratos/blob/e04f271c/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/CloudStackIaas.java >>>>> ---------------------------------------------------------------------- >>>>> diff --git >>>>> a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/CloudStackIaas.java >>>>> b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/CloudStackIaas.java >>>>> deleted file mode 100644 >>>>> index c38ce0a..0000000 >>>>> --- >>>>> a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/CloudStackIaas.java >>>>> +++ /dev/null >>>>> @@ -1,540 +0,0 @@ >>>>> -package org.apache.stratos.cloud.controller.iaases; >>>>> - >>>>> - >>>>> -import org.apache.commons.lang.StringUtils; >>>>> -import org.apache.commons.logging.Log; >>>>> -import org.apache.commons.logging.LogFactory; >>>>> -import >>>>> org.apache.stratos.cloud.controller.exception.CloudControllerException; >>>>> -import >>>>> org.apache.stratos.cloud.controller.exception.InvalidHostException; >>>>> -import >>>>> org.apache.stratos.cloud.controller.exception.InvalidRegionException; >>>>> -import >>>>> org.apache.stratos.cloud.controller.exception.InvalidZoneException; >>>>> -import org.apache.stratos.cloud.controller.interfaces.Iaas; >>>>> -import >>>>> org.apache.stratos.cloud.controller.jcloud.ComputeServiceBuilderUtil; >>>>> -import org.apache.stratos.cloud.controller.pojo.IaasProvider; >>>>> -import >>>>> org.apache.stratos.cloud.controller.util.CloudControllerConstants; >>>>> -import >>>>> org.apache.stratos.cloud.controller.validate.CloudStackPartitionValidator; >>>>> -import >>>>> org.apache.stratos.cloud.controller.validate.interfaces.PartitionValidator; >>>>> -import org.jclouds.cloudstack.CloudStackApi; >>>>> -import >>>>> org.jclouds.cloudstack.compute.options.CloudStackTemplateOptions; >>>>> -import org.jclouds.cloudstack.domain.*; >>>>> -import org.jclouds.cloudstack.features.VolumeApi; >>>>> -import org.jclouds.cloudstack.options.ListPublicIPAddressesOptions; >>>>> -import org.jclouds.cloudstack.options.ListZonesOptions; >>>>> -import org.jclouds.compute.ComputeServiceContext; >>>>> -import org.jclouds.compute.domain.NodeMetadata; >>>>> -import org.jclouds.compute.domain.Template; >>>>> -import org.jclouds.compute.domain.TemplateBuilder; >>>>> -import org.jclouds.compute.options.TemplateOptions; >>>>> -import org.jclouds.domain.Location; >>>>> - >>>>> -import java.util.Arrays; >>>>> -import java.util.HashMap; >>>>> -import java.util.Map; >>>>> -import java.util.Set; >>>>> -import java.util.concurrent.TimeoutException; >>>>> - >>>>> -public class CloudStackIaas extends Iaas { >>>>> - >>>>> - private static final Log log = >>>>> LogFactory.getLog(CloudStackIaas.class); >>>>> - >>>>> - public CloudStackIaas(IaasProvider iaasProvider) { >>>>> - super(iaasProvider); >>>>> - } >>>>> - >>>>> - @Override >>>>> - public void buildComputeServiceAndTemplate() { >>>>> - // builds and sets Compute Service >>>>> - >>>>> ComputeServiceBuilderUtil.buildDefaultComputeService(getIaasProvider()); >>>>> - // builds and sets Template >>>>> - buildTemplate(); >>>>> - } >>>>> - >>>>> - @Override >>>>> - public void buildTemplate() { >>>>> - >>>>> - IaasProvider iaasInfo = getIaasProvider(); >>>>> - >>>>> - //if compute service is not available >>>>> - if (iaasInfo.getComputeService() == null) { >>>>> - String msg = "Compute service is null for IaaS provider: " >>>>> - + iaasInfo.getName(); >>>>> - log.error(msg); >>>>> - throw new CloudControllerException(msg); >>>>> - } >>>>> - >>>>> - //create templateBuilder >>>>> - TemplateBuilder templateBuilder = iaasInfo.getComputeService() >>>>> - .templateBuilder(); >>>>> - >>>>> - //**SET PROPERTIES TO templateBuilder OBJECT**// >>>>> - >>>>> - /** >>>>> - * PROPERTY - 1 >>>>> - * set image id specified >>>>> - */ >>>>> - templateBuilder.imageId(iaasInfo.getImage()); >>>>> - >>>>> - /** >>>>> - * PROPERTY-2 >>>>> - * if user has specified a zone in cloud-controller.xml, set >>>>> the zone into templateBuilder object >>>>> - * (user should provide the zone id for this, because zone >>>>> name is not unique in cloudstack) >>>>> - */ >>>>> - if >>>>> (iaasInfo.getProperty(CloudControllerConstants.AVAILABILITY_ZONE) != >>>>> null) { >>>>> - Set<? extends Location> locations = >>>>> iaasInfo.getComputeService().listAssignableLocations(); >>>>> - for (Location location : locations) { >>>>> - if >>>>> (location.getId().equals(iaasInfo.getProperty(CloudControllerConstants.AVAILABILITY_ZONE))) >>>>> { >>>>> - //if the zone is valid set the zone to >>>>> templateBuilder Object >>>>> - templateBuilder.locationId(location.getId()); >>>>> - log.info("Zone has been set as " + >>>>> iaasInfo.getProperty(CloudControllerConstants.AVAILABILITY_ZONE) >>>>> - + " with id: " + location.getId()); >>>>> - break; >>>>> - } >>>>> - } >>>>> - } >>>>> - >>>>> - /** >>>>> - * PROPERTY-3 >>>>> - * if user has specified an instance type in >>>>> cloud-controller.xml, set the instance type into templateBuilder >>>>> - * object.(service offering) >>>>> - *Important:Specify the Service Offering type ID. Not the >>>>> name. Because the name is not unique in cloudstack. >>>>> - */ >>>>> - if >>>>> (iaasInfo.getProperty(CloudControllerConstants.INSTANCE_TYPE) != null) { >>>>> - >>>>> templateBuilder.hardwareId(iaasInfo.getProperty(CloudControllerConstants.INSTANCE_TYPE)); >>>>> - } >>>>> - >>>>> - //build the template >>>>> - Template template = templateBuilder.build(); >>>>> - >>>>> - /**if you wish to auto assign IPs, instance spawning call >>>>> should be >>>>> - * blocking, but if you >>>>> - * wish to assign IPs manually, it can be non-blocking. >>>>> - * is auto-assign-ip mode or manual-assign-ip mode? >>>>> - */ >>>>> - boolean blockUntilRunning = Boolean.parseBoolean(iaasInfo >>>>> - >>>>> .getProperty(CloudControllerConstants.AUTO_ASSIGN_IP)); >>>>> - template.getOptions().as(TemplateOptions.class) >>>>> - .blockUntilRunning(blockUntilRunning); >>>>> - >>>>> - // this is required in order to avoid creation of additional >>>>> security >>>>> - // groups by Jclouds. >>>>> - template.getOptions().as(TemplateOptions.class) >>>>> - .inboundPorts(new int[]{}); >>>>> - >>>>> - >>>>> - //**SET CLOUDSTACK SPECIFIC PROPERTIES TO TEMPLATE OBJECT**// >>>>> - >>>>> - //set security group - If you are using basic zone >>>>> - if >>>>> (iaasInfo.getProperty(CloudControllerConstants.SECURITY_GROUP_IDS) != >>>>> null) >>>>> { >>>>> - template.getOptions() >>>>> - .as(CloudStackTemplateOptions.class) >>>>> - >>>>> .securityGroupIds(Arrays.asList(iaasInfo.getProperty(CloudControllerConstants.SECURITY_GROUP_IDS) >>>>> - >>>>> .split(CloudControllerConstants.ENTRY_SEPARATOR))); >>>>> - } >>>>> - >>>>> - >>>>> - /** >>>>> - * set network ID - If you are using advanced zone >>>>> - * in cloudstack sometimes we get unautorized exception if we >>>>> didn't specify the >>>>> - * domain ID and user name >>>>> - */ >>>>> - if >>>>> (iaasInfo.getProperty(CloudControllerConstants.NETWORK_IDS) != null) { >>>>> - template.getOptions() >>>>> - .as(CloudStackTemplateOptions.class) >>>>> - >>>>> .networks(Arrays.asList(iaasInfo.getProperty(CloudControllerConstants.NETWORK_IDS) >>>>> - >>>>> .split(CloudControllerConstants.ENTRY_SEPARATOR))); >>>>> - } >>>>> - >>>>> - //set user name >>>>> - if (iaasInfo.getProperty(CloudControllerConstants.USER_NAME) >>>>> != null) { >>>>> - template.getOptions().as(CloudStackTemplateOptions.class) >>>>> - >>>>> .account(iaasInfo.getProperty(CloudControllerConstants.USER_NAME)); >>>>> - } >>>>> - //set domain ID >>>>> - if (iaasInfo.getProperty(CloudControllerConstants.DOMAIN_ID) >>>>> != null) { >>>>> - template.getOptions().as(CloudStackTemplateOptions.class) >>>>> - >>>>> .domainId(iaasInfo.getProperty(CloudControllerConstants.DOMAIN_ID)); >>>>> - } >>>>> - >>>>> - /** >>>>> - *Set key pair >>>>> - * in cloudstack sometimes we get unauthorized exception if >>>>> we didn't specify the >>>>> - * domain ID and user name >>>>> - */ >>>>> - if (iaasInfo.getProperty(CloudControllerConstants.KEY_PAIR) >>>>> != null) { >>>>> - template.getOptions().as(CloudStackTemplateOptions.class) >>>>> - >>>>> .keyPair(iaasInfo.getProperty(CloudControllerConstants.KEY_PAIR)); >>>>> - } >>>>> - >>>>> - // ability to define tags >>>>> - if (iaasInfo.getProperty(CloudControllerConstants.TAGS) != >>>>> null) { >>>>> - template.getOptions() >>>>> - .as(CloudStackTemplateOptions.class) >>>>> - >>>>> .tags(Arrays.asList(iaasInfo.getProperty(CloudControllerConstants.TAGS) >>>>> - >>>>> .split(CloudControllerConstants.ENTRY_SEPARATOR))); >>>>> - } >>>>> - //set disk offering to the instance >>>>> - if >>>>> (iaasInfo.getProperty(CloudControllerConstants.DISK_OFFERING) != null) { >>>>> - template.getOptions() >>>>> - .as(CloudStackTemplateOptions.class) >>>>> - >>>>> .diskOfferingId(iaasInfo.getProperty(CloudControllerConstants.DISK_OFFERING)); >>>>> - } >>>>> - >>>>> - // set Template >>>>> - iaasInfo.setTemplate(template); >>>>> - } >>>>> - >>>>> - @Override >>>>> - public void setDynamicPayload() { >>>>> - IaasProvider iaasInfo = getIaasProvider(); >>>>> - if (iaasInfo.getTemplate() != null && iaasInfo.getPayload() >>>>> != null) { >>>>> - >>>>> iaasInfo.getTemplate().getOptions().as(CloudStackTemplateOptions.class) >>>>> - >>>>> .userMetadata(convertByteArrayToHashMap(iaasInfo.getPayload())); >>>>> - } >>>>> - } >>>>> - >>>>> - /** >>>>> - * IMPORTANT >>>>> - * In cloudstack we can assign public IPs, if we are using an >>>>> advanced zone only. If we are using a basic zone >>>>> - * we cannot assign public ips. >>>>> - * <p/> >>>>> - * When we use an advanced zone, a public IP address will get >>>>> automatically assigned to the vm. So we don't need >>>>> - * to find an unallocated IP address and assign that address to >>>>> the vm. If you are using a basic zone you cannot >>>>> - * assign public IPs >>>>> - * <p/> >>>>> - * So this method will find the IP that has been assigned to the >>>>> vm and return it. >>>>> - */ >>>>> - @Override >>>>> - public String associateAddress(NodeMetadata node) { >>>>> - >>>>> - IaasProvider iaasInfo = getIaasProvider(); >>>>> - ComputeServiceContext context = >>>>> iaasInfo.getComputeService().getContext(); >>>>> - CloudStackApi cloudStackApi = >>>>> context.unwrapApi(CloudStackApi.class); >>>>> - String ip = null; >>>>> - >>>>> - // get all allocated IPs >>>>> - ListPublicIPAddressesOptions listPublicIPAddressesOptions = >>>>> new ListPublicIPAddressesOptions(); >>>>> - >>>>> listPublicIPAddressesOptions.zoneId(iaasInfo.getProperty(CloudControllerConstants.AVAILABILITY_ZONE)); >>>>> - >>>>> - Set<PublicIPAddress> publicIPAddresses = >>>>> cloudStackApi.getAddressApi() >>>>> - .listPublicIPAddresses(listPublicIPAddressesOptions); >>>>> - >>>>> - String id = node.getProviderId(); //vm ID >>>>> - >>>>> - for (PublicIPAddress publicIPAddress : publicIPAddresses) { >>>>> - if (publicIPAddress.getVirtualMachineId().equals(id)) { >>>>> //check whether this instance has >>>>> - // already got an public ip or not >>>>> - ip = publicIPAddress.getIPAddress(); //A public ip >>>>> has been successfully assigned to the vm >>>>> - log.info("Successfully associated an IP address " + >>>>> ip >>>>> - + " for node with id: " + node.getId()); >>>>> - break; >>>>> - } >>>>> - >>>>> - } >>>>> - >>>>> - if (ip == null || ip.isEmpty()) { //IP has not been >>>>> successfully assigned to VM(That means there are >>>>> - // no more IPs available for the VM) >>>>> - String msg = "No address associated for node with id: " + >>>>> node.getId(); >>>>> - log.warn(msg); >>>>> - throw new CloudControllerException(msg); >>>>> - } >>>>> - >>>>> - return ip; >>>>> - } >>>>> - >>>>> - @Override >>>>> - public String associatePredefinedAddress(NodeMetadata node, >>>>> String ip) { >>>>> - return ""; >>>>> - } >>>>> - >>>>> - @Override >>>>> - public void releaseAddress(String ip) { >>>>> - IaasProvider iaasInfo = getIaasProvider(); >>>>> - ComputeServiceContext context = >>>>> iaasInfo.getComputeService().getContext(); >>>>> - CloudStackApi cloudStackApi = >>>>> context.unwrapApi(CloudStackApi.class); >>>>> - cloudStackApi.getAddressApi().disassociateIPAddress(ip); >>>>> - } >>>>> - >>>>> - @Override >>>>> - public boolean createKeyPairFromPublicKey(String region, String >>>>> keyPairName, String publicKey) { >>>>> - >>>>> - IaasProvider iaasInfo = getIaasProvider(); >>>>> - ComputeServiceContext context = >>>>> iaasInfo.getComputeService().getContext(); >>>>> - CloudStackApi cloudStackApi = >>>>> context.unwrapApi(CloudStackApi.class); >>>>> - SshKeyPair sshKeyPair = >>>>> cloudStackApi.getSSHKeyPairApi().createSSHKeyPair(keyPairName); >>>>> - >>>>> - if (sshKeyPair != null) { >>>>> - >>>>> - >>>>> iaasInfo.getTemplate().getOptions().as(CloudStackTemplateOptions.class) >>>>> - .keyPair(sshKeyPair.getName()); >>>>> - >>>>> - log.info("A key-pair is created successfully - Key Pair >>>>> Name: " + sshKeyPair.getName()); >>>>> - return true; >>>>> - } >>>>> - log.error("Key-pair is unable to create"); >>>>> - return false; >>>>> - } >>>>> - >>>>> - @Override >>>>> - public boolean isValidRegion(String region) throws >>>>> InvalidRegionException { >>>>> - >>>>> - IaasProvider iaasInfo = getIaasProvider(); >>>>> - //no such method in Jclouds cloudstack api >>>>> - String msg = "Invalid region: " + region + " in the iaas: " + >>>>> iaasInfo.getType(); >>>>> - log.error(msg); >>>>> - throw new InvalidRegionException(msg); >>>>> - } >>>>> - >>>>> - @Override >>>>> - public boolean isValidZone(String region, String zone) throws >>>>> InvalidZoneException { >>>>> - >>>>> - IaasProvider iaasInfo = getIaasProvider(); >>>>> - ComputeServiceContext context = >>>>> iaasInfo.getComputeService().getContext(); >>>>> - CloudStackApi cloudStackApi = >>>>> context.unwrapApi(CloudStackApi.class); >>>>> - ListZonesOptions listZonesOptions = new ListZonesOptions(); >>>>> - listZonesOptions.available(true); >>>>> - Set<Zone> zoneSet = >>>>> cloudStackApi.getZoneApi().listZones(listZonesOptions); >>>>> - >>>>> - for (org.jclouds.cloudstack.domain.Zone configuredZone : >>>>> zoneSet) { >>>>> - if (configuredZone.getName().equalsIgnoreCase(zone)) { >>>>> - return true; >>>>> - } >>>>> - } >>>>> - String msg = "Invalid zone: " + zone + " in the iaas: " + >>>>> iaasInfo.getType(); >>>>> - log.error(msg); >>>>> - throw new InvalidZoneException(msg); >>>>> - } >>>>> - >>>>> - @Override >>>>> - public boolean isValidHost(String zone, String host) throws >>>>> InvalidHostException { >>>>> - >>>>> - IaasProvider iaasInfo = getIaasProvider(); >>>>> - // there's no such method in jclouds cloustack api >>>>> - String msg = "Invalid host: " + host + " in the zone: " + >>>>> zone + " and of the iaas: " + iaasInfo.getType(); >>>>> - log.error(msg); >>>>> - throw new InvalidHostException(msg); >>>>> - >>>>> - } >>>>> - >>>>> - @Override >>>>> - public PartitionValidator getPartitionValidator() { >>>>> - return new CloudStackPartitionValidator(); >>>>> - } >>>>> - >>>>> - @Override >>>>> - public String createVolume(int sizeGB, String snapshotId) { >>>>> - >>>>> - //todo return volume ID if volume is created >>>>> - IaasProvider iaasInfo = getIaasProvider(); >>>>> - ComputeServiceContext context = iaasInfo.getComputeService() >>>>> - .getContext(); >>>>> - >>>>> - String zone = ComputeServiceBuilderUtil.extractZone(iaasInfo); >>>>> - String diskOfferingID = >>>>> iaasInfo.getTemplate().getOptions().as(CloudStackTemplateOptions.class) >>>>> - .getDiskOfferingId(); >>>>> - if (zone == null && diskOfferingID == null) { >>>>> - log.error("Could not create a volume in the , [zone] : " >>>>> + zone + " of Iaas : " + iaasInfo); >>>>> - return null; >>>>> - } >>>>> - >>>>> - VolumeApi volumeApi = >>>>> context.unwrapApi(CloudStackApi.class).getVolumeApi(); >>>>> - >>>>> - Volume volume; >>>>> - if (StringUtils.isEmpty(snapshotId)) { >>>>> - if (log.isInfoEnabled()) { >>>>> - log.info("Creating a volume in the zone " + zone); >>>>> - } >>>>> - >>>>> - //cloudstack jcloud api does not return a volume object >>>>> - volumeApi.createVolumeFromCustomDiskOfferingInZone(null, >>>>> diskOfferingID, zone, sizeGB); >>>>> - >>>>> - // volume = >>>>> blockStoreApi.createVolumeInAvailabilityZone(zone, sizeGB); >>>>> - } else { >>>>> - if (log.isInfoEnabled()) { >>>>> - log.info("Creating a volume in the zone " + zone + " >>>>> from the snapshot " + snapshotId); >>>>> - } >>>>> - volumeApi.createVolumeFromSnapshotInZone(null, >>>>> diskOfferingID, zone); >>>>> - } >>>>> - >>>>> - return null; >>>>> - } >>>>> - >>>>> - @Override >>>>> - public String attachVolume(String instanceId, String volumeId, >>>>> String deviceName) { >>>>> - IaasProvider iaasInfo = getIaasProvider(); >>>>> - ComputeServiceContext context = iaasInfo.getComputeService() >>>>> - .getContext(); >>>>> - CloudStackApi cloudStackApi = >>>>> context.unwrapApi(CloudStackApi.class); >>>>> - >>>>> - //get volume >>>>> - org.jclouds.cloudstack.domain.Volume volume = >>>>> cloudStackApi.getVolumeApi().getVolume(volumeId); >>>>> - >>>>> - //get current volume state >>>>> - Volume.State volumeState = volume.getState(); >>>>> - >>>>> - if (log.isDebugEnabled()) { >>>>> - log.debug("Volume " + volumeId + " is in state " + >>>>> volumeState); >>>>> - } >>>>> - >>>>> - //if volume is not available, not allocated or cannot use >>>>> - //volume state ALLOCATED means that volume has not been >>>>> attached to any instance. >>>>> - >>>>> - //TODO there is an error with logic. >>>>> - if (!(volumeState == Volume.State.ALLOCATED || volumeState == >>>>> Volume.State.CREATING >>>>> - || volumeState == Volume.State.READY)) { >>>>> - log.error(String.format("Volume %s can not be attached. >>>>> Volume status is %s", volumeId, volumeState)); >>>>> - } >>>>> - >>>>> - //check whether the account of volume and instance is same >>>>> - if >>>>> (!volume.getAccount().equals(cloudStackApi.getVirtualMachineApi() >>>>> - .getVirtualMachine(instanceId).getAccount())) { >>>>> - log.error(String.format("Volume %s can not be attached. >>>>> Instance account and Volume account " + >>>>> - "are not the same ", volumeId)); >>>>> - } >>>>> - >>>>> - boolean volumeBecameAvailable = false, volumeBecameAttached = >>>>> false; >>>>> - >>>>> - try { >>>>> - if (volumeState == Volume.State.CREATING) { >>>>> - >>>>> - volumeBecameAvailable = waitForStatus(volumeId, >>>>> Volume.State.ALLOCATED, 5); >>>>> - >>>>> - } else if (volumeState == Volume.State.READY) { >>>>> - volumeBecameAvailable = true; >>>>> - } >>>>> - >>>>> - } catch (TimeoutException e) { >>>>> - log.error("[Volume ID] " + volumeId + "did not become >>>>> ALLOCATED within expected timeout"); >>>>> - } >>>>> - >>>>> - //if volume state is 'ALLOCATED' >>>>> - if (volumeBecameAvailable) { >>>>> - >>>>> - //attach volume into instance >>>>> - cloudStackApi.getVolumeApi().attachVolume(volumeId, >>>>> instanceId); >>>>> - >>>>> - try { >>>>> - volumeBecameAttached = waitForStatus(volumeId, >>>>> Volume.State.READY, 2); >>>>> - } catch (TimeoutException e) { >>>>> - log.error("[Volume ID] " + volumeId + "did not become >>>>> READY within expected timeout"); >>>>> - } >>>>> - } >>>>> - >>>>> - try { >>>>> - // waiting 5seconds till volumes are actually attached. >>>>> - Thread.sleep(5000); >>>>> - } catch (InterruptedException ignored) { >>>>> - >>>>> - } >>>>> - >>>>> - //If volume state is not 'READY' >>>>> - if (!volumeBecameAttached) { >>>>> - log.error(String.format("[Volume ID] %s attachment is >>>>> called, but not yet became attached", volumeId)); >>>>> - } >>>>> - >>>>> - log.info(String.format("Volume [id]: %s attachment for >>>>> instance [id]: %s was successful [status]: Attaching." + >>>>> - " of Iaas : %s", volumeId, instanceId, iaasInfo)); >>>>> - >>>>> - return "Attaching"; >>>>> - >>>>> - } >>>>> - >>>>> - @Override >>>>> - public void detachVolume(String instanceId, String volumeId) { >>>>> - >>>>> - >>>>> - IaasProvider iaasInfo = getIaasProvider(); >>>>> - >>>>> - ComputeServiceContext context = iaasInfo.getComputeService() >>>>> - .getContext(); >>>>> - >>>>> - if (log.isDebugEnabled()) { >>>>> - log.debug(String.format("Starting to detach volume %s >>>>> from the instance %s", volumeId, instanceId)); >>>>> - } >>>>> - >>>>> - CloudStackApi cloudStackApi = >>>>> context.unwrapApi(CloudStackApi.class); >>>>> - >>>>> - cloudStackApi.getVolumeApi().detachVolume(volumeId); >>>>> - >>>>> - try { >>>>> - //TODO this is true only for newly created volumes >>>>> - if (waitForStatus(volumeId, Volume.State.ALLOCATED, 5)) { >>>>> - log.info(String.format("Detachment of Volume [id]: >>>>> %s from instance [id]: %s was successful of Iaas : %s", volumeId, >>>>> instanceId, iaasInfo)); >>>>> - } >>>>> - } catch (TimeoutException e) { >>>>> - log.error(String.format("Detachment of Volume [id]: %s >>>>> from instance [id]: %s was unsuccessful. [volume Status] : %s", volumeId, >>>>> instanceId, iaasInfo)); >>>>> - } >>>>> - >>>>> - } >>>>> - >>>>> - @Override >>>>> - public void deleteVolume(String volumeId) { >>>>> - IaasProvider iaasInfo = getIaasProvider(); >>>>> - ComputeServiceContext context = iaasInfo.getComputeService() >>>>> - .getContext(); >>>>> - CloudStackApi cloudStackApi = >>>>> context.unwrapApi(CloudStackApi.class); >>>>> - cloudStackApi.getVolumeApi().deleteVolume(volumeId); >>>>> - log.info("Deletion of Volume [id]: " + volumeId + " was >>>>> successful. " >>>>> - + " of Iaas : " + iaasInfo); >>>>> - } >>>>> - >>>>> - @Override >>>>> - public String getIaasDevice(String device) {//todo implement this >>>>> method(auto generated method) >>>>> - return null; >>>>> - } >>>>> - >>>>> - private boolean waitForStatus(String volumeId, Volume.State >>>>> expectedStatus, int timeoutInMilliseconds) throws TimeoutException { >>>>> - int timeout = 1000 * 60 * timeoutInMilliseconds; >>>>> - long timout = System.currentTimeMillis() + timeout; >>>>> - >>>>> - IaasProvider iaasInfo = getIaasProvider(); >>>>> - ComputeServiceContext context = >>>>> iaasInfo.getComputeService().getContext(); >>>>> - CloudStackApi cloudStackApi = >>>>> context.unwrapApi(CloudStackApi.class); >>>>> - >>>>> - //get volume >>>>> - org.jclouds.cloudstack.domain.Volume volume = >>>>> cloudStackApi.getVolumeApi().getVolume(volumeId); >>>>> - >>>>> - Volume.State volumeState = volume.getState(); >>>>> - >>>>> - while (volumeState != expectedStatus) { >>>>> - try { >>>>> - if (log.isDebugEnabled()) { >>>>> - log.debug(String.format("Volume %s is still NOT >>>>> in %s. Current State=%s", volumeId, expectedStatus, volumeState)); >>>>> - } >>>>> - if (volumeState == Volume.State.FAILED || volumeState >>>>> == Volume.State.DESTROYED || volumeState == Volume.State.UNRECOGNIZED) { >>>>> - log.error("Volume " + volumeId + " is in state" + >>>>> volumeState); >>>>> - return false; >>>>> - } >>>>> - >>>>> - Thread.sleep(1000); >>>>> - volumeState = volume.getState(); >>>>> - if (System.currentTimeMillis() > timout) { >>>>> - throw new TimeoutException(); >>>>> - } >>>>> - } catch (InterruptedException e) { >>>>> - // Ignoring the exception >>>>> - } >>>>> - } >>>>> - if (log.isDebugEnabled()) { >>>>> - log.debug(String.format("Volume %s status became %s", >>>>> volumeId, expectedStatus)); >>>>> - } >>>>> - >>>>> - return true; >>>>> - } >>>>> - >>>>> - private Map<String, String> convertByteArrayToHashMap(byte[] >>>>> byteArray) { >>>>> - >>>>> - Map<String, String> map = new HashMap<String, String>(); >>>>> - >>>>> - String stringFromByteArray = new String(byteArray); >>>>> - String[] keyValuePairs = stringFromByteArray.split(","); >>>>> - >>>>> - for (String keyValuePair : keyValuePairs) { >>>>> - String[] keyValue = keyValuePair.split("="); >>>>> - if (keyValue.length > 1) { >>>>> - map.put(keyValue[0], keyValue[1]); >>>>> - } >>>>> - } >>>>> - >>>>> - return map; >>>>> - } >>>>> -} >>>>> >>>>> >>>>> http://git-wip-us.apache.org/repos/asf/stratos/blob/e04f271c/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/validate/CloudStackPartitionValidator.java >>>>> ---------------------------------------------------------------------- >>>>> diff --git >>>>> a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/validate/CloudStackPartitionValidator.java >>>>> b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/validate/CloudStackPartitionValidator.java >>>>> deleted file mode 100644 >>>>> index 4f3fbce..0000000 >>>>> --- >>>>> a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/validate/CloudStackPartitionValidator.java >>>>> +++ /dev/null >>>>> @@ -1,53 +0,0 @@ >>>>> -package org.apache.stratos.cloud.controller.validate; >>>>> - >>>>> -import org.apache.commons.logging.Log; >>>>> -import org.apache.commons.logging.LogFactory; >>>>> -import >>>>> org.apache.stratos.cloud.controller.exception.InvalidPartitionException; >>>>> -import org.apache.stratos.cloud.controller.interfaces.Iaas; >>>>> -import org.apache.stratos.cloud.controller.pojo.IaasProvider; >>>>> -import >>>>> org.apache.stratos.cloud.controller.util.CloudControllerConstants; >>>>> -import org.apache.stratos.cloud.controller.util.CloudControllerUtil; >>>>> -import >>>>> org.apache.stratos.cloud.controller.validate.interfaces.PartitionValidator; >>>>> -import org.apache.stratos.messaging.domain.topology.Scope; >>>>> - >>>>> -import java.util.Properties; >>>>> - >>>>> - >>>>> -public class CloudStackPartitionValidator implements >>>>> PartitionValidator { >>>>> - >>>>> - >>>>> - private static final Log log = >>>>> LogFactory.getLog(AWSEC2PartitionValidator.class); >>>>> - private IaasProvider iaasProvider; >>>>> - private Iaas iaas; >>>>> - >>>>> - >>>>> - @Override >>>>> - public void setIaasProvider(IaasProvider iaas) { >>>>> - this.iaasProvider = iaas; >>>>> - this.iaas = iaas.getIaas(); >>>>> - } >>>>> - >>>>> - @Override >>>>> - public IaasProvider validate(String partitionId, Properties >>>>> properties) throws InvalidPartitionException { >>>>> - >>>>> - try { >>>>> - IaasProvider updatedIaasProvider = new >>>>> IaasProvider(iaasProvider); >>>>> - Iaas updatedIaas = >>>>> CloudControllerUtil.getIaas(updatedIaasProvider); >>>>> - updatedIaas.setIaasProvider(updatedIaasProvider); >>>>> - >>>>> - if (properties.containsKey(Scope.zone.toString())) { >>>>> - String zone = >>>>> properties.getProperty(Scope.zone.toString()); >>>>> - iaas.isValidZone(null, zone); >>>>> - >>>>> updatedIaasProvider.setProperty(CloudControllerConstants.AVAILABILITY_ZONE, >>>>> zone); >>>>> - updatedIaas = >>>>> CloudControllerUtil.getIaas(updatedIaasProvider); >>>>> - updatedIaas.setIaasProvider(updatedIaasProvider); >>>>> - } >>>>> - >>>>> - } catch (Exception ex) { >>>>> - String msg = "Invalid Partition Detected : "+partitionId+". >>>>> Cause: "+ex.getMessage(); >>>>> - log.error(msg, ex); >>>>> - throw new InvalidPartitionException(msg, ex); >>>>> - } >>>>> - return iaasProvider; >>>>> - } >>>>> -} >>>>> >>>>> >>>> >>>> >>>> -- >>>> Best Regards, >>>> Nirmal >>>> >>>> Nirmal Fernando. >>>> PPMC Member & Committer of Apache Stratos, >>>> Senior Software Engineer, WSO2 Inc. >>>> >>>> Blog: http://nirmalfdo.blogspot.com/ >>>> >>> >>> >>> >>> -- >>> Best Regards, >>> Nirmal >>> >>> Nirmal Fernando. >>> PPMC Member & Committer of Apache Stratos, >>> Senior Software Engineer, WSO2 Inc. >>> >>> Blog: http://nirmalfdo.blogspot.com/ >>> >> >> >> >> -- >> Imesh Gunaratne >> >> Technical Lead, WSO2 >> Committer & PMC Member, Apache Stratos >> > > > > -- > Best Regards, > Nirmal > > Nirmal Fernando. > PPMC Member & Committer of Apache Stratos, > Senior Software Engineer, WSO2 Inc. > > Blog: http://nirmalfdo.blogspot.com/ > -- Imesh Gunaratne Technical Lead, WSO2 Committer & PMC Member, Apache Stratos
