You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by im...@apache.org on 2014/12/24 18:36:27 UTC
[04/12] stratos git commit: Renaming iaas classes and moving them to
new packages
http://git-wip-us.apache.org/repos/asf/stratos/blob/e195f2f1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaas.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaas.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaas.java
new file mode 100644
index 0000000..a55048c
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaas.java
@@ -0,0 +1,625 @@
+/*
+ * 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.iaases.kubernetes;
+
+import org.apache.commons.lang.NotImplementedException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.cloud.controller.concurrent.ScheduledThreadExecutor;
+import org.apache.stratos.cloud.controller.context.CloudControllerContext;
+import org.apache.stratos.cloud.controller.domain.*;
+import org.apache.stratos.cloud.controller.domain.Cartridge;
+import org.apache.stratos.cloud.controller.domain.kubernetes.KubernetesClusterContext;
+import org.apache.stratos.cloud.controller.exception.*;
+import org.apache.stratos.cloud.controller.iaases.Iaas;
+import org.apache.stratos.cloud.controller.iaases.PartitionValidator;
+import org.apache.stratos.cloud.controller.services.impl.CloudControllerServiceUtil;
+import org.apache.stratos.cloud.controller.util.CloudControllerUtil;
+import org.apache.stratos.cloud.controller.util.PodActivationWatcher;
+import org.apache.stratos.common.beans.NameValuePair;
+import org.apache.stratos.common.constants.StratosConstants;
+import org.apache.stratos.cloud.controller.domain.kubernetes.KubernetesCluster;
+import org.apache.stratos.cloud.controller.domain.kubernetes.PortRange;
+import org.apache.stratos.kubernetes.client.KubernetesApiClient;
+import org.apache.stratos.kubernetes.client.exceptions.KubernetesClientException;
+import org.apache.stratos.kubernetes.client.model.*;
+import org.apache.stratos.kubernetes.client.model.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.locks.Lock;
+
+/**
+ * Kubernetes IaaS implementation.
+ */
+public class KubernetesIaas extends Iaas {
+
+ private static final Log log = LogFactory.getLog(KubernetesIaas.class);
+
+ private static final long POD_CREATION_TIMEOUT = 120000; // 2 min
+ private static final String PAYLOAD_PARAMETER_SEPARATOR = ",";
+ private static final String PAYLOAD_PARAMETER_NAME_VALUE_SEPARATOR = "=";
+
+ private PartitionValidator partitionValidator;
+ private List<NameValuePair> payload;
+
+ public KubernetesIaas(IaasProvider iaasProvider) {
+ super(iaasProvider);
+ partitionValidator = new KubernetesPartitionValidator();
+ payload = new ArrayList<NameValuePair>();
+ }
+
+ @Override
+ public void initialize() {
+ }
+
+ /**
+ * Set dynamic payload which needs to be passed to the containers as environment variables.
+ * @param payloadByteArray
+ */
+ @Override
+ public void setDynamicPayload(byte[] payloadByteArray) {
+ // Clear existing payload parameters
+ payload.clear();
+
+ if(payloadByteArray != null) {
+ String payloadString = new String(payloadByteArray);
+ String[] parameterArray = payloadString.split(PAYLOAD_PARAMETER_SEPARATOR);
+ if(parameterArray != null) {
+ for(String parameter : parameterArray) {
+ if(parameter != null) {
+ String[] nameValueArray = parameter.split(PAYLOAD_PARAMETER_NAME_VALUE_SEPARATOR);
+ if ((nameValueArray != null) && (nameValueArray.length == 2)) {
+ NameValuePair nameValuePair = new NameValuePair(nameValueArray[0], nameValueArray[1]);
+ payload.add(nameValuePair);
+ }
+ }
+ }
+ if(log.isDebugEnabled()) {
+ log.debug("Dynamic payload is set: " + payload.toString());
+ }
+ }
+ }
+ }
+
+ @Override
+ public MemberContext startInstance(MemberContext memberContext) throws CartridgeNotFoundException {
+ return startContainer(memberContext);
+ }
+
+ @Override
+ public PartitionValidator getPartitionValidator() {
+ return partitionValidator;
+ }
+
+ @Override
+ public void terminateInstance(MemberContext memberContext) throws InvalidCartridgeTypeException,
+ InvalidMemberException, MemberTerminationFailedException {
+ terminateContainer(memberContext.getMemberId());
+ }
+
+ /**
+ * Starts a container via kubernetes for the given member context.
+ * @param memberContext
+ * @return
+ * @throws CartridgeNotFoundException
+ */
+ public MemberContext startContainer(MemberContext memberContext)
+ throws CartridgeNotFoundException {
+ Lock lock = null;
+ try {
+ lock = CloudControllerContext.getInstance().acquireMemberContextWriteLock();
+
+ handleNullObject(memberContext, "Could not start container, member context is null");
+ if (log.isInfoEnabled()) {
+ log.info(String.format("Starting container: [cartridge-type] %s", memberContext.getCartridgeType()));
+ }
+
+ // Validate cluster id
+ String clusterId = memberContext.getClusterId();
+ String memberId = memberContext.getMemberId();
+ handleNullObject(clusterId, "Could not start container, cluster id is null in member context");
+
+ // Validate cluster context
+ ClusterContext clusterContext = CloudControllerContext.getInstance().getClusterContext(clusterId);
+ handleNullObject(clusterContext, "Could not start container, cluster context not found: [cluster-id] "
+ + clusterId + " [member-id] " + memberId);
+
+ // Validate partition
+ Partition partition = memberContext.getPartition();
+ handleNullObject(partition, "Could not start container, partition not found in member context: " +
+ "[cluster-id] " + clusterId + " [member-id] " + memberId);
+
+ // Validate cartridge
+ String cartridgeType = clusterContext.getCartridgeType();
+ Cartridge cartridge = CloudControllerContext.getInstance().getCartridge(cartridgeType);
+ if (cartridge == null) {
+ String msg = "Could not start container, cartridge not found: [cartridge-type] " + cartridgeType + " " +
+ "[cluster-id] " + clusterId + " [member-id] " + memberId;
+ log.error(msg);
+ throw new CartridgeNotFoundException(msg);
+ }
+
+ try {
+ String kubernetesClusterId = partition.getKubernetesClusterId();
+ KubernetesCluster kubernetesCluster = CloudControllerContext.getInstance().
+ getKubernetesCluster(kubernetesClusterId);
+ handleNullObject(kubernetesCluster, "Could not start container, kubernetes cluster not found: " +
+ "[kubernetes-cluster-id] " + kubernetesClusterId + " [cluster-id] " + clusterId +
+ " [member-id] " + memberId);
+
+ // Prepare kubernetes context
+ String kubernetesMasterIp = kubernetesCluster.getKubernetesMaster().getHostIpAddress();
+ PortRange kubernetesPortRange = kubernetesCluster.getPortRange();
+ String kubernetesMasterPort = CloudControllerUtil.getProperty(
+ kubernetesCluster.getKubernetesMaster().getProperties(), StratosConstants.KUBERNETES_MASTER_PORT,
+ StratosConstants.KUBERNETES_MASTER_DEFAULT_PORT);
+
+ KubernetesClusterContext kubClusterContext = getKubernetesClusterContext(kubernetesClusterId,
+ kubernetesMasterIp, kubernetesMasterPort, kubernetesPortRange.getUpper(),
+ kubernetesPortRange.getLower());
+
+ // Get kubernetes API
+ KubernetesApiClient kubernetesApi = kubClusterContext.getKubApi();
+
+ // Create replication controller
+ createReplicationController(clusterContext, memberContext, kubernetesApi);
+
+ // Create proxy services for port mappings
+ List<Service> services = createProxyServices(clusterContext, kubClusterContext, kubernetesApi);
+ clusterContext.setKubernetesServices(services);
+ CloudControllerContext.getInstance().updateClusterContext(clusterContext);
+
+ // Wait for pod to be created
+ List<Pod> pods = waitForPodToBeCreated(memberContext, kubernetesApi);
+ if (pods.size() != 1) {
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Pod did not create within %d sec, hence deleting the service: " +
+ "[cluster-id] %s [member-id] %s", ((int)POD_CREATION_TIMEOUT/1000), clusterId, memberId));
+ }
+ try {
+ terminateContainers(clusterId);
+ } catch (Exception e) {
+ String message = "Could not terminate containers which were partially created";
+ log.error(message, e);
+ throw new RuntimeException(message, e);
+ }
+ }
+ Pod pod = pods.get(0);
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Pod created: [cluster-id] %s [member-id] %s [pod-id] %s",
+ clusterId, memberId, pod.getId()));
+ }
+
+ // Create member context
+ MemberContext newMemberContext = createNewMemberContext(memberContext, pod);
+ CloudControllerContext.getInstance().addMemberContext(newMemberContext);
+
+ // wait till pod status turns to running and send member spawned.
+ ScheduledThreadExecutor exec = ScheduledThreadExecutor.getInstance();
+ if (log.isDebugEnabled()) {
+ log.debug("Cloud Controller is starting the instance start up thread.");
+ }
+ CloudControllerContext.getInstance().addScheduledFutureJob(newMemberContext.getMemberId(),
+ exec.schedule(new PodActivationWatcher(pod.getId(), newMemberContext, kubernetesApi), 5000));
+
+ // persist in registry
+ CloudControllerContext.getInstance().persist();
+ log.info("Container started successfully: [cluster-id] " + clusterId + " [member-id] " +
+ memberContext.getMemberId());
+
+ return newMemberContext;
+ } catch (Exception e) {
+ String msg = String.format("Could not start container: [cartridge-type] %s [member-id] %s",
+ memberContext.getCartridgeType(), memberContext.getMemberId());
+ log.error(msg, e);
+ throw new IllegalStateException(msg, e);
+ }
+ } finally {
+ if (lock != null) {
+ CloudControllerContext.getInstance().releaseWriteLock(lock);
+ }
+ }
+ }
+
+ private MemberContext createNewMemberContext(MemberContext memberContext, Pod pod) {
+ MemberContext newMemberContext = new MemberContext();
+ newMemberContext.setCartridgeType(memberContext.getCartridgeType());
+ newMemberContext.setClusterId(memberContext.getClusterId());
+ newMemberContext.setClusterInstanceId(memberContext.getClusterInstanceId());
+ newMemberContext.setMemberId(memberContext.getMemberId());
+ newMemberContext.setNetworkPartitionId(memberContext.getNetworkPartitionId());
+ newMemberContext.setPartition(memberContext.getPartition());
+ newMemberContext.setInstanceId(pod.getId());
+ newMemberContext.setDefaultPrivateIP(pod.getCurrentState().getHostIP());
+ newMemberContext.setPrivateIPs(new String[]{pod.getCurrentState().getHostIP()});
+ newMemberContext.setDefaultPublicIP(pod.getCurrentState().getHostIP());
+ newMemberContext.setPublicIPs(new String[]{pod.getCurrentState().getHostIP()});
+ newMemberContext.setInitTime(memberContext.getInitTime());
+ newMemberContext.setProperties(memberContext.getProperties());
+ return newMemberContext;
+ }
+
+ private List<Pod> waitForPodToBeCreated(MemberContext memberContext, KubernetesApiClient kubernetesApi) throws KubernetesClientException, InterruptedException {
+ Labels labels = new Labels();
+ labels.setName(memberContext.getClusterId());
+ List<Pod> podList = new ArrayList<Pod>();
+ long startTime = System.currentTimeMillis();
+ while (podList.size() == 0) {
+ List<Pod> pods = kubernetesApi.queryPods(new Labels[]{labels});
+ if((pods != null) && (pods.size() > 0)){
+ for(Pod pod : pods) {
+ if(pod != null) {
+ podList.add(pod);
+ }
+ }
+ }
+ if (log.isDebugEnabled()) {
+ log.debug("Member pod: [member-id] " + memberContext.getMemberId() + " [count] " + podList.size());
+ }
+ if ((System.currentTimeMillis() - startTime) > POD_CREATION_TIMEOUT) {
+ break;
+ }
+ Thread.sleep(5000);
+ }
+ return podList;
+ }
+
+ /**
+ * Create new replication controller for the cluster and generate environment variables using member context.
+ * @param memberContext
+ * @param kubernetesApi
+ * @throws KubernetesClientException
+ */
+ private void createReplicationController(ClusterContext clusterContext, MemberContext memberContext,
+ KubernetesApiClient kubernetesApi)
+ throws KubernetesClientException {
+ if (log.isInfoEnabled()) {
+ log.info(String.format("Creating replication controller: [cartridge-type] %s [member-id] %s",
+ memberContext.getCartridgeType(), memberContext.getClusterId()));
+ }
+
+ Partition partition = memberContext.getPartition();
+ if (partition == null) {
+ String message = "Partition not found in member context: [member-id] " + memberContext.getMemberId();
+ log.error(message);
+ throw new RuntimeException(message);
+ }
+
+ Cartridge cartridge = CloudControllerContext.getInstance().getCartridge(memberContext.getCartridgeType());
+ if (cartridge == null) {
+ String message = "Could not find cartridge: [cartridge-type] " + memberContext.getCartridgeType();
+ log.error(message);
+ throw new RuntimeException(message);
+ }
+
+ IaasProvider iaasProvider = cartridge.getIaasProviderOfPartition(partition.getId());
+ if (iaasProvider == null) {
+ String message = "Could not find iaas provider: [partition-id] " + partition.getId();
+ log.error(message);
+ throw new RuntimeException(message);
+ }
+
+ // Add dynamic payload to the member context
+ memberContext.setDynamicPayload(payload);
+
+ // Create replication controller
+ String replicationControllerId = memberContext.getMemberId();
+ String replicationControllerName = memberContext.getMemberId();
+ String dockerImage = iaasProvider.getImage();
+ List<Integer> containerPorts = KubernetesIaasUtil.prepareCartridgePorts(cartridge);
+ EnvironmentVariable[] environmentVariables = KubernetesIaasUtil.prepareEnvironmentVariables(
+ clusterContext, memberContext);
+ int replicas = 1;
+
+ kubernetesApi.createReplicationController(replicationControllerId, replicationControllerName,
+ dockerImage, containerPorts, environmentVariables, replicas);
+ if (log.isInfoEnabled()) {
+ log.info(String.format("Replication controller created successfully: [cartridge-type] %s [member-id] %s",
+ memberContext.getCartridgeType(), memberContext.getClusterId()));
+ }
+ }
+
+ /**
+ * Create proxy services for the cluster and add them to the cluster context.
+ * @param clusterContext
+ * @param kubernetesClusterContext
+ * @param kubernetesApi
+ * @return
+ * @throws KubernetesClientException
+ */
+ private List<Service> createProxyServices(ClusterContext clusterContext,
+ KubernetesClusterContext kubernetesClusterContext,
+ KubernetesApiClient kubernetesApi) throws KubernetesClientException {
+ List<Service> services = new ArrayList<Service>();
+
+ String clusterId = clusterContext.getClusterId();
+ Cartridge cartridge = CloudControllerContext.getInstance().getCartridge(clusterContext.getCartridgeType());
+ if(cartridge == null) {
+ String message = "Could not create kubernetes services, cartridge not found: [cartridge-type] " +
+ clusterContext.getCartridgeType();
+ log.error(message);
+ throw new RuntimeException(message);
+ }
+
+ List<PortMapping> portMappings = cartridge.getPortMappings();
+ for(PortMapping portMapping : portMappings) {
+ String serviceId = KubernetesIaasUtil.prepareKubernetesServiceId(clusterId, portMapping);
+ int nextServicePort = kubernetesClusterContext.getNextServicePort();
+ if(nextServicePort == -1) {
+ throw new RuntimeException(String.format("Could not generate service port: [cluster-id] %s ",
+ clusterContext.getClusterId()));
+ }
+
+ if (log.isInfoEnabled()) {
+ log.info(String.format("Creating kubernetes service: [cluster-id] %s [service-id] %s " +
+ "[protocol] %s [service-port] %d [container-port] %s [proxy-port] %s", clusterId,
+ serviceId, portMapping.getProtocol(), nextServicePort, portMapping.getPort(),
+ portMapping.getProxyPort()));
+ }
+
+ String serviceName = serviceId;
+ int servicePort = nextServicePort;
+ int containerPort = Integer.parseInt(portMapping.getPort());
+ String publicIp = kubernetesClusterContext.getMasterIp();
+
+ kubernetesApi.createService(serviceId, serviceName, servicePort, containerPort, publicIp);
+
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException ignore) {
+ }
+
+ Service service = kubernetesApi.getService(serviceId);
+ services.add(service);
+
+ if (log.isInfoEnabled()) {
+ log.info(String.format("Kubernetes service successfully created: [cluster-id] %s [service-id] %s " +
+ "[protocol] %s [service-port] %d [container-port] %s [proxy-port] %s", clusterId,
+ service.getId(), portMapping.getProtocol(), service.getPort(), portMapping.getPort(),
+ portMapping.getProxyPort()));
+ }
+ }
+ return services;
+ }
+
+ /**
+ * Terminate all the containers belong to a cluster by cluster id.
+ * @param clusterId
+ * @return
+ * @throws InvalidClusterException
+ */
+ public MemberContext[] terminateContainers(String clusterId)
+ throws InvalidClusterException {
+ Lock lock = null;
+ try {
+ lock = CloudControllerContext.getInstance().acquireMemberContextWriteLock();
+
+ ClusterContext clusterContext = CloudControllerContext.getInstance().getClusterContext(clusterId);
+ handleNullObject(clusterContext, "Could not terminate containers, cluster not found: [cluster-id] " + clusterId);
+
+ String kubernetesClusterId = CloudControllerUtil.getProperty(clusterContext.getProperties(),
+ StratosConstants.KUBERNETES_CLUSTER_ID);
+ handleNullObject(kubernetesClusterId, "Could not terminate containers, kubernetes cluster id not found: " +
+ "[cluster-id] " + clusterId);
+
+ KubernetesClusterContext kubClusterContext = CloudControllerContext.getInstance().getKubernetesClusterContext(kubernetesClusterId);
+ handleNullObject(kubClusterContext, "Could not terminate containers, kubernetes cluster not found: " +
+ "[kubernetes-cluster-id] " + kubernetesClusterId);
+
+ KubernetesApiClient kubApi = kubClusterContext.getKubApi();
+
+ // Remove the services
+ List<Service> services = clusterContext.getKubernetesServices();
+ if (services != null) {
+ for (Service service : services) {
+ try {
+ kubApi.deleteService(service.getId());
+ int allocatedPort = service.getPort();
+ kubClusterContext.deallocatePort(allocatedPort);
+ } catch (KubernetesClientException e) {
+ log.error("Could not remove kubernetes service: [cluster-id] " + clusterId, e);
+ }
+ }
+ }
+
+ List<MemberContext> memberContextsRemoved = new ArrayList<MemberContext>();
+ List<MemberContext> memberContexts = CloudControllerContext.getInstance().getMemberContextsOfClusterId(clusterId);
+ for(MemberContext memberContext : memberContexts) {
+ try {
+ MemberContext memberContextRemoved = terminateContainer(memberContext.getMemberId());
+ memberContextsRemoved.add(memberContextRemoved);
+ } catch (MemberTerminationFailedException e) {
+ String message = "Could not terminate container: [member-id] " + memberContext.getMemberId();
+ log.error(message);
+ }
+ }
+
+ // persist
+ CloudControllerContext.getInstance().persist();
+ return memberContextsRemoved.toArray(new MemberContext[memberContextsRemoved.size()]);
+ } finally {
+ if (lock != null) {
+ CloudControllerContext.getInstance().releaseWriteLock(lock);
+ }
+ }
+ }
+
+ /**
+ * Terminate a container by member id
+ * @param memberId
+ * @return
+ * @throws MemberTerminationFailedException
+ */
+ public MemberContext terminateContainer(String memberId) throws MemberTerminationFailedException {
+ Lock lock = null;
+ try {
+ lock = CloudControllerContext.getInstance().acquireMemberContextWriteLock();
+ handleNullObject(memberId, "Could not terminate container, member id is null");
+
+ MemberContext memberContext = CloudControllerContext.getInstance().getMemberContextOfMemberId(memberId);
+ handleNullObject(memberContext, "Could not terminate container, member context not found: [member-id] " + memberId);
+
+ String clusterId = memberContext.getClusterId();
+ handleNullObject(clusterId, "Could not terminate container, cluster id is null: [member-id] " + memberId);
+
+ ClusterContext clusterContext = CloudControllerContext.getInstance().getClusterContext(clusterId);
+ handleNullObject(clusterContext, String.format("Could not terminate container, cluster context not found: " +
+ "[cluster-id] %s [member-id] %s", clusterId, memberId));
+
+ String kubernetesClusterId = CloudControllerUtil.getProperty(clusterContext.getProperties(),
+ StratosConstants.KUBERNETES_CLUSTER_ID);
+ handleNullObject(kubernetesClusterId, String.format("Could not terminate container, kubernetes cluster " +
+ "context id is null: [cluster-id] %s [member-id] %s", clusterId, memberId));
+
+ KubernetesClusterContext kubernetesClusterContext = CloudControllerContext.getInstance().getKubernetesClusterContext(kubernetesClusterId);
+ handleNullObject(kubernetesClusterContext, String.format("Could not terminate container, kubernetes cluster " +
+ "context not found: [cluster-id] %s [member-id] %s", clusterId, memberId));
+ KubernetesApiClient kubApi = kubernetesClusterContext.getKubApi();
+
+ // Remove the pod forcefully
+ try {
+ Labels l = new Labels();
+ l.setName(memberId);
+ // execute the label query
+ List<Pod> pods = kubApi.queryPods(new Labels[]{l});
+ for (Pod pod : pods) {
+ try {
+ // delete pods forcefully
+ kubApi.deletePod(pod.getId());
+ } catch (KubernetesClientException ignore) {
+ // we can't do nothing here
+ log.warn(String.format("Could not delete pod: [pod-id] %s", pod.getId()));
+ }
+ }
+ } catch (KubernetesClientException e) {
+ // we're not going to throw this error, but proceed with other deletions
+ log.error("Could not delete pods of cluster: [cluster-id] " + clusterId, e);
+ }
+
+ // Remove the replication controller
+ try {
+ kubApi.deleteReplicationController(memberContext.getMemberId());
+ MemberContext memberToBeRemoved = CloudControllerContext.getInstance().getMemberContextOfMemberId(memberId);
+ CloudControllerServiceUtil.executeMemberTerminationPostProcess(memberToBeRemoved);
+ return memberToBeRemoved;
+ } catch (KubernetesClientException e) {
+ String msg = String.format("Failed to terminate member: [cluster-id] %s [member-id] %s", clusterId, memberId);
+ log.error(msg, e);
+ throw new MemberTerminationFailedException(msg, e);
+ }
+ } finally {
+ if (lock != null) {
+ CloudControllerContext.getInstance().releaseWriteLock(lock);
+ }
+ }
+ }
+
+ /**
+ * Get kubernetes cluster context
+ * @param kubernetesClusterId
+ * @param kubernetesMasterIp
+ * @param kubernetesMasterPort
+ * @param upperPort
+ * @param lowerPort
+ * @return
+ */
+ private KubernetesClusterContext getKubernetesClusterContext(String kubernetesClusterId, String kubernetesMasterIp,
+ String kubernetesMasterPort, int upperPort, int lowerPort) {
+
+ KubernetesClusterContext kubernetesClusterContext = CloudControllerContext.getInstance().
+ getKubernetesClusterContext(kubernetesClusterId);
+ if (kubernetesClusterContext != null) {
+ return kubernetesClusterContext;
+ }
+
+ kubernetesClusterContext = new KubernetesClusterContext(kubernetesClusterId, kubernetesMasterIp,
+ kubernetesMasterPort, lowerPort, upperPort);
+ CloudControllerContext.getInstance().addKubernetesClusterContext(kubernetesClusterContext);
+ return kubernetesClusterContext;
+ }
+
+ private String readProperty(String property, org.apache.stratos.common.Properties properties, String object) {
+ String propVal = CloudControllerUtil.getProperty(properties, property);
+ handleNullObject(propVal, "Property validation failed. Could not find property: '" + property + " in " + object);
+ return propVal;
+
+ }
+
+ private void handleNullObject(Object obj, String errorMsg) {
+ if (obj == null) {
+ log.error(errorMsg);
+ throw new IllegalArgumentException(errorMsg);
+ }
+ }
+
+ @Override
+ public void releaseAddress(String ip) {
+
+ }
+
+ @Override
+ public boolean isValidRegion(String region) throws InvalidRegionException {
+ // No regions in kubernetes cluster
+ return true;
+ }
+
+ @Override
+ public boolean isValidZone(String region, String zone) throws InvalidZoneException, InvalidRegionException {
+ // No zones in kubernetes cluster
+ return true;
+ }
+
+ @Override
+ public boolean isValidHost(String zone, String host) throws InvalidHostException {
+ // No zones in kubernetes cluster
+ return true;
+ }
+
+ @Override
+ public String createVolume(int sizeGB, String snapshotId) {
+ throw new NotImplementedException();
+ }
+
+ @Override
+ public String attachVolume(String instanceId, String volumeId, String deviceName) {
+ throw new NotImplementedException();
+ }
+
+ @Override
+ public void detachVolume(String instanceId, String volumeId) {
+ throw new NotImplementedException();
+ }
+
+ @Override
+ public void deleteVolume(String volumeId) {
+ throw new NotImplementedException();
+ }
+
+ @Override
+ public String getIaasDevice(String device) {
+ throw new NotImplementedException();
+ }
+
+ @Override
+ public void allocateIpAddress(String clusterId, MemberContext memberContext, Partition partition) {
+
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/e195f2f1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaasUtil.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaasUtil.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaasUtil.java
new file mode 100644
index 0000000..6d2ad4f
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaasUtil.java
@@ -0,0 +1,134 @@
+/*
+ * 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.iaases.kubernetes;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.cloud.controller.domain.Cartridge;
+import org.apache.stratos.cloud.controller.domain.ClusterContext;
+import org.apache.stratos.cloud.controller.domain.MemberContext;
+import org.apache.stratos.cloud.controller.domain.PortMapping;
+import org.apache.stratos.cloud.controller.util.CloudControllerUtil;
+import org.apache.stratos.common.Properties;
+import org.apache.stratos.common.Property;
+import org.apache.stratos.common.beans.NameValuePair;
+import org.apache.stratos.common.constants.StratosConstants;
+import org.apache.stratos.kubernetes.client.model.EnvironmentVariable;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Kubernetes IaaS utility methods.
+ */
+public class KubernetesIaasUtil {
+
+ private static final Log log = LogFactory.getLog(KubernetesIaas.class);
+
+ /**
+ * Prepare and returns the list of ports defined in the given cartridge.
+ * @param cartridge
+ * @return
+ */
+ public static List<Integer> prepareCartridgePorts(Cartridge cartridge) {
+ List<Integer> portList = new ArrayList<Integer>();
+ for (PortMapping portMapping : cartridge.getPortMappings()) {
+ portList.add(Integer.valueOf(portMapping.getPort()));
+ }
+ return portList;
+ }
+
+ /**
+ * Prepare and returns kubernetes service id using clusterId, port protocol and port.
+ * @param portMapping
+ * @return
+ */
+ public static String prepareKubernetesServiceId(String clusterId, PortMapping portMapping) {
+ String serviceId = String.format("%s-%s-%s", clusterId, portMapping.getProtocol(), portMapping.getPort());
+ if(serviceId.contains(".")) {
+ serviceId = serviceId.replace(".", "-");
+ }
+ return serviceId;
+ }
+
+ /**
+ * Prepare and returns environment variables for the given member.
+ * @param clusterContext
+ * @param memberContext
+ * @return
+ */
+ public static EnvironmentVariable[] prepareEnvironmentVariables(ClusterContext clusterContext,
+ MemberContext memberContext) {
+
+ String kubernetesClusterId = CloudControllerUtil.getProperty(clusterContext.getProperties(),
+ StratosConstants.KUBERNETES_CLUSTER_ID);
+
+ List<EnvironmentVariable> environmentVariables = new ArrayList<EnvironmentVariable>();
+
+ // Set dynamic payload
+ List<NameValuePair> payload = memberContext.getDynamicPayload();
+ if (payload != null) {
+ for (NameValuePair parameter : payload) {
+ addToEnvironmentVariables(environmentVariables, parameter.getName(), parameter.getValue());
+ }
+ }
+
+ // Set member properties
+ Properties properties = memberContext.getProperties();
+ if (properties != null) {
+ for (Property property : properties.getProperties()) {
+ addToEnvironmentVariables(environmentVariables, property.getName(),
+ property.getValue());
+ }
+ }
+
+ // Set kubernetes cluster id
+ addToEnvironmentVariables(environmentVariables, StratosConstants.KUBERNETES_CLUSTER_ID,
+ kubernetesClusterId);
+
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Environment variables: [cluster-id] %s [member-id] %s [variables] %s",
+ memberContext.getClusterId(), memberContext.getMemberId(), environmentVariables.toString()));
+ }
+
+ EnvironmentVariable[] array = new EnvironmentVariable[environmentVariables.size()];
+ return environmentVariables.toArray(array);
+ }
+
+ private static void addToEnvironment(List<EnvironmentVariable> envVars, String payload) {
+ if (payload != null) {
+ String[] entries = payload.split(",");
+ for (String entry : entries) {
+ String[] var = entry.split("=");
+ if (var.length != 2) {
+ continue;
+ }
+ addToEnvironmentVariables(envVars, var[0], var[1]);
+ }
+ }
+ }
+
+ private static void addToEnvironmentVariables(List<EnvironmentVariable> envVars, String name, String value) {
+ EnvironmentVariable var = new EnvironmentVariable();
+ var.setName(name);
+ var.setValue(value);
+ envVars.add(var);
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/e195f2f1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesPartitionValidator.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesPartitionValidator.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesPartitionValidator.java
new file mode 100644
index 0000000..0c79309
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesPartitionValidator.java
@@ -0,0 +1,73 @@
+/*
+ * 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.iaases.kubernetes;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.cloud.controller.context.CloudControllerContext;
+import org.apache.stratos.cloud.controller.domain.IaasProvider;
+import org.apache.stratos.cloud.controller.domain.Partition;
+import org.apache.stratos.cloud.controller.exception.InvalidPartitionException;
+import org.apache.stratos.cloud.controller.exception.NonExistingKubernetesClusterException;
+import org.apache.stratos.cloud.controller.iaases.PartitionValidator;
+
+import java.util.Properties;
+
+/**
+ * Kubernetes partition validator
+ */
+public class KubernetesPartitionValidator implements PartitionValidator {
+
+ private static final Log log = LogFactory.getLog(KubernetesPartitionValidator.class);
+
+ private IaasProvider iaasProvider;
+
+ @Override
+ public void setIaasProvider(IaasProvider iaasProvider) {
+ this.iaasProvider = iaasProvider;
+ }
+
+ /**
+ * Validate the given properties for its existent in this partition.
+ *
+ * @param partition partition.
+ * @param properties set of properties to be validated.
+ * @return cloned and modified {@link IaasProvider} which maps to the given partition.
+ * @throws InvalidPartitionException if at least one property is evaluated to be invalid.
+ */
+ public IaasProvider validate(Partition partition, Properties properties) throws InvalidPartitionException {
+
+ String kubernetesClusterId = partition.getKubernetesClusterId();
+ if (StringUtils.isBlank(kubernetesClusterId)) {
+ String message = "Kubernetes cluster id not found in partition: [partition-id] " + partition.getId();
+ log.error(message);
+ throw new InvalidPartitionException(message);
+ }
+
+ try {
+ CloudControllerContext.getInstance().getKubernetesCluster(kubernetesClusterId);
+ return iaasProvider;
+ } catch (NonExistingKubernetesClusterException e) {
+ String message = "Kubernetes partition is not valid: [partition-id] " + partition.getId();
+ log.error(message, e);
+ throw new InvalidPartitionException(message, e);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/e195f2f1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockAutoscalingFactor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockAutoscalingFactor.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockAutoscalingFactor.java
deleted file mode 100644
index aac0f2d..0000000
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockAutoscalingFactor.java
+++ /dev/null
@@ -1,27 +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.iaases.mock;
-
-/**
- * Mock autoscaling factor enumeration
- */
-public enum MockAutoscalingFactor {
- MemoryConsumption, LoadAverage, RequestInFlight
-}
http://git-wip-us.apache.org/repos/asf/stratos/blob/e195f2f1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockConstants.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockConstants.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockConstants.java
deleted file mode 100644
index cdd3490..0000000
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockConstants.java
+++ /dev/null
@@ -1,27 +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.iaases.mock;
-
-/**
- * Mock constant definitions.
- */
-public class MockConstants {
- public static final int MAX_MOCK_MEMBER_COUNT = 100;
-}
http://git-wip-us.apache.org/repos/asf/stratos/blob/e195f2f1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockIPAddressPool.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockIPAddressPool.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockIPAddressPool.java
deleted file mode 100644
index ac16a0e..0000000
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockIPAddressPool.java
+++ /dev/null
@@ -1,100 +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.iaases.mock;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.cloud.controller.registry.RegistryManager;
-import org.wso2.carbon.registry.core.exceptions.RegistryException;
-
-import java.io.Serializable;
-import java.util.concurrent.atomic.AtomicInteger;
-
-/**
- * Mock IP address pool is a singleton class for managing mocked private and public IP addresses.
- */
-public class MockIPAddressPool {
- private static final Log log = LogFactory.getLog(MockIPAddressPool.class);
-
- private static final String MOCK_IAAS_PRIVATE_IP_SEQUENCE = "/mock/iaas/private-ip-sequence";
- private static final String MOCK_IAAS_PUBLIC_IP_SEQUENCE = "/mock/iaas/public-ip-sequence";
- private static final String PRIVATE_IP_PREFIX = "10.0.0.";
- private static final String PUBLIC_IP_PREFIX = "20.0.0.";
-
- private static volatile MockIPAddressPool instance;
-
- private AtomicInteger privateIpSequence;
- private AtomicInteger publicIpSequence;
-
- private MockIPAddressPool() {
- privateIpSequence = readFromRegistry(MOCK_IAAS_PRIVATE_IP_SEQUENCE);
- if (privateIpSequence == null) {
- privateIpSequence = new AtomicInteger();
- }
-
- publicIpSequence = readFromRegistry(MOCK_IAAS_PUBLIC_IP_SEQUENCE);
- if (publicIpSequence == null) {
- publicIpSequence = new AtomicInteger();
- }
- }
-
- public static MockIPAddressPool getInstance() {
- if (instance == null) {
- synchronized (MockIPAddressPool.class) {
- if (instance == null) {
- instance = new MockIPAddressPool();
- }
- }
- }
- return instance;
- }
-
- public String getNextPrivateIpAddress() {
- int nextSequence = privateIpSequence.incrementAndGet();
- String ipAddress = PRIVATE_IP_PREFIX + nextSequence;
- persistInRegistry(MOCK_IAAS_PRIVATE_IP_SEQUENCE, privateIpSequence);
- if (log.isInfoEnabled()) {
- log.info("Mock private IP address allocated: " + ipAddress);
- }
- return ipAddress;
- }
-
- public String getNextPublicIpAddress() {
- int nextSequence = publicIpSequence.incrementAndGet();
- String ipAddress = PUBLIC_IP_PREFIX + nextSequence;
- persistInRegistry(MOCK_IAAS_PRIVATE_IP_SEQUENCE, publicIpSequence);
- if (log.isInfoEnabled()) {
- log.info("Mock public IP address allocated: " + ipAddress);
- }
- return ipAddress;
- }
-
- private void persistInRegistry(String resourcePath, Serializable serializable) {
- try {
- RegistryManager.getInstance().persist(resourcePath, serializable);
- } catch (RegistryException e) {
- log.error(String.format("Could not persist mock iaas ip sequence [%s] in registry", resourcePath), e);
- }
- }
-
- private AtomicInteger readFromRegistry(String resourcePath) {
- return (AtomicInteger) RegistryManager.getInstance().read(resourcePath);
- }
-}
http://git-wip-us.apache.org/repos/asf/stratos/blob/e195f2f1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockIaas.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockIaas.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockIaas.java
new file mode 100644
index 0000000..8203793
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockIaas.java
@@ -0,0 +1,112 @@
+/*
+ * 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.iaases.mock;
+
+import org.apache.stratos.cloud.controller.domain.IaasProvider;
+import org.apache.stratos.cloud.controller.domain.MemberContext;
+import org.apache.stratos.cloud.controller.domain.Partition;
+import org.apache.stratos.cloud.controller.exception.*;
+import org.apache.stratos.cloud.controller.iaases.Iaas;
+import org.apache.stratos.cloud.controller.iaases.PartitionValidator;
+import org.apache.stratos.cloud.controller.iaases.mock.service.MockIaasService;
+
+/**
+ * Mock IaaS client for invoking mock IaaS service.
+ */
+public class MockIaas extends Iaas {
+
+ public MockIaas(IaasProvider iaasProvider) {
+ super(iaasProvider);
+ }
+
+ @Override
+ public void initialize() {
+ }
+
+ @Override
+ public MemberContext startInstance(MemberContext memberContext) {
+ return MockIaasService.getInstance().createInstance(memberContext);
+ }
+
+ @Override
+ public void releaseAddress(String ip) {
+ MockIaasService.getInstance().releaseAddress(ip);
+ }
+
+ @Override
+ public boolean isValidRegion(String region) throws InvalidRegionException {
+ return MockIaasService.getInstance().isValidRegion(region);
+ }
+
+ @Override
+ public boolean isValidZone(String region, String zone) throws InvalidZoneException, InvalidRegionException {
+ return MockIaasService.getInstance().isValidZone(region, zone);
+ }
+
+ @Override
+ public boolean isValidHost(String zone, String host) throws InvalidHostException {
+ return MockIaasService.getInstance().isValidHost(zone, host);
+ }
+
+ @Override
+ public PartitionValidator getPartitionValidator() {
+ return MockIaasService.getInstance().getPartitionValidator();
+ }
+
+ @Override
+ public String createVolume(int sizeGB, String snapshotId) {
+ return MockIaasService.getInstance().createVolume(sizeGB, snapshotId);
+ }
+
+ @Override
+ public String attachVolume(String instanceId, String volumeId, String deviceName) {
+ return MockIaasService.getInstance().attachVolume(instanceId, volumeId, deviceName);
+ }
+
+ @Override
+ public void detachVolume(String instanceId, String volumeId) {
+ MockIaasService.getInstance().detachVolume(instanceId, volumeId);
+ }
+
+ @Override
+ public void deleteVolume(String volumeId) {
+ MockIaasService.getInstance().deleteVolume(volumeId);
+ }
+
+ @Override
+ public String getIaasDevice(String device) {
+ return MockIaasService.getInstance().getIaasDevice(device);
+ }
+
+ @Override
+ public void allocateIpAddress(String clusterId, MemberContext memberContext, Partition partition) {
+ MockIaasService.getInstance().allocateIpAddress(clusterId, memberContext, partition);
+ }
+
+ @Override
+ public void setDynamicPayload(byte[] payload) {
+ MockIaasService.getInstance().setDynamicPayload(payload);
+ }
+
+ @Override
+ public void terminateInstance(MemberContext memberContext) throws InvalidCartridgeTypeException, InvalidMemberException {
+ MockIaasService.getInstance().terminateInstance(memberContext);
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/e195f2f1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockIaasService.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockIaasService.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockIaasService.java
deleted file mode 100644
index 6fcd52f..0000000
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockIaasService.java
+++ /dev/null
@@ -1,224 +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.iaases.mock;
-
-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.exception.*;
-import org.apache.stratos.cloud.controller.iaases.mock.config.MockIaasConfig;
-import org.apache.stratos.cloud.controller.iaases.mock.statistics.generator.MockHealthStatisticsGenerator;
-import org.apache.stratos.cloud.controller.iaases.validators.PartitionValidator;
-import org.apache.stratos.cloud.controller.registry.RegistryManager;
-import org.apache.stratos.common.threading.StratosThreadPool;
-import org.jclouds.compute.domain.NodeMetadata;
-import org.wso2.carbon.registry.core.exceptions.RegistryException;
-
-import java.util.Map;
-import java.util.UUID;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ExecutorService;
-
-/**
- * Mock IaaS service implementation. This is a singleton class that simulates a standard Infrastructure as a Service
- * platform by creating mock members and managing their lifecycle states.
- *
- * How does this work:
- * - Mock IaaS starts a Mock Member thread or each instance created
- * - A sample private IP and a public IP will be assigned to the instance
- * - Mock Member will publish Instance Started and Instance Activated events once the thread is started
- * - Afterwards it will start publishing sample health statistics values to CEP
- * - If the Mock IaaS was asked to terminate an instance it will stop the relevant thread
- */
-public class MockIaasService {
-
- private static final Log log = LogFactory.getLog(MockIaasService.class);
-
- private static final ExecutorService mockMemberExecutorService =
- StratosThreadPool.getExecutorService("MOCK_MEMBER_EXECUTOR_SERVICE", MockConstants.MAX_MOCK_MEMBER_COUNT);
- private static final String MOCK_IAAS_MEMBERS = "/mock/iaas/members";
- private static volatile MockIaasService instance;
-
- private MockPartitionValidator partitionValidator;
- // Map<ServiceName, Map<MemberId,MockMember>>
- private Map<String, Map<String, MockMember>> serviceNameToMockMemberMap;
-
- private MockIaasService() {
- super();
- partitionValidator = new MockPartitionValidator();
- serviceNameToMockMemberMap = readFromRegistry();
- if(serviceNameToMockMemberMap == null) {
- // No members found in registry, create a new map
- serviceNameToMockMemberMap = new ConcurrentHashMap<String, Map<String, MockMember>>();
- }
- }
-
- public static MockIaasService getInstance() {
- if (instance == null) {
- synchronized (MockIaasService.class) {
- if (instance == null) {
- if(!MockIaasConfig.getInstance().isEnabled()) {
- throw new RuntimeException("Mock IaaS is not enabled");
- }
- instance = new MockIaasService();
- }
- }
- }
- return instance;
- }
-
- /**
- * Start mock members
- */
- public void startMockMembers() {
- if(serviceNameToMockMemberMap != null) {
- for(Map.Entry<String, Map<String, MockMember>> serviceNameEntry : serviceNameToMockMemberMap.entrySet()) {
- // Start mock members
- for(Map.Entry<String, MockMember> memberEntry : serviceNameEntry.getValue().entrySet()) {
- mockMemberExecutorService.submit(memberEntry.getValue());
- }
-
- // Schedule statistics updater tasks for service
- if(serviceNameEntry.getValue().entrySet().size() > 0) {
- MockHealthStatisticsGenerator.getInstance().scheduleStatisticsUpdaterTasks(serviceNameEntry.getKey());
- }
- }
- }
- }
-
- public MemberContext createInstance(MemberContext memberContext) {
- synchronized (MockIaasService.class) {
- // Create mock member instance
- MockMemberContext mockMemberContext = new MockMemberContext(memberContext.getCartridgeType(),
- memberContext.getClusterId(), memberContext.getMemberId(), memberContext.getInstanceId(),
- memberContext.getClusterInstanceId(), memberContext.getNetworkPartitionId(),
- memberContext.getPartition().getId());
-
- MockMember mockMember = new MockMember(mockMemberContext);
- addMemberToMap(mockMember);
- mockMemberExecutorService.submit(mockMember);
-
- // Generate instance id
- memberContext.setInstanceId(UUID.randomUUID().toString());
-
- // Persist changes
- persistInRegistry();
-
- String serviceName = mockMemberContext.getServiceName();
- MockHealthStatisticsGenerator.getInstance().scheduleStatisticsUpdaterTasks(serviceName);
-
- return memberContext;
- }
- }
-
- private void addMemberToMap(MockMember mockMember) {
- String serviceName = mockMember.getMockMemberContext().getServiceName();
- Map<String, MockMember> memberMap = serviceNameToMockMemberMap.get(serviceName);
- if(memberMap == null) {
- memberMap = new ConcurrentHashMap<String, MockMember>();
- serviceNameToMockMemberMap.put(serviceName, memberMap);
- }
- memberMap.put(mockMember.getMockMemberContext().getMemberId(), mockMember);
- }
-
- private void persistInRegistry() {
- try {
- RegistryManager.getInstance().persist(MOCK_IAAS_MEMBERS,
- (ConcurrentHashMap<String, Map<String, MockMember>>)serviceNameToMockMemberMap);
- } catch (RegistryException e) {
- log.error("Could not persist mock iaas members in registry", e);
- }
- }
-
- private ConcurrentHashMap<String, Map<String, MockMember>> readFromRegistry() {
- return (ConcurrentHashMap<String, Map<String, MockMember>>)
- RegistryManager.getInstance().read(MOCK_IAAS_MEMBERS);
- }
-
- public void allocateIpAddress(String clusterId, MemberContext memberContext, Partition partition) {
- // Allocate mock ip addresses
- memberContext.setDefaultPrivateIP(MockIPAddressPool.getInstance().getNextPrivateIpAddress());
- memberContext.setDefaultPublicIP(MockIPAddressPool.getInstance().getNextPublicIpAddress());
- }
-
- public void releaseAddress(String ip) {
-
- }
-
- public boolean isValidRegion(String region) throws InvalidRegionException {
- return true;
- }
-
- public boolean isValidZone(String region, String zone) throws InvalidZoneException, InvalidRegionException {
- return true;
- }
-
- public boolean isValidHost(String zone, String host) throws InvalidHostException {
- return true;
- }
-
- public PartitionValidator getPartitionValidator() {
- return partitionValidator;
- }
-
- public String createVolume(int sizeGB, String snapshotId) {
- return null;
- }
-
- public String attachVolume(String instanceId, String volumeId, String deviceName) {
- return null;
- }
-
- public void detachVolume(String instanceId, String volumeId) {
-
- }
-
- public void deleteVolume(String volumeId) {
-
- }
-
- public String getIaasDevice(String device) {
- return null;
- }
-
- public void setDynamicPayload(byte[] payload) {
-
- }
-
- public void terminateInstance(MemberContext memberContext) throws InvalidCartridgeTypeException, InvalidMemberException {
- synchronized (MockIaasService.class) {
- String serviceName = memberContext.getCartridgeType();
- Map<String, MockMember> memberMap = serviceNameToMockMemberMap.get(serviceName);
- if(memberMap != null) {
- MockMember mockMember = memberMap.get(memberContext.getMemberId());
- if(mockMember != null) {
- if (mockMember != null) {
- mockMember.terminate();
- memberMap.remove(memberContext.getMemberId());
- }
-
- if (memberMap.size() == 0) {
- MockHealthStatisticsGenerator.getInstance().stopStatisticsUpdaterTasks(serviceName);
- }
- }
- }
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/stratos/blob/e195f2f1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockMember.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockMember.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockMember.java
deleted file mode 100644
index 87e14ee..0000000
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockMember.java
+++ /dev/null
@@ -1,155 +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.iaases.mock;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.cloud.controller.iaases.mock.statistics.publisher.MockHealthStatisticsNotifier;
-import org.apache.stratos.common.threading.StratosThreadPool;
-import org.apache.stratos.messaging.event.Event;
-import org.apache.stratos.messaging.event.instance.notifier.InstanceCleanupClusterEvent;
-import org.apache.stratos.messaging.event.instance.notifier.InstanceCleanupMemberEvent;
-import org.apache.stratos.messaging.listener.instance.notifier.InstanceCleanupClusterEventListener;
-import org.apache.stratos.messaging.listener.instance.notifier.InstanceCleanupMemberEventListener;
-import org.apache.stratos.messaging.message.receiver.instance.notifier.InstanceNotifierEventReceiver;
-
-import java.io.Serializable;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
-
-/**
- * Mock member definition.
- */
-public class MockMember implements Runnable, Serializable {
-
- private static final Log log = LogFactory.getLog(MockMember.class);
- private static final ExecutorService instanceNotifierExecutorService =
- StratosThreadPool.getExecutorService("MOCK_MEMBER_INSTANCE_NOTIFIER_EXECUTOR_SERVICE", 20);
- private static final ScheduledExecutorService healthStatNotifierExecutorService =
- StratosThreadPool.getScheduledExecutorService("MOCK_MEMBER_HEALTH_STAT_NOTIFIER_EXECUTOR_SERVICE", 20);
- private static final int HEALTH_STAT_INTERVAL = 15; // 15 seconds
-
- private final MockMemberContext mockMemberContext;
- private boolean terminated;
-
- public MockMember(MockMemberContext mockMemberContext) {
- this.mockMemberContext = mockMemberContext;
- }
-
- @Override
- public void run() {
- if (log.isInfoEnabled()) {
- log.info(String.format("Mock member started: [member-id] %s", mockMemberContext.getMemberId()));
- }
-
- sleep(5000);
- MockMemberEventPublisher.publishInstanceStartedEvent(mockMemberContext);
-
- sleep(5000);
- MockMemberEventPublisher.publishInstanceActivatedEvent(mockMemberContext);
-
- startInstanceNotifierReceiver();
- startHealthStatisticsPublisher();
-
- while (!terminated) {
- sleep(1000);
- }
-
- if (log.isInfoEnabled()) {
- log.info(String.format("Mock member terminated: [member-id] %s", mockMemberContext.getMemberId()));
- }
- }
-
- private void startInstanceNotifierReceiver() {
- if (log.isDebugEnabled()) {
- log.debug("Starting instance notifier event message receiver");
- }
-
- final InstanceNotifierEventReceiver instanceNotifierEventReceiver = new InstanceNotifierEventReceiver();
- instanceNotifierEventReceiver.addEventListener(new InstanceCleanupClusterEventListener() {
- @Override
- protected void onEvent(Event event) {
- InstanceCleanupClusterEvent instanceCleanupClusterEvent = (InstanceCleanupClusterEvent) event;
- if (mockMemberContext.getClusterId().equals(instanceCleanupClusterEvent.getClusterId()) &&
- mockMemberContext.getClusterInstanceId().equals(
- instanceCleanupClusterEvent.getClusterInstanceId())) {
- handleMemberTermination();
- }
- }
- });
-
- instanceNotifierEventReceiver.addEventListener(new InstanceCleanupMemberEventListener() {
- @Override
- protected void onEvent(Event event) {
- InstanceCleanupMemberEvent instanceCleanupClusterEvent = (InstanceCleanupMemberEvent) event;
- if (mockMemberContext.getMemberId().equals(instanceCleanupClusterEvent.getMemberId())) {
- handleMemberTermination();
- }
- }
- });
-
- instanceNotifierExecutorService.submit(new Runnable() {
- @Override
- public void run() {
- instanceNotifierEventReceiver.execute();
- }
- });
-
- if (log.isDebugEnabled()) {
- log.debug("Instance notifier event message receiver started");
- }
- }
-
- private void handleMemberTermination() {
- MockMemberEventPublisher.publishMaintenanceModeEvent(mockMemberContext);
- sleep(2000);
- MockMemberEventPublisher.publishInstanceReadyToShutdownEvent(mockMemberContext);
- }
-
- private void startHealthStatisticsPublisher() {
- if (log.isDebugEnabled()) {
- log.debug(String.format("Starting health statistics notifier: [member-id] %s", mockMemberContext.getMemberId()));
- }
-
- healthStatNotifierExecutorService.scheduleAtFixedRate(new MockHealthStatisticsNotifier(mockMemberContext),
- 0, HEALTH_STAT_INTERVAL, TimeUnit.SECONDS);
-
- if (log.isDebugEnabled()) {
- log.debug(String.format("Health statistics notifier started: [member-id] %s", mockMemberContext.getMemberId()));
- }
- }
-
- private void sleep(long time) {
- try {
- Thread.sleep(time);
- } catch (InterruptedException ignore) {
- terminate();
- }
- }
-
- public MockMemberContext getMockMemberContext() {
- return mockMemberContext;
- }
-
- public void terminate() {
- terminated = true;
- }
-}
http://git-wip-us.apache.org/repos/asf/stratos/blob/e195f2f1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockMemberContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockMemberContext.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockMemberContext.java
deleted file mode 100644
index a217218..0000000
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockMemberContext.java
+++ /dev/null
@@ -1,74 +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.iaases.mock;
-
-import java.io.Serializable;
-
-/**
- * Mock member context.
- */
-public class MockMemberContext implements Serializable {
- private final String serviceName;
- private final String clusterId;
- private final String memberId;
- private final String instanceId;
- private final String clusterInstanceId;
- private final String networkPartitionId;
- private final String partitionId;
-
- public MockMemberContext(String serviceName, String clusterId, String memberId, String instanceId,
- String clusterInstanceId, String networkPartitionId, String partitionId) {
- this.serviceName = serviceName;
- this.clusterId = clusterId;
- this.memberId = memberId;
- this.instanceId = instanceId;
- this.clusterInstanceId = clusterInstanceId;
- this.networkPartitionId = networkPartitionId;
- this.partitionId = partitionId;
- }
-
- public String getServiceName() {
- return serviceName;
- }
-
- public String getClusterId() {
- return clusterId;
- }
-
- public String getMemberId() {
- return memberId;
- }
-
- public String getInstanceId() {
- return instanceId;
- }
-
- public String getClusterInstanceId() {
- return clusterInstanceId;
- }
-
- public String getNetworkPartitionId() {
- return networkPartitionId;
- }
-
- public String getPartitionId() {
- return partitionId;
- }
-}
http://git-wip-us.apache.org/repos/asf/stratos/blob/e195f2f1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockMemberEventPublisher.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockMemberEventPublisher.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockMemberEventPublisher.java
deleted file mode 100644
index 1499e00..0000000
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockMemberEventPublisher.java
+++ /dev/null
@@ -1,124 +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.iaases.mock;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.messaging.broker.publish.EventPublisher;
-import org.apache.stratos.messaging.broker.publish.EventPublisherPool;
-import org.apache.stratos.messaging.event.instance.status.InstanceActivatedEvent;
-import org.apache.stratos.messaging.event.instance.status.InstanceMaintenanceModeEvent;
-import org.apache.stratos.messaging.event.instance.status.InstanceReadyToShutdownEvent;
-import org.apache.stratos.messaging.event.instance.status.InstanceStartedEvent;
-import org.apache.stratos.messaging.util.Util;
-
-/**
- * Mock member event publisher.
- */
-public class MockMemberEventPublisher {
-
- private static final Log log = LogFactory.getLog(MockMemberEventPublisher.class);
-
- public static void publishInstanceStartedEvent(MockMemberContext mockMemberContext) {
- if (log.isInfoEnabled()) {
- log.info("Publishing instance started event");
- }
- InstanceStartedEvent event = new InstanceStartedEvent(
- mockMemberContext.getServiceName(),
- mockMemberContext.getClusterId(),
- mockMemberContext.getMemberId(),
- mockMemberContext.getClusterInstanceId(),
- mockMemberContext.getNetworkPartitionId(),
- mockMemberContext.getPartitionId());
- String topic = Util.getMessageTopicName(event);
- EventPublisher eventPublisher = EventPublisherPool
- .getPublisher(topic);
- eventPublisher.publish(event);
- if (log.isInfoEnabled()) {
- log.info("Instance started event published");
- }
- }
-
- public static void publishInstanceActivatedEvent(MockMemberContext mockMemberContext) {
- if (log.isInfoEnabled()) {
- log.info("Publishing instance activated event");
- }
- InstanceActivatedEvent event = new InstanceActivatedEvent(
- mockMemberContext.getServiceName(),
- mockMemberContext.getClusterId(),
- mockMemberContext.getMemberId(),
- mockMemberContext.getInstanceId(),
- mockMemberContext.getClusterInstanceId(),
- mockMemberContext.getNetworkPartitionId(),
- mockMemberContext.getPartitionId());
-
- // Event publisher connection will
- String topic = Util.getMessageTopicName(event);
- EventPublisher eventPublisher = EventPublisherPool.getPublisher(topic);
- eventPublisher.publish(event);
- if (log.isInfoEnabled()) {
- log.info("Instance activated event published");
- }
- }
-
- public static void publishInstanceReadyToShutdownEvent(MockMemberContext mockMemberContext) {
- if (log.isInfoEnabled()) {
- log.info(String.format("Publishing instance ready to shutdown event: [member-id] %s",
- mockMemberContext.getMemberId()));
- }
- InstanceReadyToShutdownEvent event = new InstanceReadyToShutdownEvent(
- mockMemberContext.getServiceName(),
- mockMemberContext.getClusterId(),
- mockMemberContext.getMemberId(),
- mockMemberContext.getClusterInstanceId(),
- mockMemberContext.getNetworkPartitionId(),
- mockMemberContext.getPartitionId());
- String topic = Util.getMessageTopicName(event);
- EventPublisher eventPublisher = EventPublisherPool
- .getPublisher(topic);
- eventPublisher.publish(event);
- if (log.isInfoEnabled()) {
- log.info(String.format("Instance ready to shutDown event published: [member-id] %s",
- mockMemberContext.getMemberId()));
- }
- }
-
- public static void publishMaintenanceModeEvent(MockMemberContext mockMemberContext) {
- if (log.isInfoEnabled()) {
- log.info(String.format("Publishing instance maintenance mode event: [member-id] %s",
- mockMemberContext.getMemberId()));
- }
- InstanceMaintenanceModeEvent event = new InstanceMaintenanceModeEvent(
- mockMemberContext.getServiceName(),
- mockMemberContext.getClusterId(),
- mockMemberContext.getMemberId(),
- mockMemberContext.getClusterInstanceId(),
- mockMemberContext.getNetworkPartitionId(),
- mockMemberContext.getPartitionId());
- String topic = Util.getMessageTopicName(event);
- EventPublisher eventPublisher = EventPublisherPool.getPublisher(topic);
- eventPublisher.publish(event);
-
- if (log.isInfoEnabled()) {
- log.info(String.format("Instance Maintenance mode event published: [member-id] %s",
- mockMemberContext.getMemberId()));
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/stratos/blob/e195f2f1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockPartitionValidator.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockPartitionValidator.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockPartitionValidator.java
index d3ca6d6..fbea11b 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockPartitionValidator.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockPartitionValidator.java
@@ -22,7 +22,7 @@ package org.apache.stratos.cloud.controller.iaases.mock;
import org.apache.stratos.cloud.controller.domain.IaasProvider;
import org.apache.stratos.cloud.controller.domain.Partition;
import org.apache.stratos.cloud.controller.exception.InvalidPartitionException;
-import org.apache.stratos.cloud.controller.iaases.validators.PartitionValidator;
+import org.apache.stratos.cloud.controller.iaases.PartitionValidator;
import java.util.Properties;
http://git-wip-us.apache.org/repos/asf/stratos/blob/e195f2f1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/config/MockHealthStatisticsConfig.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/config/MockHealthStatisticsConfig.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/config/MockHealthStatisticsConfig.java
deleted file mode 100644
index 28975c2..0000000
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/config/MockHealthStatisticsConfig.java
+++ /dev/null
@@ -1,44 +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.iaases.mock.config;
-
-import org.apache.stratos.cloud.controller.iaases.mock.statistics.generator.MockHealthStatisticsPattern;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Mock health statistics configuration.
- */
-public class MockHealthStatisticsConfig {
- List<MockHealthStatisticsPattern> statisticsPatternList;
-
- public MockHealthStatisticsConfig() {
- statisticsPatternList = new ArrayList<MockHealthStatisticsPattern>();
- }
-
- public void addStatisticsPattern(MockHealthStatisticsPattern statisticsPattern) {
- statisticsPatternList.add(statisticsPattern);
- }
-
- public List<MockHealthStatisticsPattern> getStatisticsPatterns() {
- return statisticsPatternList;
- }
-}
http://git-wip-us.apache.org/repos/asf/stratos/blob/e195f2f1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/config/MockIaasConfig.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/config/MockIaasConfig.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/config/MockIaasConfig.java
deleted file mode 100644
index 8e47f18..0000000
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/config/MockIaasConfig.java
+++ /dev/null
@@ -1,65 +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.iaases.mock.config;
-
-/**
- * Mock iaas configuration.
- */
-public class MockIaasConfig {
- private static final String MOCK_IAAS_CONFIG_FILE_NAME = "mock-iaas.xml";
- private static final String CARBON_HOME = "carbon.home";
- private static final String REPOSITORY_CONF = "/repository/conf/";
-
- private static volatile MockIaasConfig instance;
-
- private boolean enabled;
- private MockHealthStatisticsConfig mockHealthStatisticsConfig;
-
- public static MockIaasConfig getInstance() {
- if (instance == null) {
- synchronized (MockIaasConfig.class) {
- if (instance == null) {
- String confPath = System.getProperty(CARBON_HOME) + REPOSITORY_CONF;
- instance = MockIaasConfigParser.parse(confPath + MOCK_IAAS_CONFIG_FILE_NAME);
- }
- }
- }
- return instance;
- }
-
- MockIaasConfig() {
- }
-
- void setEnabled(boolean enabled) {
- this.enabled = enabled;
- }
-
- void setMockHealthStatisticsConfig(MockHealthStatisticsConfig mockHealthStatisticsConfig) {
- this.mockHealthStatisticsConfig = mockHealthStatisticsConfig;
- }
-
- public MockHealthStatisticsConfig getMockHealthStatisticsConfig() {
- return mockHealthStatisticsConfig;
- }
-
- public boolean isEnabled() {
- return enabled;
- }
-}