Refactoring cloud controller component to simplify the package structure
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/8c359dc1 Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/8c359dc1 Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/8c359dc1 Branch: refs/heads/master Commit: 8c359dc1bc2d21d7e2ff85b3bd20b5d58345af6f Parents: 2ec7fed Author: Imesh Gunaratne <[email protected]> Authored: Fri Nov 28 21:03:18 2014 +0530 Committer: Imesh Gunaratne <[email protected]> Committed: Fri Nov 28 21:03:18 2014 +0530 ---------------------------------------------------------------------- .../org.apache.stratos.cloud.controller/pom.xml | 14 +- .../controller/axiom/AxiomXpathParserUtil.java | 261 --- .../parser/CloudControllerConfigParser.java | 200 -- .../axiom/parser/IaasProviderConfigParser.java | 306 --- .../concurrent/PartitionValidatorCallable.java | 10 +- .../parser/CloudControllerConfigParser.java | 200 ++ .../config/parser/IaasProviderConfigParser.java | 306 +++ .../context/FasterLookUpDataHolder.java | 479 ++++ .../deployers/CloudControllerDeployer.java | 8 +- .../deployment/partition/Partition.java | 179 -- .../cloud/controller/domain/AppType.java | 62 + .../domain/ApplicationClusterContextDTO.java | 143 ++ .../cloud/controller/domain/Cartridge.java | 404 ++++ .../controller/domain/CartridgeConfig.java | 317 +++ .../cloud/controller/domain/CartridgeInfo.java | 232 ++ .../domain/CartridgeInstanceData.java | 120 + .../cloud/controller/domain/ClusterContext.java | 132 ++ .../domain/CompositeApplicationDefinition.java | 38 + .../controller/domain/ConfigCartridge.java | 17 + .../controller/domain/ConfigDependencies.java | 26 + .../controller/domain/ConfigDependencyPair.java | 29 + .../cloud/controller/domain/ConfigGroup.java | 33 + .../cloud/controller/domain/Container.java | 59 + .../domain/ContainerClusterContext.java | 89 + .../controller/domain/DataPublisherConfig.java | 85 + .../cloud/controller/domain/Dependencies.java | 48 + .../cloud/controller/domain/IaasConfig.java | 174 ++ .../cloud/controller/domain/IaasProvider.java | 265 +++ .../domain/KubernetesClusterContext.java | 187 ++ .../controller/domain/LoadbalancerConfig.java | 73 + .../cloud/controller/domain/MemberContext.java | 242 ++ .../controller/domain/NetworkInterface.java | 97 + .../controller/domain/NetworkInterfaces.java | 55 + .../cloud/controller/domain/Partition.java | 179 ++ .../cloud/controller/domain/Persistence.java | 53 + .../cloud/controller/domain/PortMapping.java | 69 + .../cloud/controller/domain/Registrant.java | 105 + .../cloud/controller/domain/ServiceGroup.java | 68 + .../cloud/controller/domain/TopologyConfig.java | 59 + .../stratos/cloud/controller/domain/Volume.java | 126 + .../domain/payload/MetaDataHolder.java | 99 + ...inerClusterContextToKubernetesContainer.java | 10 +- ...tainerClusterContextToKubernetesService.java | 8 +- ...erClusterContextToReplicationController.java | 6 +- .../functions/PodToMemberContext.java | 2 +- .../hector/CassandraDataRetriever.java | 182 -- .../controller/hive/HiveQueryExecutor.java | 172 -- .../cloud/controller/iaas/AWSEC2Iaas.java | 637 ++++++ .../cloud/controller/iaas/CloudstackIaas.java | 540 +++++ .../cloud/controller/iaas/DockerIaas.java | 151 ++ .../stratos/cloud/controller/iaas/GCEIaas.java | 454 ++++ .../stratos/cloud/controller/iaas/Iaas.java | 173 ++ .../controller/iaas/OpenstackNovaIaas.java | 740 ++++++ .../cloud/controller/iaas/VCloudIaas.java | 262 +++ .../validators/AWSEC2PartitionValidator.java | 122 + .../CloudstackPartitionValidator.java | 52 + .../validators/DockerPartitionValidator.java | 78 + .../iaas/validators/GCEPartitionValidator.java | 53 + .../OpenstackNovaPartitionValidator.java | 121 + .../iaas/validators/PartitionValidator.java | 47 + .../validators/VCloudPartitionValidator.java | 55 + .../cloud/controller/iaases/AWSEC2Iaas.java | 638 ------ .../cloud/controller/iaases/CloudstackIaas.java | 541 ----- .../cloud/controller/iaases/DockerIaas.java | 152 -- .../cloud/controller/iaases/GCEIaas.java | 455 ---- .../controller/iaases/OpenstackNovaIaas.java | 741 ------ .../cloud/controller/iaases/VCloudIaas.java | 263 --- .../impl/CloudControllerServiceImpl.java | 2149 ------------------ .../interfaces/CloudControllerService.java | 231 -- .../cloud/controller/interfaces/Iaas.java | 173 -- .../CloudControllerServiceComponent.java | 13 +- .../internal/ServiceReferenceHolder.java | 79 + .../jcloud/ComputeServiceBuilderUtil.java | 188 -- .../CartridgeInstanceDataPublisher.java | 213 ++ .../TopologySynchronizerTaskScheduler.java | 82 + .../application/ApplicationTopicReceiver.java | 81 + .../status/ClusterStatusTopicReceiver.java | 114 + .../status/InstanceStatusTopicReceiver.java | 111 + .../messaging/topology/TopologyBuilder.java | 962 ++++++++ .../topology/TopologyEventPublisher.java | 320 +++ .../messaging/topology/TopologyManager.java | 117 + .../topology/TopologySynchronizerTask.java | 67 + .../cloud/controller/persist/Deserializer.java | 96 - .../cloud/controller/persist/Serializer.java | 115 - .../stratos/cloud/controller/pojo/AppType.java | 62 - .../pojo/ApplicationClusterContextDTO.java | 143 -- .../cloud/controller/pojo/Cartridge.java | 404 ---- .../cloud/controller/pojo/CartridgeConfig.java | 317 --- .../cloud/controller/pojo/CartridgeInfo.java | 232 -- .../controller/pojo/CartridgeInstanceData.java | 120 - .../cloud/controller/pojo/ClusterContext.java | 132 -- .../pojo/CompositeApplicationDefinition.java | 38 - .../cloud/controller/pojo/ConfigCartridge.java | 17 - .../controller/pojo/ConfigDependencies.java | 29 - .../controller/pojo/ConfigDependencyPair.java | 29 - .../cloud/controller/pojo/ConfigGroup.java | 35 - .../cloud/controller/pojo/Container.java | 59 - .../pojo/ContainerClusterContext.java | 89 - .../controller/pojo/DataPublisherConfig.java | 85 - .../cloud/controller/pojo/Dependencies.java | 48 - .../cloud/controller/pojo/IaasConfig.java | 174 -- .../cloud/controller/pojo/IaasProvider.java | 265 --- .../pojo/KubernetesClusterContext.java | 187 -- .../controller/pojo/LoadbalancerConfig.java | 73 - .../cloud/controller/pojo/MemberContext.java | 243 -- .../cloud/controller/pojo/NetworkInterface.java | 97 - .../controller/pojo/NetworkInterfaces.java | 55 - .../cloud/controller/pojo/Persistence.java | 53 - .../cloud/controller/pojo/PortMapping.java | 69 - .../cloud/controller/pojo/Registrant.java | 105 - .../cloud/controller/pojo/ServiceGroup.java | 69 - .../cloud/controller/pojo/TopologyConfig.java | 59 - .../stratos/cloud/controller/pojo/Volume.java | 126 - .../controller/pojo/payload/MetaDataHolder.java | 99 - .../CartridgeInstanceDataPublisher.java | 213 -- .../TopologySynchronizerTaskScheduler.java | 82 - .../application/ApplicationTopicReceiver.java | 81 - .../status/ClusterStatusTopicReceiver.java | 114 - .../status/InstanceStatusTopicReceiver.java | 113 - .../cloud/controller/registry/Deserializer.java | 96 + .../controller/registry/RegistryManager.java | 5 +- .../cloud/controller/registry/Serializer.java | 115 + .../runtime/FasterLookUpDataHolder.java | 479 ---- .../services/CloudControllerService.java | 231 ++ .../services/CloudControllerServiceImpl.java | 2148 +++++++++++++++++ .../controller/topology/TopologyBuilder.java | 962 -------- .../topology/TopologyEventPublisher.java | 321 --- .../controller/topology/TopologyManager.java | 117 - .../topology/TopologySynchronizerTask.java | 67 - .../controller/util/AxiomXpathParserUtil.java | 260 +++ .../controller/util/CloudControllerUtil.java | 11 +- .../util/ComputeServiceBuilderUtil.java | 187 ++ .../controller/util/PodActivationWatcher.java | 6 +- .../controller/util/ServiceReferenceHolder.java | 79 - .../validate/AWSEC2PartitionValidator.java | 123 - .../validate/CloudstackPartitionValidator.java | 53 - .../validate/DockerPartitionValidator.java | 79 - .../validate/GCEPartitionValidator.java | 54 - .../OpenstackNovaPartitionValidator.java | 122 - .../validate/VCloudPartitionValidator.java | 56 - .../validate/interfaces/PartitionValidator.java | 47 - .../src/main/resources/META-INF/services.xml | 2 +- .../service/axiom/AxiomValidationTest.java | 2 +- .../service/axiom/AxiomXpathParserTest.java | 6 +- .../axiom/FasterLookupDataHolderTest.java | 4 +- .../src/test/resources/cloud-controller.xml | 2 +- .../main/resources/conf/cloud-controller.xml | 4 +- .../all/repository/conf/cloud-controller.xml | 8 +- .../cc/repository/conf/cloud-controller.xml | 6 +- 149 files changed, 13400 insertions(+), 13782 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/8c359dc1/components/org.apache.stratos.cloud.controller/pom.xml ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/pom.xml b/components/org.apache.stratos.cloud.controller/pom.xml index f09c150..1b88759 100644 --- a/components/org.apache.stratos.cloud.controller/pom.xml +++ b/components/org.apache.stratos.cloud.controller/pom.xml @@ -50,10 +50,10 @@ <Bundle-Name>${project.artifactId}</Bundle-Name> <Export-Package> org.apache.stratos.cloud.controller.interfaces.*, - org.apache.stratos.cloud.controller.publisher.*, + org.apache.stratos.cloud.controller.messaging.publisher.*, org.apache.stratos.cloud.controller.topic.*, - org.apache.stratos.cloud.controller.topology.*, - org.apache.stratos.cloud.controller.iaases.*, + org.apache.stratos.cloud.controller.messaging.topology.*, + org.apache.stratos.cloud.controller.iaas.*, org.apache.stratos.cloud.controller.pojo.*, org.apache.stratos.cloud.controller.deployers.*, org.apache.stratos.cloud.controller.exception.*, @@ -61,14 +61,14 @@ </Export-Package> <Private-Package> !org.apache.stratos.cloud.controller.interfaces.*, - !org.apache.stratos.cloud.controller.publisher.*, + !org.apache.stratos.cloud.controller.messaging.publisher.*, !org.apache.stratos.cloud.controller.topic.*, - !org.apache.stratos.cloud.controller.iaases.*, + !org.apache.stratos.cloud.controller.iaas.*, !org.apache.stratos.cloud.controller.pojo.*, !org.apache.stratos.cloud.controller.pojo.application.*, !org.apache.stratos.cloud.controller.deployers.*, !org.apache.stratos.cloud.controller.exception.*, - !org.apache.stratos.cloud.controller.topology.*, + !org.apache.stratos.cloud.controller.messaging.topology.*, org.apache.stratos.cloud.controller.*, </Private-Package> <Import-Package> @@ -91,7 +91,7 @@ <groupId>org.apache.axis2</groupId> <artifactId>axis2-java2wsdl-maven-plugin</artifactId> <configuration> - <className>org.apache.stratos.cloud.controller.impl.CloudControllerServiceImpl</className> + <className>org.apache.stratos.cloud.controller.services.CloudControllerServiceImpl</className> <outputFileName>target/generated-resources/wsdl/CloudControllerService.wsdl</outputFileName> <serviceName>CloudControllerService</serviceName> </configuration> http://git-wip-us.apache.org/repos/asf/stratos/blob/8c359dc1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/AxiomXpathParserUtil.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/AxiomXpathParserUtil.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/AxiomXpathParserUtil.java deleted file mode 100644 index 9ad2777..0000000 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/AxiomXpathParserUtil.java +++ /dev/null @@ -1,261 +0,0 @@ -/* - * 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.axiom; - -import org.apache.axiom.om.OMElement; -import org.apache.axiom.om.OMFactory; -import org.apache.axiom.om.OMNode; -import org.apache.axiom.om.impl.builder.StAXOMBuilder; -import org.apache.axiom.om.impl.dom.DOOMAbstractFactory; -import org.apache.axiom.om.impl.dom.ElementImpl; -import org.apache.axiom.om.xpath.AXIOMXPath; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.stratos.cloud.controller.exception.MalformedConfigurationFileException; -import org.apache.stratos.cloud.controller.util.*; -import org.jaxen.JaxenException; -import org.w3c.dom.Element; -import org.wso2.securevault.SecretResolver; -import org.wso2.securevault.SecretResolverFactory; -import org.xml.sax.SAXException; - -import javax.xml.XMLConstants; -import javax.xml.namespace.QName; -import javax.xml.stream.XMLStreamException; -import javax.xml.stream.XMLStreamReader; -import javax.xml.transform.Source; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamSource; -import javax.xml.validation.Schema; -import javax.xml.validation.SchemaFactory; -import javax.xml.validation.Validator; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.util.*; - -/** - * This class is parsing configuration files using Axiom Xpath. - */ -public class AxiomXpathParserUtil { - - private static final Log LOG = LogFactory.getLog(AxiomXpathParserUtil.class); - - private AxiomXpathParserUtil(){} - - public static OMElement parse(File xmlSource) throws MalformedConfigurationFileException, - IllegalArgumentException { - - OMElement documentElement; - - if (xmlSource == null) { - String msg = "File is null."; - LOG.error(msg); - throw new IllegalArgumentException(msg); - } - - try { - documentElement = new StAXOMBuilder(xmlSource.getPath()).getDocumentElement(); - return documentElement; - - } catch (XMLStreamException e) { - String msg = "Failed to parse the configuration file : " + xmlSource.getPath(); - LOG.error(msg, e); - throw new MalformedConfigurationFileException(msg, e); - } catch (FileNotFoundException e) { - String msg = "Configuration file cannot be found : " + xmlSource.getPath(); - LOG.error(msg); - throw new MalformedConfigurationFileException(msg); - } - - } - - private static Element getDOMElement(final OMElement omElement) { - - // Get the StAX reader from the created element - XMLStreamReader llomReader = omElement.getXMLStreamReader(); - - // Create the DOOM OMFactory - OMFactory doomFactory = DOOMAbstractFactory.getOMFactory(); - - // Create the new builder - StAXOMBuilder doomBuilder = new StAXOMBuilder(doomFactory, llomReader); - - // Get the document element - OMElement newElem = doomBuilder.getDocumentElement(); - - return newElem instanceof Element ? (Element) newElem : null; - } - - private static OMElement getElement(final Object obj) { - OMNode node; - if ((obj instanceof OMNode) && (node = (OMNode) obj).getType() == OMNode.ELEMENT_NODE) { - - OMElement element = (OMElement) node; - - return element; - - } - - return null; - } - - public static OMElement getElement(final String fileName, final OMElement rootElt, - final String eltStr, final String xpath) { - List<?> nodes = getMatchingNodes(xpath, rootElt); - neglectingWarn(fileName, eltStr, nodes.size()); - OMElement element = getElement(nodes.get(0)); - return element; - } - - public static OMElement getFirstChildElement(final OMElement root, final String childName) { - Iterator<?> it = root.getChildrenWithName(new QName(childName)); - if (it.hasNext()) { - return (OMElement) it.next(); - } - - return null; - } - - private static void neglectingWarn(final String fileName, final String elt, final int size) { - if (size > 1) { - LOG.warn(fileName + " contains more than one " + elt + " elements!" + - " Elements other than the first will be neglected."); - } - } - - public static void plainTextWarn(final String elt) { - LOG.warn("Unable to find a value for " + elt + " element from Secure Vault." + - "Hence we will try to assign the plain text value (if specified)."); - } - - /** - * @param xpath - * XPATH expression to be read. - * @param elt - * OMElement to be used for the search. - * @return List matching OMNode list - */ - @SuppressWarnings("unchecked") - public static OMNode getFirstMatchingNode(final String xpath, final OMElement elt) throws MalformedConfigurationFileException{ - - AXIOMXPath axiomXpath; - List<OMNode> nodeList = null; - try { - axiomXpath = new AXIOMXPath(xpath); - nodeList = axiomXpath.selectNodes(elt); - return nodeList.isEmpty() ? null : nodeList.get(0); - } catch (JaxenException e) { - String msg = "Error occurred while reading the Xpath (" + xpath + ")"; - LOG.error(msg, e); - throw new MalformedConfigurationFileException(msg, e); - } - - } - - /** - * @param xpath - * XPATH expression to be read. - * @return List matching list - */ - @SuppressWarnings("unchecked") - public static List<OMNode> getMatchingNodes(OMElement elt, final String xpath) throws MalformedConfigurationFileException{ - - AXIOMXPath axiomXpath; - List<OMNode> nodeList = null; - try { - axiomXpath = new AXIOMXPath(xpath); - nodeList = axiomXpath.selectNodes(elt); - return nodeList; - } catch (JaxenException e) { - String msg = "Error occurred while reading the Xpath (" + xpath + ")"; - LOG.error(msg, e); - throw new MalformedConfigurationFileException(msg, e); - } - - } - - /** - * @param xpath - * XPATH expression to be read. - * @param elt - * OMElement to be used for the search. - * @return List matching OMNode list - */ - @SuppressWarnings("unchecked") - public static List<OMNode> getMatchingNodes(final String xpath, final OMElement elt) throws MalformedConfigurationFileException{ - - AXIOMXPath axiomXpath; - List<OMNode> nodeList = null; - try { - axiomXpath = new AXIOMXPath(xpath); - nodeList = axiomXpath.selectNodes(elt); - return nodeList; - } catch (JaxenException e) { - String msg = "Error occurred while reading the Xpath (" + xpath + ")"; - LOG.error(msg, e); - throw new MalformedConfigurationFileException(msg, e); - } - - } - - public static void validate(final OMElement omElement, final File schemaFile) throws SAXException, IOException { - - Element sourceElement; - - // if the OMElement is created using DOM implementation use it - if (omElement instanceof ElementImpl) { - sourceElement = (Element) omElement; - } else { // else convert from llom to dom - sourceElement = getDOMElement(omElement); - } - - // Create a SchemaFactory capable of understanding WXS schemas. - - // Load a WXS schema, represented by a Schema instance. - SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); - Source source = new StreamSource(schemaFile); - - // Create a Validator object, which can be used to validate - // an instance document. - Schema schema = factory.newSchema(source); - Validator validator = schema.newValidator(); - - // Validate the DOM tree. - validator.validate(new DOMSource(sourceElement)); - } - - public static String resolveSecret(final OMElement docElt, final OMElement elt) { - // retrieve the value using secure vault - SecretResolver secretResolver = SecretResolverFactory.create(docElt, false); - - String alias = elt.getAttributeValue(new QName( - CloudControllerConstants.ALIAS_NAMESPACE, - CloudControllerConstants.ALIAS_ATTRIBUTE, - CloudControllerConstants.ALIAS_ATTRIBUTE_PREFIX)); - - // retrieve the secured password - if (secretResolver != null && secretResolver.isInitialized() && - secretResolver.isTokenProtected(alias)) { - return secretResolver.resolve(alias); - } - return null; - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/8c359dc1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/parser/CloudControllerConfigParser.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/parser/CloudControllerConfigParser.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/parser/CloudControllerConfigParser.java deleted file mode 100644 index 95860b8..0000000 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/parser/CloudControllerConfigParser.java +++ /dev/null @@ -1,200 +0,0 @@ -/* - * 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.axiom.parser; - -import java.util.ArrayList; -import java.util.List; -import javax.xml.namespace.QName; - -import org.apache.axiom.om.OMElement; -import org.apache.axiom.om.OMNode; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.stratos.cloud.controller.axiom.AxiomXpathParserUtil; -import org.apache.stratos.cloud.controller.exception.MalformedConfigurationFileException; -import org.apache.stratos.cloud.controller.pojo.DataPublisherConfig; -import org.apache.stratos.cloud.controller.pojo.IaasProvider; -import org.apache.stratos.cloud.controller.pojo.TopologyConfig; -import org.apache.stratos.cloud.controller.runtime.FasterLookUpDataHolder; -import org.apache.stratos.cloud.controller.util.CloudControllerConstants; - -/** - * Parse the cloud-controller.xml - * - * - */ -public class CloudControllerConfigParser { - private static final Log log = LogFactory.getLog(CloudControllerConfigParser.class); - private static final String FILE_NAME = "cloud-controller.xml"; - - /** - * Parse the cloud-controller.xml file. - * @param elt document element. - * @throws MalformedConfigurationFileException - */ - public static void parse(OMElement elt) throws MalformedConfigurationFileException { - - extractIaasProviders(elt, AxiomXpathParserUtil.getMatchingNodes(elt, CloudControllerConstants.IAAS_PROVIDER_XPATH)); - extractDataPublisherConfig(elt, AxiomXpathParserUtil.getElement(FILE_NAME, elt, CloudControllerConstants.DATA_PUBLISHER_ELEMENT, - CloudControllerConstants.DATA_PUBLISHER_XPATH)); - extractTopologySyncConfig(elt, AxiomXpathParserUtil.getElement(FILE_NAME, elt, CloudControllerConstants.TOPOLOGY_SYNC_ELEMENT, - CloudControllerConstants.TOPOLOGY_SYNC_XPATH)); - } - - - - - private static void extractIaasProviders(OMElement elt, List<OMNode> nodeList) { - List<IaasProvider> iaasProviders = FasterLookUpDataHolder.getInstance().getIaasProviders(); - - if (iaasProviders == null) { - FasterLookUpDataHolder.getInstance() - .setIaasProviders((iaasProviders = new ArrayList<IaasProvider>())); - } - - // this is a valid scenario. User can have 0..1 iaas provider elements - // in cloud-controller xml. - if (nodeList == null || nodeList.isEmpty()) { - log.debug("No IaasProvider element found in "+FILE_NAME); - return; - } - - for (OMNode node : nodeList) { - iaasProviders.add(IaasProviderConfigParser.getIaasProvider(FILE_NAME, elt, node, null)); - } - } - - private static void extractDataPublisherConfig(OMElement rootElt, OMElement element) { - if (element == null) { - log.debug("No data publisher config found in "+FILE_NAME); - return; - } - - FasterLookUpDataHolder dataHolder = FasterLookUpDataHolder.getInstance(); - // get enable attribute - boolean isEnable = - Boolean.parseBoolean(element.getAttributeValue(new QName( - CloudControllerConstants.ENABLE_ATTR))); - dataHolder.setEnableBAMDataPublisher(isEnable); - - if (isEnable) { - // get bam server info - OMElement childElement = - AxiomXpathParserUtil.getFirstChildElement(element, - CloudControllerConstants.BAM_SERVER_ELEMENT); - OMElement elt; - - DataPublisherConfig config = new DataPublisherConfig(); - dataHolder.setDataPubConfig(config); - - if (childElement != null) { - // set bam user name - elt = - AxiomXpathParserUtil.getFirstChildElement(childElement, - CloudControllerConstants.BAM_SERVER_ADMIN_USERNAME_ELEMENT); - if (elt != null) { - config.setBamUsername(elt.getText()); - } - // set bam password - elt = - AxiomXpathParserUtil.getFirstChildElement(childElement, - CloudControllerConstants.BAM_SERVER_ADMIN_PASSWORD_ELEMENT); - if (elt != null) { - String password = AxiomXpathParserUtil.resolveSecret(rootElt, elt); - if (password == null) { - AxiomXpathParserUtil.plainTextWarn(CloudControllerConstants.BAM_SERVER_ADMIN_PASSWORD_ELEMENT); - password = elt.getText(); - } - - if (password != null) { - config.setBamPassword(password); - } - } - } - - // set cron - childElement = AxiomXpathParserUtil.getFirstChildElement(element, CloudControllerConstants.CRON_ELEMENT); - if (childElement != null) { - config.setDataPublisherCron(childElement.getText()); - } - - // set cassandra info - childElement = AxiomXpathParserUtil.getFirstChildElement(element, CloudControllerConstants.CASSANDRA_INFO_ELEMENT); - - if (childElement != null) { - // set connection url - elt = AxiomXpathParserUtil.getFirstChildElement(childElement, CloudControllerConstants.CONNECTION_URL_ELEMENT); - if (elt != null) { - config.setCassandraConnUrl(elt.getText()); - } - - // set user name - elt = AxiomXpathParserUtil.getFirstChildElement(childElement, CloudControllerConstants.USER_NAME_ELEMENT); - if (elt != null) { - config.setCassandraUser(elt.getText()); - } - // set password - elt = AxiomXpathParserUtil.getFirstChildElement(childElement, CloudControllerConstants.PASSWORD_ELEMENT); - if (elt != null) { - String password = AxiomXpathParserUtil.resolveSecret(rootElt, elt); - if (password == null) { - AxiomXpathParserUtil.plainTextWarn(CloudControllerConstants.PASSWORD_ELEMENT); - password = elt.getText(); - } - - if (password != null) { - config.setCassandraPassword(password); - } - } - } - - } - } - - private static void extractTopologySyncConfig(OMElement elt, OMElement element) { - - if (element == null) { - log.debug("No Topology sync config is found "+FILE_NAME); - return; - } - - // get enable attribute - boolean isEnable = - Boolean.parseBoolean(element.getAttributeValue(new QName( - CloudControllerConstants.ENABLE_ATTR))); - - FasterLookUpDataHolder dataHolder = FasterLookUpDataHolder.getInstance(); - - dataHolder.setEnableTopologySync(isEnable); - if (!isEnable) { - if (log.isWarnEnabled()) { - log.warn("Topology synchronization is disabled!"); - } - } - - if (isEnable) { - TopologyConfig topologyConfig = new TopologyConfig(); - // load properties - IaasProviderConfigParser.loadProperties(FILE_NAME, element, topologyConfig.getProperties()); - - dataHolder.setTopologyConfig(topologyConfig); - } - } - -} http://git-wip-us.apache.org/repos/asf/stratos/blob/8c359dc1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/parser/IaasProviderConfigParser.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/parser/IaasProviderConfigParser.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/parser/IaasProviderConfigParser.java deleted file mode 100644 index 7830a2c..0000000 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/parser/IaasProviderConfigParser.java +++ /dev/null @@ -1,306 +0,0 @@ -/* - * 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.axiom.parser; - -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import javax.xml.namespace.QName; - -import org.apache.axiom.om.OMElement; -import org.apache.axiom.om.OMNode; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.stratos.cloud.controller.exception.MalformedConfigurationFileException; -import org.apache.stratos.cloud.controller.pojo.IaasProvider; -import org.apache.stratos.cloud.controller.util.CloudControllerConstants; -import org.wso2.securevault.SecretResolver; -import org.wso2.securevault.SecretResolverFactory; - -/** - * Parse the iaas providers. - * - * - */ -public class IaasProviderConfigParser { - private static final Log log = LogFactory.getLog(IaasProviderConfigParser.class); - - public static IaasProvider getIaasProvider(final String fileName, final OMElement elt, final OMNode item, List<IaasProvider> iaases) { - - IaasProvider iaas = null; - - if (item.getType() == OMNode.ELEMENT_NODE) { - - OMElement iaasElt = (OMElement) item; - - if (iaases != null) { - // check whether this is a reference to a predefined IaaS. - for (IaasProvider iaasProvider : iaases) { - if (iaasProvider.getType() - .equals(iaasElt.getAttribute(new QName( - CloudControllerConstants.TYPE_ATTR)) - .getAttributeValue())) { - iaas = new IaasProvider(iaasProvider); - break; - } - } - } - - if (iaas == null) { - iaas = new IaasProvider(); - } - - if (iaas.getType() == null) { - iaas.setType(iaasElt.getAttribute(new QName(CloudControllerConstants.TYPE_ATTR)) - .getAttributeValue()); - } - - if ("".equals(iaas.getType())) { - String msg = - "'" + CloudControllerConstants.IAAS_PROVIDER_ELEMENT + "' element's '" + - CloudControllerConstants.TYPE_ATTR + - "' attribute should be specified!"; - - handleException(msg); - - } - - // this is not mandatory - String name = - (iaasElt.getAttribute(new QName(CloudControllerConstants.NAME_ATTR)) == null) - ? iaas.getName() - : iaasElt.getAttributeValue(new QName( - CloudControllerConstants.NAME_ATTR)); - - iaas.setName(name); - - String xpath = CloudControllerConstants.IAAS_PROVIDER_ELEMENT_XPATH; - - // load other elements - loadClassName(fileName, iaas, iaasElt); - loadProvider(fileName, iaas, iaasElt); - loadProperties(fileName, iaasElt, iaas.getProperties()); - loadTemplate(fileName, iaas, iaasElt); - loadIdentity(fileName, elt, iaas, iaasElt); - loadCredentials(fileName, elt, iaas, iaasElt, xpath); - } - - return iaas; - } - - private static void loadClassName(final String fileName, final IaasProvider iaas, final OMElement iaasElt) { - - Iterator<?> it = - iaasElt.getChildrenWithName(new QName( - CloudControllerConstants.CLASS_NAME_ELEMENT)); - - if (it.hasNext()) { - OMElement classNameElt = (OMElement) it.next(); - iaas.setClassName(classNameElt.getText()); - } - - if (it.hasNext()) { - log.warn(" file contains more than one " + - CloudControllerConstants.CLASS_NAME_ELEMENT + " elements!" + - " Elements other than the first will be neglected."); - } - - if (iaas.getClassName() == null) { - String msg = - "Essential '" + CloudControllerConstants.CLASS_NAME_ELEMENT + "' element " + - "has not specified in " + fileName; - handleException(msg); - } - - } - - private static void loadCredentials(final String fileName, final OMElement elt, final IaasProvider iaas, final OMElement iaasElt, - final String xpath) { - - Iterator<?> it = - iaasElt.getChildrenWithName(new QName( - CloudControllerConstants.CREDENTIAL_ELEMENT)); - - if (it.hasNext()) { - OMElement credentialElt = (OMElement) it.next(); - - // retrieve the value using secure vault - SecretResolver secretResolver = SecretResolverFactory.create(elt, false); - String alias = credentialElt.getAttributeValue(new QName( - CloudControllerConstants.ALIAS_NAMESPACE, - CloudControllerConstants.ALIAS_ATTRIBUTE, - CloudControllerConstants.ALIAS_ATTRIBUTE_PREFIX)); - - // retrieve the secured password - if (secretResolver != null && secretResolver.isInitialized() && - secretResolver.isTokenProtected(alias)) { - iaas.setCredential(secretResolver.resolve(alias)); - } - - // if we still cannot find a value, we try to assign the value which - // is specified - // in the element, if any - if (iaas.getCredential() == null) { - log.warn("Unable to find a value for " + CloudControllerConstants.CREDENTIAL_ELEMENT + - " element from Secure Vault." + - "Hence we will try to assign the plain text value (if specified)."); - iaas.setCredential(credentialElt.getText()); - } - } - - if (it.hasNext()) { - log.warn(fileName + " contains more than one " + - CloudControllerConstants.CREDENTIAL_ELEMENT + " elements!" + - " Elements other than the first will be neglected."); - } - - if (iaas.getCredential() == null) { - String msg = - "Essential '" + CloudControllerConstants.CREDENTIAL_ELEMENT + "' element" + - " has not specified in " + fileName; - handleException(msg); - } - - } - - - private static void loadIdentity(final String fileName, final OMElement elt, final IaasProvider iaas, final OMElement iaasElt) { - - Iterator<?> it = - iaasElt.getChildrenWithName(new QName(CloudControllerConstants.IDENTITY_ELEMENT)); - - if (it.hasNext()) { - OMElement identityElt = (OMElement) it.next(); - - // retrieve the value using secure vault - SecretResolver secretResolver = SecretResolverFactory.create(elt, false); - String alias = identityElt.getAttributeValue(new QName( - CloudControllerConstants.ALIAS_NAMESPACE, - CloudControllerConstants.ALIAS_ATTRIBUTE, - CloudControllerConstants.ALIAS_ATTRIBUTE_PREFIX)); - - // retrieve the secured password - if (secretResolver != null && secretResolver.isInitialized() && - secretResolver.isTokenProtected(alias)) { - iaas.setIdentity(secretResolver.resolve(alias)); - } - - // if we still cannot find a value, we try to assign the value which - // is specified - // in the element, if any - if (iaas.getIdentity() == null) { - log.warn("Unable to find a value for " + CloudControllerConstants.IDENTITY_ELEMENT + - " element from Secure Vault." + - "Hence we will try to assign the plain text value (if specified)."); - iaas.setIdentity(identityElt.getText()); - } - } - - if (it.hasNext()) { - log.warn(fileName + " contains more than one " + CloudControllerConstants.IDENTITY_ELEMENT + - " elements!" + " Elements other than the first will be neglected."); - } - - if (iaas.getIdentity() == null) { - String msg = - "Essential '" + CloudControllerConstants.IDENTITY_ELEMENT + "' element" + - " has not specified in " + fileName; - handleException(msg); - } - - } - - - - public static void loadProperties(final String fileName, final OMElement elt, final Map<String, String> propertyMap) { - - Iterator<?> it = - elt.getChildrenWithName(new QName(CloudControllerConstants.PROPERTY_ELEMENT)); - - while (it.hasNext()) { - OMElement prop = (OMElement) it.next(); - - if (prop.getAttribute(new QName(CloudControllerConstants.PROPERTY_NAME_ATTR)) == null || - prop.getAttribute(new QName(CloudControllerConstants.PROPERTY_VALUE_ATTR)) == null) { - - String msg = - "Property element's, name and value attributes should be specified " + - "in " + fileName; - - handleException(msg); - } - - propertyMap.put(prop.getAttribute(new QName(CloudControllerConstants.PROPERTY_NAME_ATTR)) - .getAttributeValue(), - prop.getAttribute(new QName(CloudControllerConstants.PROPERTY_VALUE_ATTR)) - .getAttributeValue()); - } - - } - - private static void loadProvider(final String fileName, final IaasProvider iaas, final OMElement iaasElt) { - - Iterator<?> it = - iaasElt.getChildrenWithName(new QName(CloudControllerConstants.PROVIDER_ELEMENT)); - - if (it.hasNext()) { - OMElement providerElt = (OMElement) it.next(); - iaas.setProvider(providerElt.getText()); - } - - if (it.hasNext()) { - log.warn(fileName + " contains more than one " + CloudControllerConstants.PROVIDER_ELEMENT + - " elements!" + " Elements other than the first will be neglected."); - } - - if (iaas.getProvider() == null) { - String msg = - "Essential '" + CloudControllerConstants.PROVIDER_ELEMENT + "' element " + - "has not specified in " + fileName; - handleException(msg); - } - - } - - - private static void loadTemplate(final String fileName, final IaasProvider iaas, final OMElement iaasElt) { - - Iterator<?> it = - iaasElt.getChildrenWithName(new QName(CloudControllerConstants.IMAGE_ID_ELEMENT)); - - if (it.hasNext()) { - OMElement imageElt = (OMElement) it.next(); - iaas.setImage(imageElt.getText()); - } - - if (it.hasNext()) { - log.warn(fileName + " contains more than one " + CloudControllerConstants.IMAGE_ID_ELEMENT + - " elements!" + " Elements other than the first will be neglected."); - } - - } - - - private static void handleException(final String msg) throws MalformedConfigurationFileException{ - log.error(msg); - throw new MalformedConfigurationFileException(msg); - } - -} http://git-wip-us.apache.org/repos/asf/stratos/blob/8c359dc1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/concurrent/PartitionValidatorCallable.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/concurrent/PartitionValidatorCallable.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/concurrent/PartitionValidatorCallable.java index d0c2276..dd32202 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/concurrent/PartitionValidatorCallable.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/concurrent/PartitionValidatorCallable.java @@ -22,14 +22,14 @@ import java.util.concurrent.Callable; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.stratos.cloud.controller.deployment.partition.Partition; +import org.apache.stratos.cloud.controller.domain.Partition; import org.apache.stratos.cloud.controller.exception.InvalidIaasProviderException; import org.apache.stratos.cloud.controller.exception.InvalidPartitionException; -import org.apache.stratos.cloud.controller.interfaces.Iaas; -import org.apache.stratos.cloud.controller.pojo.Cartridge; -import org.apache.stratos.cloud.controller.pojo.IaasProvider; +import org.apache.stratos.cloud.controller.iaas.Iaas; +import org.apache.stratos.cloud.controller.domain.Cartridge; +import org.apache.stratos.cloud.controller.domain.IaasProvider; import org.apache.stratos.cloud.controller.util.CloudControllerUtil; -import org.apache.stratos.cloud.controller.validate.interfaces.PartitionValidator; +import org.apache.stratos.cloud.controller.iaas.validators.PartitionValidator; public class PartitionValidatorCallable implements Callable<IaasProvider> { http://git-wip-us.apache.org/repos/asf/stratos/blob/8c359dc1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/config/parser/CloudControllerConfigParser.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/config/parser/CloudControllerConfigParser.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/config/parser/CloudControllerConfigParser.java new file mode 100644 index 0000000..4f85f9e --- /dev/null +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/config/parser/CloudControllerConfigParser.java @@ -0,0 +1,200 @@ +/* + * 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.config.parser; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.namespace.QName; + +import org.apache.axiom.om.OMElement; +import org.apache.axiom.om.OMNode; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.stratos.cloud.controller.util.AxiomXpathParserUtil; +import org.apache.stratos.cloud.controller.exception.MalformedConfigurationFileException; +import org.apache.stratos.cloud.controller.domain.DataPublisherConfig; +import org.apache.stratos.cloud.controller.domain.IaasProvider; +import org.apache.stratos.cloud.controller.domain.TopologyConfig; +import org.apache.stratos.cloud.controller.context.FasterLookUpDataHolder; +import org.apache.stratos.cloud.controller.util.CloudControllerConstants; + +/** + * Parse the cloud-controller.xml + * + * + */ +public class CloudControllerConfigParser { + private static final Log log = LogFactory.getLog(CloudControllerConfigParser.class); + private static final String FILE_NAME = "cloud-controller.xml"; + + /** + * Parse the cloud-controller.xml file. + * @param elt document element. + * @throws MalformedConfigurationFileException + */ + public static void parse(OMElement elt) throws MalformedConfigurationFileException { + + extractIaasProviders(elt, AxiomXpathParserUtil.getMatchingNodes(elt, CloudControllerConstants.IAAS_PROVIDER_XPATH)); + extractDataPublisherConfig(elt, AxiomXpathParserUtil.getElement(FILE_NAME, elt, CloudControllerConstants.DATA_PUBLISHER_ELEMENT, + CloudControllerConstants.DATA_PUBLISHER_XPATH)); + extractTopologySyncConfig(elt, AxiomXpathParserUtil.getElement(FILE_NAME, elt, CloudControllerConstants.TOPOLOGY_SYNC_ELEMENT, + CloudControllerConstants.TOPOLOGY_SYNC_XPATH)); + } + + + + + private static void extractIaasProviders(OMElement elt, List<OMNode> nodeList) { + List<IaasProvider> iaasProviders = FasterLookUpDataHolder.getInstance().getIaasProviders(); + + if (iaasProviders == null) { + FasterLookUpDataHolder.getInstance() + .setIaasProviders((iaasProviders = new ArrayList<IaasProvider>())); + } + + // this is a valid scenario. User can have 0..1 iaas provider elements + // in cloud-controller xml. + if (nodeList == null || nodeList.isEmpty()) { + log.debug("No IaasProvider element found in "+FILE_NAME); + return; + } + + for (OMNode node : nodeList) { + iaasProviders.add(IaasProviderConfigParser.getIaasProvider(FILE_NAME, elt, node, null)); + } + } + + private static void extractDataPublisherConfig(OMElement rootElt, OMElement element) { + if (element == null) { + log.debug("No data publisher config found in "+FILE_NAME); + return; + } + + FasterLookUpDataHolder dataHolder = FasterLookUpDataHolder.getInstance(); + // get enable attribute + boolean isEnable = + Boolean.parseBoolean(element.getAttributeValue(new QName( + CloudControllerConstants.ENABLE_ATTR))); + dataHolder.setEnableBAMDataPublisher(isEnable); + + if (isEnable) { + // get bam server info + OMElement childElement = + AxiomXpathParserUtil.getFirstChildElement(element, + CloudControllerConstants.BAM_SERVER_ELEMENT); + OMElement elt; + + DataPublisherConfig config = new DataPublisherConfig(); + dataHolder.setDataPubConfig(config); + + if (childElement != null) { + // set bam user name + elt = + AxiomXpathParserUtil.getFirstChildElement(childElement, + CloudControllerConstants.BAM_SERVER_ADMIN_USERNAME_ELEMENT); + if (elt != null) { + config.setBamUsername(elt.getText()); + } + // set bam password + elt = + AxiomXpathParserUtil.getFirstChildElement(childElement, + CloudControllerConstants.BAM_SERVER_ADMIN_PASSWORD_ELEMENT); + if (elt != null) { + String password = AxiomXpathParserUtil.resolveSecret(rootElt, elt); + if (password == null) { + AxiomXpathParserUtil.plainTextWarn(CloudControllerConstants.BAM_SERVER_ADMIN_PASSWORD_ELEMENT); + password = elt.getText(); + } + + if (password != null) { + config.setBamPassword(password); + } + } + } + + // set cron + childElement = AxiomXpathParserUtil.getFirstChildElement(element, CloudControllerConstants.CRON_ELEMENT); + if (childElement != null) { + config.setDataPublisherCron(childElement.getText()); + } + + // set cassandra info + childElement = AxiomXpathParserUtil.getFirstChildElement(element, CloudControllerConstants.CASSANDRA_INFO_ELEMENT); + + if (childElement != null) { + // set connection url + elt = AxiomXpathParserUtil.getFirstChildElement(childElement, CloudControllerConstants.CONNECTION_URL_ELEMENT); + if (elt != null) { + config.setCassandraConnUrl(elt.getText()); + } + + // set user name + elt = AxiomXpathParserUtil.getFirstChildElement(childElement, CloudControllerConstants.USER_NAME_ELEMENT); + if (elt != null) { + config.setCassandraUser(elt.getText()); + } + // set password + elt = AxiomXpathParserUtil.getFirstChildElement(childElement, CloudControllerConstants.PASSWORD_ELEMENT); + if (elt != null) { + String password = AxiomXpathParserUtil.resolveSecret(rootElt, elt); + if (password == null) { + AxiomXpathParserUtil.plainTextWarn(CloudControllerConstants.PASSWORD_ELEMENT); + password = elt.getText(); + } + + if (password != null) { + config.setCassandraPassword(password); + } + } + } + + } + } + + private static void extractTopologySyncConfig(OMElement elt, OMElement element) { + + if (element == null) { + log.debug("No Topology sync config is found "+FILE_NAME); + return; + } + + // get enable attribute + boolean isEnable = + Boolean.parseBoolean(element.getAttributeValue(new QName( + CloudControllerConstants.ENABLE_ATTR))); + + FasterLookUpDataHolder dataHolder = FasterLookUpDataHolder.getInstance(); + + dataHolder.setEnableTopologySync(isEnable); + if (!isEnable) { + if (log.isWarnEnabled()) { + log.warn("Topology synchronization is disabled!"); + } + } + + if (isEnable) { + TopologyConfig topologyConfig = new TopologyConfig(); + // load properties + IaasProviderConfigParser.loadProperties(FILE_NAME, element, topologyConfig.getProperties()); + + dataHolder.setTopologyConfig(topologyConfig); + } + } + +} http://git-wip-us.apache.org/repos/asf/stratos/blob/8c359dc1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/config/parser/IaasProviderConfigParser.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/config/parser/IaasProviderConfigParser.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/config/parser/IaasProviderConfigParser.java new file mode 100644 index 0000000..91bb580 --- /dev/null +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/config/parser/IaasProviderConfigParser.java @@ -0,0 +1,306 @@ +/* + * 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.config.parser; + +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import javax.xml.namespace.QName; + +import org.apache.axiom.om.OMElement; +import org.apache.axiom.om.OMNode; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.stratos.cloud.controller.exception.MalformedConfigurationFileException; +import org.apache.stratos.cloud.controller.domain.IaasProvider; +import org.apache.stratos.cloud.controller.util.CloudControllerConstants; +import org.wso2.securevault.SecretResolver; +import org.wso2.securevault.SecretResolverFactory; + +/** + * Parse the iaas providers. + * + * + */ +public class IaasProviderConfigParser { + private static final Log log = LogFactory.getLog(IaasProviderConfigParser.class); + + public static IaasProvider getIaasProvider(final String fileName, final OMElement elt, final OMNode item, List<IaasProvider> iaases) { + + IaasProvider iaas = null; + + if (item.getType() == OMNode.ELEMENT_NODE) { + + OMElement iaasElt = (OMElement) item; + + if (iaases != null) { + // check whether this is a reference to a predefined IaaS. + for (IaasProvider iaasProvider : iaases) { + if (iaasProvider.getType() + .equals(iaasElt.getAttribute(new QName( + CloudControllerConstants.TYPE_ATTR)) + .getAttributeValue())) { + iaas = new IaasProvider(iaasProvider); + break; + } + } + } + + if (iaas == null) { + iaas = new IaasProvider(); + } + + if (iaas.getType() == null) { + iaas.setType(iaasElt.getAttribute(new QName(CloudControllerConstants.TYPE_ATTR)) + .getAttributeValue()); + } + + if ("".equals(iaas.getType())) { + String msg = + "'" + CloudControllerConstants.IAAS_PROVIDER_ELEMENT + "' element's '" + + CloudControllerConstants.TYPE_ATTR + + "' attribute should be specified!"; + + handleException(msg); + + } + + // this is not mandatory + String name = + (iaasElt.getAttribute(new QName(CloudControllerConstants.NAME_ATTR)) == null) + ? iaas.getName() + : iaasElt.getAttributeValue(new QName( + CloudControllerConstants.NAME_ATTR)); + + iaas.setName(name); + + String xpath = CloudControllerConstants.IAAS_PROVIDER_ELEMENT_XPATH; + + // load other elements + loadClassName(fileName, iaas, iaasElt); + loadProvider(fileName, iaas, iaasElt); + loadProperties(fileName, iaasElt, iaas.getProperties()); + loadTemplate(fileName, iaas, iaasElt); + loadIdentity(fileName, elt, iaas, iaasElt); + loadCredentials(fileName, elt, iaas, iaasElt, xpath); + } + + return iaas; + } + + private static void loadClassName(final String fileName, final IaasProvider iaas, final OMElement iaasElt) { + + Iterator<?> it = + iaasElt.getChildrenWithName(new QName( + CloudControllerConstants.CLASS_NAME_ELEMENT)); + + if (it.hasNext()) { + OMElement classNameElt = (OMElement) it.next(); + iaas.setClassName(classNameElt.getText()); + } + + if (it.hasNext()) { + log.warn(" file contains more than one " + + CloudControllerConstants.CLASS_NAME_ELEMENT + " elements!" + + " Elements other than the first will be neglected."); + } + + if (iaas.getClassName() == null) { + String msg = + "Essential '" + CloudControllerConstants.CLASS_NAME_ELEMENT + "' element " + + "has not specified in " + fileName; + handleException(msg); + } + + } + + private static void loadCredentials(final String fileName, final OMElement elt, final IaasProvider iaas, final OMElement iaasElt, + final String xpath) { + + Iterator<?> it = + iaasElt.getChildrenWithName(new QName( + CloudControllerConstants.CREDENTIAL_ELEMENT)); + + if (it.hasNext()) { + OMElement credentialElt = (OMElement) it.next(); + + // retrieve the value using secure vault + SecretResolver secretResolver = SecretResolverFactory.create(elt, false); + String alias = credentialElt.getAttributeValue(new QName( + CloudControllerConstants.ALIAS_NAMESPACE, + CloudControllerConstants.ALIAS_ATTRIBUTE, + CloudControllerConstants.ALIAS_ATTRIBUTE_PREFIX)); + + // retrieve the secured password + if (secretResolver != null && secretResolver.isInitialized() && + secretResolver.isTokenProtected(alias)) { + iaas.setCredential(secretResolver.resolve(alias)); + } + + // if we still cannot find a value, we try to assign the value which + // is specified + // in the element, if any + if (iaas.getCredential() == null) { + log.warn("Unable to find a value for " + CloudControllerConstants.CREDENTIAL_ELEMENT + + " element from Secure Vault." + + "Hence we will try to assign the plain text value (if specified)."); + iaas.setCredential(credentialElt.getText()); + } + } + + if (it.hasNext()) { + log.warn(fileName + " contains more than one " + + CloudControllerConstants.CREDENTIAL_ELEMENT + " elements!" + + " Elements other than the first will be neglected."); + } + + if (iaas.getCredential() == null) { + String msg = + "Essential '" + CloudControllerConstants.CREDENTIAL_ELEMENT + "' element" + + " has not specified in " + fileName; + handleException(msg); + } + + } + + + private static void loadIdentity(final String fileName, final OMElement elt, final IaasProvider iaas, final OMElement iaasElt) { + + Iterator<?> it = + iaasElt.getChildrenWithName(new QName(CloudControllerConstants.IDENTITY_ELEMENT)); + + if (it.hasNext()) { + OMElement identityElt = (OMElement) it.next(); + + // retrieve the value using secure vault + SecretResolver secretResolver = SecretResolverFactory.create(elt, false); + String alias = identityElt.getAttributeValue(new QName( + CloudControllerConstants.ALIAS_NAMESPACE, + CloudControllerConstants.ALIAS_ATTRIBUTE, + CloudControllerConstants.ALIAS_ATTRIBUTE_PREFIX)); + + // retrieve the secured password + if (secretResolver != null && secretResolver.isInitialized() && + secretResolver.isTokenProtected(alias)) { + iaas.setIdentity(secretResolver.resolve(alias)); + } + + // if we still cannot find a value, we try to assign the value which + // is specified + // in the element, if any + if (iaas.getIdentity() == null) { + log.warn("Unable to find a value for " + CloudControllerConstants.IDENTITY_ELEMENT + + " element from Secure Vault." + + "Hence we will try to assign the plain text value (if specified)."); + iaas.setIdentity(identityElt.getText()); + } + } + + if (it.hasNext()) { + log.warn(fileName + " contains more than one " + CloudControllerConstants.IDENTITY_ELEMENT + + " elements!" + " Elements other than the first will be neglected."); + } + + if (iaas.getIdentity() == null) { + String msg = + "Essential '" + CloudControllerConstants.IDENTITY_ELEMENT + "' element" + + " has not specified in " + fileName; + handleException(msg); + } + + } + + + + public static void loadProperties(final String fileName, final OMElement elt, final Map<String, String> propertyMap) { + + Iterator<?> it = + elt.getChildrenWithName(new QName(CloudControllerConstants.PROPERTY_ELEMENT)); + + while (it.hasNext()) { + OMElement prop = (OMElement) it.next(); + + if (prop.getAttribute(new QName(CloudControllerConstants.PROPERTY_NAME_ATTR)) == null || + prop.getAttribute(new QName(CloudControllerConstants.PROPERTY_VALUE_ATTR)) == null) { + + String msg = + "Property element's, name and value attributes should be specified " + + "in " + fileName; + + handleException(msg); + } + + propertyMap.put(prop.getAttribute(new QName(CloudControllerConstants.PROPERTY_NAME_ATTR)) + .getAttributeValue(), + prop.getAttribute(new QName(CloudControllerConstants.PROPERTY_VALUE_ATTR)) + .getAttributeValue()); + } + + } + + private static void loadProvider(final String fileName, final IaasProvider iaas, final OMElement iaasElt) { + + Iterator<?> it = + iaasElt.getChildrenWithName(new QName(CloudControllerConstants.PROVIDER_ELEMENT)); + + if (it.hasNext()) { + OMElement providerElt = (OMElement) it.next(); + iaas.setProvider(providerElt.getText()); + } + + if (it.hasNext()) { + log.warn(fileName + " contains more than one " + CloudControllerConstants.PROVIDER_ELEMENT + + " elements!" + " Elements other than the first will be neglected."); + } + + if (iaas.getProvider() == null) { + String msg = + "Essential '" + CloudControllerConstants.PROVIDER_ELEMENT + "' element " + + "has not specified in " + fileName; + handleException(msg); + } + + } + + + private static void loadTemplate(final String fileName, final IaasProvider iaas, final OMElement iaasElt) { + + Iterator<?> it = + iaasElt.getChildrenWithName(new QName(CloudControllerConstants.IMAGE_ID_ELEMENT)); + + if (it.hasNext()) { + OMElement imageElt = (OMElement) it.next(); + iaas.setImage(imageElt.getText()); + } + + if (it.hasNext()) { + log.warn(fileName + " contains more than one " + CloudControllerConstants.IMAGE_ID_ELEMENT + + " elements!" + " Elements other than the first will be neglected."); + } + + } + + + private static void handleException(final String msg) throws MalformedConfigurationFileException{ + log.error(msg); + throw new MalformedConfigurationFileException(msg); + } + +} http://git-wip-us.apache.org/repos/asf/stratos/blob/8c359dc1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/FasterLookUpDataHolder.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/FasterLookUpDataHolder.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/FasterLookUpDataHolder.java new file mode 100644 index 0000000..a4dd041 --- /dev/null +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/FasterLookUpDataHolder.java @@ -0,0 +1,479 @@ +/* + * 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.context; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.stratos.cloud.controller.domain.*; +import org.apache.stratos.cloud.controller.registry.RegistryManager; +import org.wso2.carbon.databridge.agent.thrift.AsyncDataPublisher; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledFuture; + +/** + * This object holds all runtime data and provides faster access. This is a Singleton class. + */ +public class FasterLookUpDataHolder implements Serializable{ + + private static final long serialVersionUID = -2662307358852779897L; + + private static final Log log = LogFactory.getLog(FasterLookUpDataHolder.class); + + private static volatile FasterLookUpDataHolder ctxt; + + /* We keep following maps in order to make the look up time, small. */ + + /** + * Key - cluster id + * Value - list of {@link MemberContext} + */ + private Map<String, List<MemberContext>> clusterIdToMemberContext = new ConcurrentHashMap<String, List<MemberContext>>(); + + + /** + * Key - member id + * Value - {@link MemberContext} + */ + private Map<String, MemberContext> memberIdToContext = new ConcurrentHashMap<String, MemberContext>(); + + /** + * Key - member id + * Value - ScheduledFuture task + */ + private transient Map<String, ScheduledFuture<?>> memberIdToScheduledTask = new ConcurrentHashMap<String, ScheduledFuture<?>>(); + + /** + * Key - Kubernetes cluster id + * Value - {@link org.apache.stratos.cloud.controller.domain.KubernetesClusterContext} + */ + private Map<String, KubernetesClusterContext> kubClusterIdToKubClusterContext = + new ConcurrentHashMap<String, KubernetesClusterContext>(); + + /** + * Key - cluster id + * Value - {@link org.apache.stratos.cloud.controller.domain.ClusterContext} + */ + private Map<String, ClusterContext> clusterIdToContext = new ConcurrentHashMap<String, ClusterContext>(); + + /** + * This works as a cache to hold already validated partitions against a cartridge type. + * Key - cartridge type + * Value - list of partition ids + */ + private Map<String, List<String>> cartridgeTypeToPartitionIds = new ConcurrentHashMap<String, List<String>>(); + + /** + * Thread pool used in this task to execute parallel tasks. + */ + private transient ExecutorService executor = Executors.newFixedThreadPool(20); + + /** + * List of registered {@link org.apache.stratos.cloud.controller.domain.Cartridge}s + */ + private List<Cartridge> cartridges; + + /** + * List of deployed service groups + */ + private List<ServiceGroup> serviceGroups; + + /** + * List of IaaS Providers. + */ + private List<IaasProvider> iaasProviders; + + + private String serializationDir; + private boolean enableBAMDataPublisher; + private transient DataPublisherConfig dataPubConfig; + private boolean enableTopologySync; + private transient TopologyConfig topologyConfig; + + private transient AsyncDataPublisher dataPublisher; + private String streamId; + private boolean isPublisherRunning; + private boolean isTopologySyncRunning; + + + public static FasterLookUpDataHolder getInstance() { + + if (ctxt == null) { + synchronized (FasterLookUpDataHolder.class) { + if (ctxt == null && RegistryManager.getInstance() != null) { + + Object obj = RegistryManager.getInstance().retrieve(); + if (obj != null) { + if (obj instanceof FasterLookUpDataHolder) { + ctxt = (FasterLookUpDataHolder) obj; + } + } + } + if(ctxt == null) { + ctxt = new FasterLookUpDataHolder(); + } + } + } + + return ctxt; + } + + private FasterLookUpDataHolder() { + + cartridges = new ArrayList<Cartridge>(); + serviceGroups = new ArrayList<ServiceGroup>(); + } + + public List<Cartridge> getCartridges() { + return cartridges; + } + + public void setCartridges(List<Cartridge> cartridges) { + this.cartridges = cartridges; + } + + public void setServiceGroups(List<ServiceGroup> serviceGroups) { + this.serviceGroups = serviceGroups; + } + + public List<ServiceGroup> getServiceGroups() { + return this.serviceGroups; + } + + + public Cartridge getCartridge(String cartridgeType) { + for (Cartridge cartridge : cartridges) { + if (cartridge.getType().equals(cartridgeType)) { + return cartridge; + } + } + + return null; + } + + public void addCartridge(Cartridge newCartridges) { + + cartridges.add(newCartridges); + } + + public void removeCartridges(List<Cartridge> cartridges) { + if (this.cartridges != null) { + this.cartridges.removeAll(cartridges); + } + + } + + public ServiceGroup getServiceGroup(String name) { + for (ServiceGroup serviceGroup : serviceGroups) { + if (serviceGroup.getName().equals(name)) { + return serviceGroup; + } + } + + return null; + } + + public void addServiceGroup(ServiceGroup newServiceGroup) { + this.serviceGroups.add(newServiceGroup); + } + + public void removeServiceGroup(List<ServiceGroup> serviceGroup) { + if (this.serviceGroups != null) { + this.serviceGroups.removeAll(serviceGroup); + } + } + + public IaasProvider getIaasProvider(String type) { + if(type == null) { + return null; + } + + for (IaasProvider iaasProvider : iaasProviders) { + if(type.equals(iaasProvider.getType())) { + return iaasProvider; + } + } + return null; + } + + public List<IaasProvider> getIaasProviders() { + return iaasProviders; + } + + public void setIaasProviders(List<IaasProvider> iaasProviders) { + this.iaasProviders = iaasProviders; + } + + public String getSerializationDir() { + return serializationDir; + } + + public void setSerializationDir(String serializationDir) { + this.serializationDir = serializationDir; + } + + public AsyncDataPublisher getDataPublisher() { + return dataPublisher; + } + + public void setDataPublisher(AsyncDataPublisher dataPublisher) { + this.dataPublisher = dataPublisher; + } + + public String getStreamId() { + return streamId; + } + + public void setStreamId(String streamId) { + this.streamId = streamId; + } + + public boolean getEnableBAMDataPublisher() { + return enableBAMDataPublisher; + } + + public void setEnableBAMDataPublisher(boolean enableBAMDataPublisher) { + this.enableBAMDataPublisher = enableBAMDataPublisher; + } + + public boolean isPublisherRunning() { + return isPublisherRunning; + } + + public void setPublisherRunning(boolean isPublisherRunning) { + this.isPublisherRunning = isPublisherRunning; + } + + public boolean getEnableTopologySync() { + return enableTopologySync; + } + + public void setEnableTopologySync(boolean enableTopologySync) { + this.enableTopologySync = enableTopologySync; + } + + public boolean isTopologySyncRunning() { + return isTopologySyncRunning; + } + + public void setTopologySyncRunning(boolean isTopologySyncRunning) { + this.isTopologySyncRunning = isTopologySyncRunning; + } + + public TopologyConfig getTopologyConfig() { + return topologyConfig; + } + + public void setTopologyConfig(TopologyConfig topologyConfig) { + this.topologyConfig = topologyConfig; + } + + public DataPublisherConfig getDataPubConfig() { + return dataPubConfig; + } + + public void setDataPubConfig(DataPublisherConfig dataPubConfig) { + this.dataPubConfig = dataPubConfig; + } + + public void addMemberContext(MemberContext ctxt) { + memberIdToContext.put(ctxt.getMemberId(), ctxt); + + List<MemberContext> ctxts; + + if((ctxts = clusterIdToMemberContext.get(ctxt.getClusterId())) == null) { + ctxts = new ArrayList<MemberContext>(); + } + if(ctxts.contains(ctxt)) { + ctxts.remove(ctxt); + } + ctxts.add(ctxt); + clusterIdToMemberContext.put(ctxt.getClusterId(), ctxts); + if(log.isDebugEnabled()) { + + log.debug("Added Member Context to the information model. "+ctxt); + } + } + + public void addScheduledFutureJob(String memberId, ScheduledFuture<?> job) { + memberIdToScheduledTask.put(memberId, job); + } + + public List<MemberContext> removeMemberContextsOfCluster(String clusterId) { + List<MemberContext> ctxts = clusterIdToMemberContext.remove(clusterId); + if(ctxts == null) { + return new ArrayList<MemberContext>(); + } + for (MemberContext memberContext : ctxts) { + String memberId = memberContext.getMemberId(); + memberIdToContext.remove(memberId); + stopTask(memberIdToScheduledTask.remove(memberId)); + } + if(log.isDebugEnabled()) { + + log.debug("Removed Member Context from the information model. "+ctxt); + } + return ctxts; + } + + public MemberContext removeMemberContext(String memberId, String clusterId) { + MemberContext returnedCtxt = memberIdToContext.remove(memberId); + List<MemberContext> ctxts = clusterIdToMemberContext.get(clusterId); + + if (ctxts != null) { + + List<MemberContext> newCtxts = new ArrayList<MemberContext>(ctxts); + + for (Iterator<MemberContext> iterator = newCtxts.iterator(); iterator.hasNext();) { + MemberContext memberContext = (MemberContext) iterator.next(); + if(memberId.equals(memberContext.getMemberId())) { + if(log.isDebugEnabled()) { + + log.debug("MemberContext [id]: "+memberId+" removed from information model."); + } + iterator.remove(); + } + } + + clusterIdToMemberContext.put(clusterId, newCtxts); + } + + stopTask(memberIdToScheduledTask.remove(memberId)); + + return returnedCtxt; + + } + + private void stopTask(ScheduledFuture<?> task) { + if (task != null) { + + task.cancel(true); + log.info("Scheduled Pod Activation Watcher task canceled."); + } + } + + public MemberContext getMemberContextOfMemberId(String memberId) { + return memberIdToContext.get(memberId); + } + + public List<MemberContext> getMemberContextsOfClusterId(String clusterId) { + return clusterIdToMemberContext.get(clusterId); + } + + public Map<String, List<MemberContext>> getClusterIdToMemberContext() { + return clusterIdToMemberContext; + } + + public void setClusterIdToMemberContext(Map<String, List<MemberContext>> clusterIdToMemberContext) { + this.clusterIdToMemberContext = clusterIdToMemberContext; + } + + public Map<String, MemberContext> getMemberIdToContext() { + return memberIdToContext; + } + + public void setMemberIdToContext(Map<String, MemberContext> memberIdToContext) { + this.memberIdToContext = memberIdToContext; + } + + public void addClusterContext(ClusterContext ctxt) { + clusterIdToContext.put(ctxt.getClusterId(), ctxt); + } + + public ClusterContext getClusterContext(String clusterId) { + return clusterIdToContext.get(clusterId); + } + + public ClusterContext removeClusterContext(String clusterId) { + return clusterIdToContext.remove(clusterId); + } + + public Map<String, ClusterContext> getClusterIdToContext() { + return clusterIdToContext; + } + + public void setClusterIdToContext(Map<String, ClusterContext> clusterIdToContext) { + this.clusterIdToContext = clusterIdToContext; + } + + public ExecutorService getExecutor() { + return executor; + } + + public void setExecutor(ExecutorService executor) { + this.executor = executor; + } + + public Map<String, List<String>> getCartridgeTypeToPartitionIds() { + return cartridgeTypeToPartitionIds; + } + + public void setCartridgeTypeToPartitionIds( + Map<String, List<String>> cartridgeTypeToPartitionIds) { + this.cartridgeTypeToPartitionIds = cartridgeTypeToPartitionIds; + } + + public void addToCartridgeTypeToPartitionIdMap(String cartridgeType, String partitionId) { + List<String> list = this.cartridgeTypeToPartitionIds.get(cartridgeType); + + if(list == null) { + list = new ArrayList<String>(); + } + + list.add(partitionId); + this.cartridgeTypeToPartitionIds.put(cartridgeType, list); + } + + public void removeFromCartridgeTypeToPartitionIds(String cartridgeType) { + this.cartridgeTypeToPartitionIds.remove(cartridgeType); + } + + public Map<String, KubernetesClusterContext> getKubClusterIdToKubClusterContext() { + return kubClusterIdToKubClusterContext; + } + + public KubernetesClusterContext getKubernetesClusterContext(String kubClusterId) { + return kubClusterIdToKubClusterContext.get(kubClusterId); + } + + public void addKubernetesClusterContext(KubernetesClusterContext ctxt) { + this.kubClusterIdToKubClusterContext.put(ctxt.getKubernetesClusterId(), ctxt); + } + + public void setKubClusterIdToKubClusterContext( + Map<String, KubernetesClusterContext> kubClusterIdToKubClusterContext) { + this.kubClusterIdToKubClusterContext = kubClusterIdToKubClusterContext; + } + + public Map<String, ScheduledFuture<?>> getMemberIdToScheduledTask() { + return memberIdToScheduledTask; + } + + public void setMemberIdToScheduledTask(Map<String, ScheduledFuture<?>> memberIdToScheduledTask) { + this.memberIdToScheduledTask = memberIdToScheduledTask; + } + +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/stratos/blob/8c359dc1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/deployers/CloudControllerDeployer.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/deployers/CloudControllerDeployer.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/deployers/CloudControllerDeployer.java index 0b60e97..3fe4ded 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/deployers/CloudControllerDeployer.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/deployers/CloudControllerDeployer.java @@ -25,10 +25,10 @@ import org.apache.axis2.deployment.DeploymentException; import org.apache.axis2.deployment.repository.util.DeploymentFileData; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.stratos.cloud.controller.axiom.AxiomXpathParserUtil; -import org.apache.stratos.cloud.controller.axiom.parser.CloudControllerConfigParser; -import org.apache.stratos.cloud.controller.pojo.IaasProvider; -import org.apache.stratos.cloud.controller.runtime.FasterLookUpDataHolder; +import org.apache.stratos.cloud.controller.util.AxiomXpathParserUtil; +import org.apache.stratos.cloud.controller.config.parser.CloudControllerConfigParser; +import org.apache.stratos.cloud.controller.domain.IaasProvider; +import org.apache.stratos.cloud.controller.context.FasterLookUpDataHolder; import java.util.ArrayList; import java.util.List;
