Updated Branches: refs/heads/master 7c51d0418 -> 0e94cb7ed
implementing STRATOS-252 - Cartridge deployment API in Cloud Controller Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/a21bf19f Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/a21bf19f Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/a21bf19f Branch: refs/heads/master Commit: a21bf19f6437064b6680e0046a4b0625328d3a3c Parents: bb68f23 Author: Nirmal Fernando <[email protected]> Authored: Wed Dec 4 22:55:29 2013 +0530 Committer: Nirmal Fernando <[email protected]> Committed: Wed Dec 4 22:55:29 2013 +0530 ---------------------------------------------------------------------- .../impl/CloudControllerServiceImpl.java | 136 ++++++++---- .../interfaces/CloudControllerService.java | 8 + .../cloud/controller/pojo/Cartridge.java | 6 + .../cloud/controller/pojo/CartridgeConfig.java | 211 +++++++++++++++++++ .../cloud/controller/pojo/IaasConfig.java | 151 +++++++++++++ .../cloud/controller/pojo/IaasProvider.java | 48 ++--- .../controller/util/CloudControllerUtil.java | 101 +++++++++ 7 files changed, 587 insertions(+), 74 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/a21bf19f/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java index 97c967d..958ba46 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java @@ -23,8 +23,10 @@ import org.apache.commons.logging.LogFactory; import org.apache.stratos.cloud.controller.concurrent.ThreadExecutor; import org.apache.stratos.cloud.controller.deployment.partition.Partition; import org.apache.stratos.cloud.controller.exception.CloudControllerException; +import org.apache.stratos.cloud.controller.exception.InvalidCartridgeDefinitionException; import org.apache.stratos.cloud.controller.exception.InvalidCartridgeTypeException; import org.apache.stratos.cloud.controller.exception.InvalidClusterException; +import org.apache.stratos.cloud.controller.exception.InvalidIaasProviderException; import org.apache.stratos.cloud.controller.exception.InvalidMemberException; import org.apache.stratos.cloud.controller.exception.InvalidPartitionException; import org.apache.stratos.cloud.controller.exception.UnregisteredCartridgeException; @@ -33,6 +35,7 @@ import org.apache.stratos.cloud.controller.interfaces.CloudControllerService; import org.apache.stratos.cloud.controller.interfaces.Iaas; import org.apache.stratos.cloud.controller.persist.Deserializer; import org.apache.stratos.cloud.controller.pojo.Cartridge; +import org.apache.stratos.cloud.controller.pojo.CartridgeConfig; import org.apache.stratos.cloud.controller.pojo.CartridgeInfo; import org.apache.stratos.cloud.controller.pojo.ClusterContext; import org.apache.stratos.cloud.controller.pojo.IaasProvider; @@ -276,6 +279,57 @@ public class CloudControllerServiceImpl implements CloudControllerService { } } + public void deployCartridgeDefinition(CartridgeConfig cartridgeConfig) throws InvalidCartridgeDefinitionException, InvalidIaasProviderException { + + if (cartridgeConfig == null) { + String msg = "Invalid Cartridge Definition: Definition is null."; + log.error(msg); + throw new IllegalArgumentException(msg); + + } + + Cartridge cartridge = null; + try { + cartridge = CloudControllerUtil.toCartridge(cartridgeConfig); + } catch (Exception e) { + String msg = + "Invalid Cartridge Definition: Cartridge Type: " + + cartridgeConfig.getType(); + log.error(msg, e); + throw new InvalidCartridgeDefinitionException(msg, e); + } + + for (IaasProvider iaasProvider : cartridge.getIaases()) { + try { + Iaas iaas = (Iaas) Class.forName(iaasProvider.getClassName()).newInstance(); + iaas.buildComputeServiceAndTemplate(iaasProvider); + iaasProvider.setIaas(iaas); + + } catch (Exception e) { + String msg = + "Unable to build the jclouds object for iaas " + "of type: " + + iaasProvider.getType(); + log.error(msg, e); + throw new InvalidIaasProviderException(msg, e); + } + } + + // TODO transaction begins + dataHolder.addCartridge(cartridge); + + List<Cartridge> cartridgeList = new ArrayList<Cartridge>(); + cartridgeList.add(cartridge); + + TopologyBuilder.handleServiceCreated(cartridgeList); + // transaction ends + + log.info("Successfully deployed the Cartridge definition: " + cartridge.getType()); + } + + public void undeployCartridgeDefinition(String cartridgeType) { + + } + @Override public MemberContext startInstance(MemberContext member) throws IllegalArgumentException, UnregisteredCartridgeException { @@ -875,47 +929,47 @@ public class CloudControllerServiceImpl implements CloudControllerService { } - /** - * Comparator to compare {@link IaasProvider} on different attributes. - */ - public enum IaasProviderComparator implements Comparator<IaasProvider> { - SCALE_UP_SORT { - public int compare(IaasProvider o1, IaasProvider o2) { - return Integer.valueOf(o1.getScaleUpOrder()).compareTo( - o2.getScaleUpOrder()); - } - }, - SCALE_DOWN_SORT { - public int compare(IaasProvider o1, IaasProvider o2) { - return Integer.valueOf(o1.getScaleDownOrder()).compareTo( - o2.getScaleDownOrder()); - } - }; - - public static Comparator<IaasProvider> ascending( - final Comparator<IaasProvider> other) { - return new Comparator<IaasProvider>() { - public int compare(IaasProvider o1, IaasProvider o2) { - return other.compare(o1, o2); - } - }; - } - - public static Comparator<IaasProvider> getComparator( - final IaasProviderComparator... multipleOptions) { - return new Comparator<IaasProvider>() { - public int compare(IaasProvider o1, IaasProvider o2) { - for (IaasProviderComparator option : multipleOptions) { - int result = option.compare(o1, o2); - if (result != 0) { - return result; - } - } - return 0; - } - }; - } - } +// /** +// * Comparator to compare {@link IaasProvider} on different attributes. +// */ +// public enum IaasProviderComparator implements Comparator<IaasProvider> { +// SCALE_UP_SORT { +// public int compare(IaasProvider o1, IaasProvider o2) { +// return Integer.valueOf(o1.getScaleUpOrder()).compareTo( +// o2.getScaleUpOrder()); +// } +// }, +// SCALE_DOWN_SORT { +// public int compare(IaasProvider o1, IaasProvider o2) { +// return Integer.valueOf(o1.getScaleDownOrder()).compareTo( +// o2.getScaleDownOrder()); +// } +// }; +// +// public static Comparator<IaasProvider> ascending( +// final Comparator<IaasProvider> other) { +// return new Comparator<IaasProvider>() { +// public int compare(IaasProvider o1, IaasProvider o2) { +// return other.compare(o1, o2); +// } +// }; +// } +// +// public static Comparator<IaasProvider> getComparator( +// final IaasProviderComparator... multipleOptions) { +// return new Comparator<IaasProvider>() { +// public int compare(IaasProvider o1, IaasProvider o2) { +// for (IaasProviderComparator option : multipleOptions) { +// int result = option.compare(o1, o2); +// if (result != 0) { +// return result; +// } +// } +// return 0; +// } +// }; +// } +// } @Override public boolean registerService(Registrant registrant) http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/a21bf19f/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/CloudControllerService.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/CloudControllerService.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/CloudControllerService.java index 2784eb8..30a3d82 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/CloudControllerService.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/CloudControllerService.java @@ -19,12 +19,15 @@ package org.apache.stratos.cloud.controller.interfaces; import org.apache.stratos.cloud.controller.deployment.partition.Partition; +import org.apache.stratos.cloud.controller.exception.InvalidCartridgeDefinitionException; import org.apache.stratos.cloud.controller.exception.InvalidCartridgeTypeException; import org.apache.stratos.cloud.controller.exception.InvalidClusterException; +import org.apache.stratos.cloud.controller.exception.InvalidIaasProviderException; import org.apache.stratos.cloud.controller.exception.InvalidMemberException; import org.apache.stratos.cloud.controller.exception.InvalidPartitionException; import org.apache.stratos.cloud.controller.exception.UnregisteredCartridgeException; import org.apache.stratos.cloud.controller.exception.UnregisteredClusterException; +import org.apache.stratos.cloud.controller.pojo.CartridgeConfig; import org.apache.stratos.cloud.controller.pojo.CartridgeInfo; import org.apache.stratos.cloud.controller.pojo.MemberContext; import org.apache.stratos.cloud.controller.pojo.Registrant; @@ -35,6 +38,11 @@ import org.apache.stratos.cloud.controller.pojo.Registrant; * */ public interface CloudControllerService { + + public void deployCartridgeDefinition(CartridgeConfig cartridgeConfig) + throws InvalidCartridgeDefinitionException, InvalidIaasProviderException; + + public void undeployCartridgeDefinition(String cartridgeType); /** * Validate a given {@link Partition} for basic property existence. http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/a21bf19f/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/Cartridge.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/Cartridge.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/Cartridge.java index 0062403..a339b2e 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/Cartridge.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/Cartridge.java @@ -109,6 +109,12 @@ public class Cartridge implements Serializable{ public IaasProvider getIaasProviderOfPartition(String partitionId) { return partitionToIaasProvider.get(partitionId); } + + public void addProperty(String key, String val) { + if (key != null && val != null) { + properties.put(key, val); + } + } public Map<String, String> getProperties() { return properties; http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/a21bf19f/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/CartridgeConfig.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/CartridgeConfig.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/CartridgeConfig.java new file mode 100644 index 0000000..6584bd6 --- /dev/null +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/CartridgeConfig.java @@ -0,0 +1,211 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.stratos.cloud.controller.pojo; + +import java.io.Serializable; + +/** + * This class is used as the pojo for supporting the service at CC, + * which is called by the Rest API in SM to deploy a cartridge definition + */ +public class CartridgeConfig implements Serializable { + + private static final long serialVersionUID = 3455721779991902731L; + + private String type; + + private String hostName; + + private String provider; + + private String displayName; + + private String description; + + private String version; + + private boolean multiTenant; + + private String baseDir; + + private String[] deploymentDirs; + + private PortMapping[] portMappings; + + private Properties properties; + + private IaasConfig[] iaasConfigs; + + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getHostName() { + return hostName; + } + + public void setHostName(String hostName) { + this.hostName = hostName; + } + + public String getProvider() { + return provider; + } + + public void setProvider(String provider) { + this.provider = provider; + } + + public String getDisplayName() { + return displayName; + } + + public void setDisplayName(String displayName) { + this.displayName = displayName; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public boolean isMultiTenant() { + return multiTenant; + } + + public void setMultiTenant(boolean multiTenant) { + this.multiTenant = multiTenant; + } + + public String getBaseDir() { + return baseDir; + } + + public void setBaseDir(String baseDir) { + this.baseDir = baseDir; + } + + public String[] getDeploymentDirs() { + return deploymentDirs; + } + + public void setDeploymentDirs(String[] deploymentDirs) { + this.deploymentDirs = deploymentDirs; + } + + public PortMapping[] getPortMappings() { + return portMappings; + } + + public void setPortMappings(PortMapping[] portMappings) { + this.portMappings = portMappings; + } + + public Properties getProperties() { + return properties; + } + + public void setProperties(Properties properties) { + this.properties = properties; + } + + public IaasConfig[] getIaasConfigs() { + return iaasConfigs; + } + + public void setIaasConfigs(IaasConfig[] iaasConfigs) { + this.iaasConfigs = iaasConfigs; + } + + public String toString () { + + return "Type: " + type + ", Provider: " + provider + ", Host: " + hostName + ", Display Name: " + displayName + + ", Description: " + description + ", Version: " + version + ", Multitenant " + multiTenant + + "\n Deployment: " + getDeploymentDetails() + "\n PortMapping: " + getPortMappingDetails() + + "\n IaaS: " + getIaasConfigDetails() + "\n Properties: " + getPropertyDetails(); + } + + private String getDeploymentDetails () { + + StringBuilder deploymentDetailBuilder = new StringBuilder(); + deploymentDetailBuilder.append("Base direcotry: " + baseDir); + if(deploymentDirs.length > 0) { + deploymentDetailBuilder.append(" Direcotries: "); + for (String directory : deploymentDirs) { + deploymentDetailBuilder.append(directory + " | "); + } + } + + return deploymentDetailBuilder.toString(); + } + + private String getPortMappingDetails () { + + StringBuilder portMappingDetailBuilder = new StringBuilder(); + if(portMappings.length > 0) { + for (PortMapping portMapping : portMappings) { + portMappingDetailBuilder.append(portMapping.toString() + " | "); + } + } + return portMappingDetailBuilder.toString(); + } + + private String getIaasConfigDetails () { + + StringBuilder iaasConfigDetailBuilder = new StringBuilder(); + if(iaasConfigs.length > 0) { + for (IaasConfig iaasConfig : iaasConfigs) { + iaasConfigDetailBuilder.append(iaasConfig.toString() + " | "); + } + } + return iaasConfigDetailBuilder.toString(); + } + + private String getPropertyDetails () { + + StringBuilder propertyDetailBuilder = new StringBuilder(); + if(properties != null) { + Property[] propertyArray = properties.getProperties(); + if (propertyArray.length > 0) { + for (Property property : propertyArray) { + propertyDetailBuilder.append(property.toString() + " | "); + } + } + } + return propertyDetailBuilder.toString(); + } + +} http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/a21bf19f/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/IaasConfig.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/IaasConfig.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/IaasConfig.java new file mode 100644 index 0000000..b20f2d3 --- /dev/null +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/IaasConfig.java @@ -0,0 +1,151 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.stratos.cloud.controller.pojo; + +import java.io.Serializable; + +/** + * This class is used to support <link>CartridgeConfig</link> + * class for the Rest API + */ +public class IaasConfig implements Serializable { + + private static final long serialVersionUID = 3329046207651171707L; + + private String type; + + private String className; + + private String name; + + private String provider, identity, credential; + + private String imageId; + + private int maxInstanceLimit; + + private Properties properties; + + private byte[] payload; + + public String getClassName() { + return className; + } + + public void setClassName(String className) { + this.className = className; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getProvider() { + return provider; + } + + public void setProvider(String provider) { + this.provider = provider; + } + + public String getIdentity() { + return identity; + } + + public void setIdentity(String identity) { + this.identity = identity; + } + + public String getCredential() { + return credential; + } + + public void setCredential(String credential) { + this.credential = credential; + } + + public byte[] getPayload() { + return payload; + } + + public void setPayload(byte[] payload) { + this.payload = payload; + } + + public static long getSerialversionuid() { + return serialVersionUID; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getImageId() { + return imageId; + } + + public void setImageId(String imageId) { + this.imageId = imageId; + } + + public int getMaxInstanceLimit() { + return maxInstanceLimit; + } + + public void setMaxInstanceLimit(int maxInstanceLimit) { + this.maxInstanceLimit = maxInstanceLimit; + } + + public Properties getProperties() { + return properties; + } + + public void setProperties(Properties properties) { + this.properties = properties; + } + + public String toString () { + + return " [ Type: " + type + ", Image Id: " + imageId + ", Max Instance Limit: " + maxInstanceLimit + + " Properties: " + getIaasProperties() + " ] "; + } + + private String getIaasProperties () { + + StringBuilder iaasPropertyBuilder = new StringBuilder(); + if (properties != null) { + Property [] propertyArray = properties.getProperties(); + if(propertyArray.length > 0) { + for (Property property : propertyArray) { + iaasPropertyBuilder.append(property.toString() + " | "); + } + } + } + return iaasPropertyBuilder.toString(); + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/a21bf19f/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/IaasProvider.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/IaasProvider.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/IaasProvider.java index 449e2d9..41fe61e 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/IaasProvider.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/IaasProvider.java @@ -60,12 +60,6 @@ public class IaasProvider implements Serializable{ */ private String image; - - /** - * Scale up order and scale down order of the IaaS. - */ - private int scaleUpOrder = -1, scaleDownOrder = -1; - private String provider, identity, credential; private transient ComputeService computeService; @@ -87,15 +81,13 @@ public class IaasProvider implements Serializable{ this.className = anIaasProvider.getClassName(); this.properties = anIaasProvider.getProperties(); this.image = anIaasProvider.getImage(); - this.scaleUpOrder = anIaasProvider.getScaleUpOrder(); - this.scaleDownOrder = anIaasProvider.getScaleDownOrder(); this.provider = anIaasProvider.getProvider(); this.identity = anIaasProvider.getIdentity(); this.credential = anIaasProvider.getCredential(); this.computeService = anIaasProvider.getComputeService(); this.template = anIaasProvider.getTemplate(); - this.payload = anIaasProvider.getPayload(); this.iaas = anIaasProvider.getIaas(); + this.payload = anIaasProvider.getPayload(); } public String getType() { @@ -114,6 +106,12 @@ public class IaasProvider implements Serializable{ return properties; } + public void addProperty(String key, String val) { + if (key != null && val != null) { + properties.put(key, val); + } + } + public void setProperty(String key, String value) { if(key != null && value != null){ @@ -133,22 +131,6 @@ public class IaasProvider implements Serializable{ this.image = image; } - public int getScaleUpOrder() { - return scaleUpOrder; - } - - public void setScaleUpOrder(int scaleUpOrder) { - this.scaleUpOrder = scaleUpOrder; - } - - public int getScaleDownOrder() { - return scaleDownOrder; - } - - public void setScaleDownOrder(int scaleDownOrder) { - this.scaleDownOrder = scaleDownOrder; - } - public String getName() { return name; } @@ -225,14 +207,6 @@ public class IaasProvider implements Serializable{ this.className = className; } - public byte [] getPayload() { - return payload; - } - - public void setPayload(byte[]payload) { - this.payload = payload; - } - public Iaas getIaas() { return iaas; } @@ -247,4 +221,12 @@ public class IaasProvider implements Serializable{ // toBeRemovedNodeIds = new ArrayList<String>(); } + public byte[] getPayload() { + return payload; + } + + public void setPayload(byte[] payload) { + this.payload = payload; + } + } http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/a21bf19f/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java index 22e5903..1b0277c 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java @@ -24,13 +24,19 @@ import org.apache.stratos.cloud.controller.exception.CloudControllerException; import org.apache.stratos.cloud.controller.persist.Deserializer; import org.apache.stratos.cloud.controller.pojo.AppType; import org.apache.stratos.cloud.controller.pojo.Cartridge; +import org.apache.stratos.cloud.controller.pojo.CartridgeConfig; import org.apache.stratos.cloud.controller.pojo.CartridgeInfo; +import org.apache.stratos.cloud.controller.pojo.IaasConfig; +import org.apache.stratos.cloud.controller.pojo.IaasProvider; import org.apache.stratos.cloud.controller.pojo.PortMapping; import org.apache.stratos.cloud.controller.pojo.Property; import org.apache.stratos.cloud.controller.registry.RegistryManager; +import org.apache.stratos.cloud.controller.runtime.FasterLookUpDataHolder; import org.apache.stratos.messaging.domain.topology.Topology; import org.wso2.carbon.registry.core.exceptions.RegistryException; +import edu.emory.mathcs.backport.java.util.Arrays; + import java.util.ArrayList; import java.util.Iterator; import java.util.List; @@ -38,9 +44,104 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Properties; + public class CloudControllerUtil { private static final Log log = LogFactory.getLog(CloudControllerUtil.class); + @SuppressWarnings("unchecked") + public static Cartridge toCartridge(CartridgeConfig config) { + if (config == null) { + return null; + } + Cartridge cartridge = new Cartridge(); + cartridge.setType(config.getType()); + cartridge.setDisplayName(config.getDisplayName()); + cartridge.setDescription(config.getDescription()); + cartridge.setHostName(config.getHostName()); + cartridge.setDeploymentDirs(Arrays.asList(config.getDeploymentDirs())); + cartridge.setProvider(config.getProvider()); + cartridge.setVersion(config.getVersion()); + cartridge.setBaseDir(config.getBaseDir()); + cartridge.setPortMappings(Arrays.asList(config.getPortMappings())); + cartridge.setMultiTenant(config.isMultiTenant()); + + org.apache.stratos.cloud.controller.pojo.Properties props = config.getProperties(); + if (props != null) { + for (Property prop : props.getProperties()) { + cartridge.addProperty(prop.getName(), prop.getValue()); + } + } + + List<IaasProvider> iaases = FasterLookUpDataHolder.getInstance().getIaasProviders(); + + IaasConfig[] iaasConfigs = config.getIaasConfigs(); + if (iaasConfigs != null) { + for (IaasConfig iaasConfig : iaasConfigs) { + if (iaasConfig != null) { + IaasProvider iaasProvider = null; + if (iaases != null) { + // check whether this is a reference to a predefined IaaS. + for (IaasProvider iaas : iaases) { + if (iaas.getType().equals(iaasConfig.getType())) { + iaasProvider = new IaasProvider(iaas); + break; + } + } + } + + if (iaasProvider == null) { + iaasProvider = new IaasProvider(); + iaasProvider.setType(iaasConfig.getType()); + } + + String className = iaasConfig.getClassName(); + if (className != null) { + iaasProvider.setClassName(className); + } + + String name = iaasConfig.getName(); + if (name != null) { + iaasProvider.setName(name); + } + + String identity = iaasConfig.getIdentity(); + if (identity != null) { + iaasProvider.setIdentity(identity); + } + + String credential = iaasConfig.getCredential(); + if (credential != null) { + iaasProvider.setCredential(credential); + } + + String provider = iaasConfig.getProvider(); + if (provider != null) { + iaasProvider.setProvider(provider); + } + String imageId = iaasConfig.getImageId(); + if (imageId != null) { + iaasProvider.setImage(imageId); + } + + byte[] payload = iaasConfig.getPayload(); + if (payload != null) { + iaasProvider.setPayload(payload); + } + + org.apache.stratos.cloud.controller.pojo.Properties props1 = + config.getProperties(); + if (props1 != null) { + for (Property prop : props1.getProperties()) { + iaasProvider.addProperty(prop.getName(), prop.getValue()); + } + } + } + } + } + + return cartridge; + } + public static CartridgeInfo toCartridgeInfo(Cartridge cartridge) { CartridgeInfo carInfo = new CartridgeInfo();
