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/20 22:56:44 UTC
[6/7] stratos git commit: Introducing KubernetesIaas class,
MemberContext.clusterInstanceId, removing Cartridge.deployerType
http://git-wip-us.apache.org/repos/asf/stratos/blob/b575c7d6/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/JcloudsIaas.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/JcloudsIaas.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/JcloudsIaas.java
index 6c02770..653458a 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/JcloudsIaas.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/JcloudsIaas.java
@@ -99,12 +99,11 @@ public abstract class JcloudsIaas extends Iaas {
}
@Override
- public NodeMetadata createInstance(ClusterContext clusterContext, MemberContext memberContext) {
- NodeMetadata node = null;
+ public MemberContext createInstance(MemberContext memberContext) {
// generate the group id from domain name and sub domain name.
// Should have lower-case ASCII letters, numbers, or dashes.
// Should have a length between 3-15
- String clusterId = clusterContext.getClusterId();
+ String clusterId = memberContext.getClusterId();
String str = clusterId.length() > 10 ? clusterId.substring(0, 10) : clusterId.substring(0, clusterId.length());
String group = str.replaceAll("[^a-z0-9-]", "");
@@ -120,37 +119,60 @@ public abstract class JcloudsIaas extends Iaas {
}
if (log.isDebugEnabled()) {
- log.debug("Cloud Controller is delegating request to start an instance for "
- + memberContext + " to Jclouds layer.");
+ log.debug("Cloud controller is delegating request to start an instance for "
+ + memberContext + " to jclouds");
}
// create and start a node
- Set<? extends NodeMetadata> nodes = computeService.createNodesInGroup(group, 1, template);
- node = nodes.iterator().next();
+ Set<? extends NodeMetadata> nodeMetadataSet = computeService.createNodesInGroup(group, 1, template);
+ NodeMetadata nodeMetadata = nodeMetadataSet.iterator().next();
if (log.isDebugEnabled()) {
- log.debug("Cloud Controller received a response for the request to start "
+ log.debug("Cloud controller received a response for the request to start "
+ memberContext + " from Jclouds layer.");
}
- if (node == null) {
+ if (nodeMetadata == null) {
String msg = "Null response received for instance start-up request to Jclouds.\n"
+ memberContext.toString();
log.error(msg);
throw new IllegalStateException(msg);
}
+ memberContext.setInstanceId(nodeMetadata.getId());
+ memberContext.setInstanceMetadata(createInstanceMetadata(nodeMetadata));
} catch (Exception e) {
String msg = "Failed to start an instance. " + memberContext.toString() + " Cause: " + e.getMessage();
log.error(msg, e);
throw new IllegalStateException(msg, e);
}
- return node;
+ return memberContext;
}
- public void allocateIpAddress(String clusterId, MemberContext memberContext, Partition partition,
- String cartridgeType, NodeMetadata node) {
+ protected InstanceMetadata createInstanceMetadata(NodeMetadata nodeMetadata) {
+ InstanceMetadata instanceMetadata = new InstanceMetadata();
+ instanceMetadata.setHostname(nodeMetadata.getHostname());
+ instanceMetadata.setImageId(nodeMetadata.getImageId());
+ instanceMetadata.setLoginPort(nodeMetadata.getLoginPort());
+ instanceMetadata.setHypervisor(nodeMetadata.getHardware().getHypervisor());
+ instanceMetadata.setRam(nodeMetadata.getHardware().getRam());
+ instanceMetadata.setOperatingSystemName(nodeMetadata.getOperatingSystem().getName());
+ instanceMetadata.setOperatingSystemVersion(nodeMetadata.getOperatingSystem().getVersion());
+ instanceMetadata.setOperatingSystem64bit(nodeMetadata.getOperatingSystem().is64Bit());
+ return instanceMetadata;
+ }
+
+ public void allocateIpAddress(String clusterId, MemberContext memberContext, Partition partition) {
try {
if (log.isDebugEnabled()) {
log.debug("IP allocation process started for " + memberContext);
}
+
+ ComputeService computeService = getIaasProvider().getComputeService();
+ NodeMetadata nodeMetadata = computeService.getNodeMetadata(memberContext.getInstanceId());
+ if(nodeMetadata == null) {
+ String message = "Node metadata not found: [node-id] " + memberContext.getInstanceId();
+ log.error(message);
+ throw new CloudControllerException(message);
+ }
+
String autoAssignIpProp = getIaasProvider().getProperty(CloudControllerConstants.AUTO_ASSIGN_IP_PROPERTY);
String preDefinedIp = getIaasProvider().getProperty(CloudControllerConstants.FLOATING_IP_PROPERTY);
String publicIp = "";
@@ -165,7 +187,7 @@ public abstract class JcloudsIaas extends Iaas {
if (log.isDebugEnabled()) {
log.debug("CloudControllerServiceImpl:IpAllocator:preDefinedIp: invoking associatePredefinedAddress" + preDefinedIp);
}
- ip = associatePredefinedAddress(node, preDefinedIp);
+ ip = associatePredefinedAddress(nodeMetadata, preDefinedIp);
if (ip == null || "".equals(ip) || !preDefinedIp.equals(ip)) {
// throw exception and stop instance creation
@@ -174,7 +196,7 @@ public abstract class JcloudsIaas extends Iaas {
" - terminating node:" + memberContext.toString();
log.error(msg);
// terminate instance
- destroyNode(node.getId(), memberContext);
+ destroyNode(nodeMetadata.getId(), memberContext);
throw new CloudControllerException(msg);
}
} else {
@@ -182,7 +204,7 @@ public abstract class JcloudsIaas extends Iaas {
" - terminating node:" + memberContext.toString();
log.error(msg);
// terminate instance
- destroyNode(node.getId(), memberContext);
+ destroyNode(nodeMetadata.getId(), memberContext);
throw new CloudControllerException(msg);
}
@@ -192,7 +214,7 @@ public abstract class JcloudsIaas extends Iaas {
+ "selecting available one from pool");
}
// allocate an IP address - manual IP assigning mode
- ip = associateAddress(node);
+ ip = associateAddress(nodeMetadata);
if (ip != null) {
memberContext.setAllocatedIpAddress(ip);
@@ -213,15 +235,15 @@ public abstract class JcloudsIaas extends Iaas {
}
// build the node with the new ip
- node = NodeMetadataBuilder.fromNodeMetadata(node)
+ nodeMetadata = NodeMetadataBuilder.fromNodeMetadata(nodeMetadata)
.publicAddresses(ImmutableSet.of(ip)).build();
}
// public ip
- if (node.getPublicAddresses() != null &&
- node.getPublicAddresses().iterator().hasNext()) {
- ip = node.getPublicAddresses().iterator().next();
+ if (nodeMetadata.getPublicAddresses() != null &&
+ nodeMetadata.getPublicAddresses().iterator().hasNext()) {
+ ip = nodeMetadata.getPublicAddresses().iterator().next();
publicIp = ip;
memberContext.setPublicIpAddress(ip);
if (log.isDebugEnabled()) {
@@ -233,9 +255,9 @@ public abstract class JcloudsIaas extends Iaas {
}
// private IP
- if (node.getPrivateAddresses() != null &&
- node.getPrivateAddresses().iterator().hasNext()) {
- ip = node.getPrivateAddresses().iterator().next();
+ if (nodeMetadata.getPrivateAddresses() != null &&
+ nodeMetadata.getPrivateAddresses().iterator().hasNext()) {
+ ip = nodeMetadata.getPrivateAddresses().iterator().next();
memberContext.setPrivateIpAddress(ip);
if (log.isDebugEnabled()) {
log.debug("Retrieving Private IP Address. " + memberContext.toString());
@@ -264,7 +286,7 @@ public abstract class JcloudsIaas extends Iaas {
public void terminateInstance(MemberContext memberContext) throws InvalidCartridgeTypeException, InvalidMemberException {
String memberId = memberContext.getMemberId();
String cartridgeType = memberContext.getCartridgeType();
- String nodeId = memberContext.getNodeId();
+ String nodeId = memberContext.getInstanceId();
Cartridge cartridge = CloudControllerContext.getInstance().getCartridge(cartridgeType);
if(log.isInfoEnabled()) {
@@ -339,4 +361,9 @@ public abstract class JcloudsIaas extends Iaas {
}
}
}
+
+ public NodeMetadata findNodeMetadata(String nodeId) {
+ ComputeService computeService = getIaasProvider().getComputeService();
+ return computeService.getNodeMetadata(nodeId);
+ }
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/b575c7d6/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/KubernetesIaas.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/KubernetesIaas.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/KubernetesIaas.java
new file mode 100644
index 0000000..2b824dc
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/KubernetesIaas.java
@@ -0,0 +1,651 @@
+/*
+ * 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;
+
+import org.apache.commons.collections.ListUtils;
+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.exception.*;
+import org.apache.stratos.cloud.controller.functions.ContainerClusterContextToKubernetesService;
+import org.apache.stratos.cloud.controller.functions.ContainerClusterContextToReplicationController;
+import org.apache.stratos.cloud.controller.functions.PodToMemberContext;
+import org.apache.stratos.cloud.controller.iaases.validators.KubernetesPartitionValidator;
+import org.apache.stratos.cloud.controller.iaases.validators.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.Property;
+import org.apache.stratos.common.constants.StratosConstants;
+import org.apache.stratos.common.kubernetes.KubernetesGroup;
+import org.apache.stratos.common.kubernetes.PortRange;
+import org.apache.stratos.kubernetes.client.KubernetesApiClient;
+import org.apache.stratos.kubernetes.client.exceptions.KubernetesClientException;
+import org.apache.stratos.kubernetes.client.model.Label;
+import org.apache.stratos.kubernetes.client.model.Pod;
+import org.apache.stratos.kubernetes.client.model.ReplicationController;
+import org.apache.stratos.kubernetes.client.model.Service;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+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 PartitionValidator partitionValidator;
+
+ public KubernetesIaas(IaasProvider iaasProvider) {
+ super(iaasProvider);
+ partitionValidator = new KubernetesPartitionValidator();
+ }
+
+ @Override
+ public void initialize() {
+
+ }
+
+ @Override
+ public MemberContext createInstance(MemberContext memberContext) throws CartridgeNotFoundException {
+ memberContext = startContainer(memberContext);
+ return memberContext;
+ }
+
+ @Override
+ public void releaseAddress(String ip) {
+
+ }
+
+ @Override
+ public boolean isValidRegion(String region) throws InvalidRegionException {
+ return false;
+ }
+
+ @Override
+ public boolean isValidZone(String region, String zone) throws InvalidZoneException, InvalidRegionException {
+ return false;
+ }
+
+ @Override
+ public boolean isValidHost(String zone, String host) throws InvalidHostException {
+ return false;
+ }
+
+ @Override
+ public PartitionValidator getPartitionValidator() {
+ return partitionValidator;
+ }
+
+ @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) {
+
+ }
+
+ @Override
+ public void setDynamicPayload(byte[] payload) {
+
+ }
+
+ @Override
+ public void terminateInstance(MemberContext memberContext) throws InvalidCartridgeTypeException, InvalidMemberException {
+
+ }
+
+ 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();
+ handleNullObject(clusterId, "Could not start containers, cluster id is null in member context.");
+
+ // Validate cluster context
+ ClusterContext clusterContext = CloudControllerContext.getInstance().getClusterContext(clusterId);
+ handleNullObject(clusterContext, "Could not start containers, cluster context not found: [cluster-id] "
+ + clusterId);
+
+ // Validate partition
+ Partition partition = memberContext.getPartition();
+ handleNullObject(partition, "Could not start containers, partition not found in member context.");
+
+ // Validate cartridge
+ String cartridgeType = clusterContext.getCartridgeType();
+ Cartridge cartridge = CloudControllerContext.getInstance().getCartridge(cartridgeType);
+ if (cartridge == null) {
+ String msg = "Could not start containers, cartridge not found: [cartridge-type] " + cartridgeType;
+ log.error(msg);
+ throw new CartridgeNotFoundException(msg);
+ }
+
+ try {
+ String kubernetesClusterId = readProperty(StratosConstants.KUBERNETES_CLUSTER_ID,
+ partition.getProperties(),
+ partition.toString());
+
+ KubernetesGroup kubernetesGroup =
+ CloudControllerContext.getInstance().getKubernetesGroup(kubernetesClusterId);
+ handleNullObject(kubernetesGroup, "Could not start container, kubernetes group not found: " +
+ "[kubernetes-cluster-id] " + kubernetesClusterId);
+
+ String kubernetesMasterIp = kubernetesGroup.getKubernetesMaster().getHostIpAddress();
+ PortRange kubernetesPortRange = kubernetesGroup.getPortRange();
+
+ // optional
+ String kubernetesMasterPort = CloudControllerUtil.getProperty(
+ kubernetesGroup.getKubernetesMaster().getProperties(), StratosConstants.KUBERNETES_MASTER_PORT,
+ StratosConstants.KUBERNETES_MASTER_DEFAULT_PORT);
+
+ KubernetesClusterContext kubClusterContext = getKubernetesClusterContext(kubernetesClusterId,
+ kubernetesMasterIp, kubernetesMasterPort, kubernetesPortRange.getLower(), kubernetesPortRange.getUpper());
+ KubernetesApiClient kubernetesApi = kubClusterContext.getKubApi();
+
+
+ // first let's create a replication controller.
+ ContainerClusterContextToReplicationController controllerFunction = new ContainerClusterContextToReplicationController();
+ ReplicationController controller = controllerFunction.apply(memberContext);
+ if (log.isDebugEnabled()) {
+ log.debug("Cloud Controller is delegating request to start a replication controller " + controller +
+ " for " + memberContext + " to Kubernetes layer.");
+ }
+ kubernetesApi.createReplicationController(controller);
+
+ if (log.isDebugEnabled()) {
+ log.debug("Cloud Controller successfully started the controller "
+ + controller + " via Kubernetes layer.");
+ }
+
+ // secondly let's create a kubernetes service proxy to load balance these containers
+ ContainerClusterContextToKubernetesService serviceFunction = new ContainerClusterContextToKubernetesService();
+ Service service = serviceFunction.apply(memberContext);
+
+ if(kubernetesApi.getService(service.getId()) == null) {
+ if (log.isDebugEnabled()) {
+ log.debug("Delegating request to start a kubernetes service " + service +
+ " for member " + memberContext.getMemberId());
+ }
+ kubernetesApi.createService(service);
+ }
+
+ // set host port and update
+ Property allocatedServiceHostPortProp = new Property();
+ allocatedServiceHostPortProp.setName(StratosConstants.ALLOCATED_SERVICE_HOST_PORT);
+ allocatedServiceHostPortProp.setValue(String.valueOf(service.getPort()));
+ clusterContext.getProperties().addProperty(allocatedServiceHostPortProp);
+ CloudControllerContext.getInstance().addClusterContext(clusterContext);
+
+ if (log.isDebugEnabled()) {
+ log.debug("Successfully started the kubernetes service: "
+ + controller);
+ }
+
+ // create a label query
+ Label label = new Label();
+ label.setName(clusterId);
+ // execute the label query
+ Pod[] newlyCreatedPods = new Pod[0];
+ int expectedCount = 1;
+
+ for (int i = 0; i < expectedCount; i++) {
+ newlyCreatedPods = kubernetesApi.queryPods(new Label[]{label});
+ if (log.isDebugEnabled()) {
+ log.debug("Pods Count: " + newlyCreatedPods.length + " for cluster: " + clusterId);
+ }
+ if (newlyCreatedPods.length == expectedCount) {
+ break;
+ }
+ Thread.sleep(10000);
+ }
+
+ if (newlyCreatedPods.length == 0) {
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Pods are not created for cluster : %s, hence deleting the service", clusterId));
+ }
+ terminateContainers(clusterId);
+ return null;
+ }
+
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Pods created : %s for cluster : %s", newlyCreatedPods.length, clusterId));
+ }
+
+ List<MemberContext> memberContexts = new ArrayList<MemberContext>();
+
+ PodToMemberContext podToMemberContextFunc = new PodToMemberContext();
+ // generate Member Contexts
+ for (Pod pod : newlyCreatedPods) {
+ MemberContext context = podToMemberContextFunc.apply(pod);
+ context.setCartridgeType(cartridgeType);
+ context.setClusterId(clusterId);
+
+ context.setProperties(CloudControllerUtil.addProperty(context.getProperties(),
+ StratosConstants.ALLOCATED_SERVICE_HOST_PORT,
+ String.valueOf(service.getPort())));
+
+ CloudControllerContext.getInstance().addMemberContext(context);
+
+ // 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(context.getMemberId(),
+ exec.schedule(new PodActivationWatcher(pod.getId(), context, kubernetesApi), 5000));
+ memberContexts.add(context);
+ }
+
+ // persist in registry
+ CloudControllerContext.getInstance().persist();
+
+ log.info("Kubernetes entities are successfully starting up: " + memberContexts);
+
+ return memberContext;
+ } catch (Exception e) {
+ String msg = "Could not start container: " + memberContext.toString() + " Cause: " + e.getMessage();
+ log.error(msg, e);
+ throw new IllegalStateException(msg, e);
+ }
+ } finally {
+ if (lock != null) {
+ CloudControllerContext.getInstance().releaseWriteLock(lock);
+ }
+ }
+ }
+
+ public void unregisterDockerService(String clusterId)
+ throws UnregisteredClusterException {
+ Lock lock = null;
+ try {
+ lock = CloudControllerContext.getInstance().acquireClusterContextWriteLock();
+ // terminate all kubernetes units
+ try {
+ terminateContainers(clusterId);
+ } catch (InvalidClusterException e) {
+ String msg = "Docker instance termination fails for cluster: " + clusterId;
+ log.error(msg, e);
+ throw new UnregisteredClusterException(msg, e);
+ }
+ // send cluster removal notifications and update the state
+ //onClusterRemoval(clusterId);
+ } finally {
+ if (lock != null) {
+ CloudControllerContext.getInstance().releaseWriteLock(lock);
+ }
+ }
+ }
+
+ public MemberContext[] terminateContainers(String clusterId)
+ throws InvalidClusterException {
+ Lock lock = null;
+ try {
+ lock = CloudControllerContext.getInstance().acquireMemberContextWriteLock();
+
+ ClusterContext ctxt = CloudControllerContext.getInstance().getClusterContext(clusterId);
+ handleNullObject(ctxt, "Kubernetes units temrination failed. Invalid cluster id. " + clusterId);
+
+ String kubernetesClusterId = CloudControllerUtil.getProperty(ctxt.getProperties(),
+ StratosConstants.KUBERNETES_CLUSTER_ID);
+ handleNullObject(kubernetesClusterId, "Kubernetes units termination failed. Cannot find '" +
+ StratosConstants.KUBERNETES_CLUSTER_ID + "'. " + ctxt);
+
+ KubernetesClusterContext kubClusterContext = CloudControllerContext.getInstance().getKubernetesClusterContext(kubernetesClusterId);
+ handleNullObject(kubClusterContext, "Kubernetes units termination failed. Cannot find a matching Kubernetes Cluster for cluster id: "
+ + kubernetesClusterId);
+
+ KubernetesApiClient kubApi = kubClusterContext.getKubApi();
+ // delete the service
+ try {
+ kubApi.deleteService(CloudControllerUtil.getCompatibleId(clusterId));
+ } catch (KubernetesClientException e) {
+ // we're not going to throw this error, but proceed with other deletions
+ log.error("Failed to delete Kubernetes service with id: " + clusterId, e);
+ }
+
+ // set replicas=0 for the replication controller
+ try {
+ kubApi.updateReplicationController(clusterId, 0);
+ } catch (KubernetesClientException e) {
+ // we're not going to throw this error, but proceed with other deletions
+ log.error("Failed to update Kubernetes Controller with id: " + clusterId, e);
+ }
+
+ // delete pods forcefully
+ try {
+ // create a label query
+ Label l = new Label();
+ l.setName(clusterId);
+ // execute the label query
+ Pod[] pods = kubApi.queryPods(new Label[]{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("Failed to delete Pod [%s] forcefully!", pod.getId()));
+ }
+ }
+ } catch (KubernetesClientException e) {
+ // we're not going to throw this error, but proceed with other deletions
+ log.error("Failed to delete pods forcefully for cluster: " + clusterId, e);
+ }
+
+ // delete the replication controller.
+ try {
+ kubApi.deleteReplicationController(clusterId);
+ } catch (KubernetesClientException e) {
+ String msg = "Failed to delete Kubernetes Controller with id: " + clusterId;
+ log.error(msg, e);
+ throw new InvalidClusterException(msg, e);
+ }
+
+ String allocatedPort = CloudControllerUtil.getProperty(ctxt.getProperties(),
+ StratosConstants.ALLOCATED_SERVICE_HOST_PORT);
+
+ if (allocatedPort != null) {
+ kubClusterContext.deallocateHostPort(Integer
+ .parseInt(allocatedPort));
+ } else {
+ log.warn("Host port dealloacation failed due to a missing property: "
+ + StratosConstants.ALLOCATED_SERVICE_HOST_PORT);
+ }
+
+ List<MemberContext> membersToBeRemoved = CloudControllerContext.getInstance().getMemberContextsOfClusterId(clusterId);
+
+ for (MemberContext memberContext : membersToBeRemoved) {
+ CloudControllerServiceUtil.executeMemberTerminationPostProcess(memberContext);
+ }
+
+ // persist
+ CloudControllerContext.getInstance().persist();
+ return membersToBeRemoved.toArray(new MemberContext[0]);
+ } finally {
+ if (lock != null) {
+ CloudControllerContext.getInstance().releaseWriteLock(lock);
+ }
+ }
+ }
+
+ public MemberContext[] updateContainers(String clusterId, int containerCount)
+ throws CartridgeNotFoundException {
+ Lock lock = null;
+ try {
+ lock = CloudControllerContext.getInstance().acquireMemberContextWriteLock();
+
+ if (log.isDebugEnabled()) {
+ log.debug("CloudControllerServiceImpl:updateContainers for cluster : " + clusterId);
+ }
+
+ ClusterContext clusterContext = CloudControllerContext.getInstance().getClusterContext(clusterId);
+ handleNullObject(clusterContext, "Container update failed. Invalid cluster id. " + clusterId);
+
+ String cartridgeType = clusterContext.getCartridgeType();
+ Cartridge cartridge = CloudControllerContext.getInstance().getCartridge(cartridgeType);
+
+ if (cartridge == null) {
+ String msg = "Container update failed. No matching Cartridge found [type] " + cartridgeType
+ + ". [cluster id] " + clusterId;
+ log.error(msg);
+ throw new CartridgeNotFoundException(msg);
+ }
+
+ try {
+ String kubernetesClusterId = readProperty(StratosConstants.KUBERNETES_CLUSTER_ID,
+ clusterContext.getProperties(), clusterContext.toString());
+ KubernetesClusterContext kubClusterContext =
+ CloudControllerContext.getInstance().getKubernetesClusterContext(kubernetesClusterId);
+
+ if (kubClusterContext == null) {
+ String msg = "Instance startup failed. No matching Kubernetes context found for [id] " +
+ kubernetesClusterId + " [cluster id] " + clusterId;
+ log.error(msg);
+ throw new CartridgeNotFoundException(msg);
+ }
+
+ KubernetesApiClient kubApi = kubClusterContext.getKubApi();
+ // create a label query
+ Label label = new Label();
+ label.setName(clusterId);
+
+ // get the current pods - useful when scale down
+ Pod[] pods = kubApi.queryPods(new Label[]{label});
+
+ // update the replication controller - cluster id = replication controller id
+ if (log.isDebugEnabled()) {
+ log.debug("Cloud Controller is delegating request to update a replication controller " + clusterId +
+ " to Kubernetes layer.");
+ }
+
+ kubApi.updateReplicationController(clusterId, containerCount);
+
+ if (log.isDebugEnabled()) {
+ log.debug("Cloud Controller successfully updated the controller "
+ + clusterId + " via Kubernetes layer.");
+ }
+
+ // execute the label query
+ Pod[] selectedPods = new Pod[0];
+
+ // wait replicas*5s time in the worst case ; best case = 0s
+ for (int i = 0; i < (containerCount * pods.length + 1); i++) {
+ selectedPods = kubApi.queryPods(new Label[]{label});
+
+ if (log.isDebugEnabled()) {
+ log.debug("Pods count: " + selectedPods.length + " for cluster: " + clusterId);
+ }
+ if (selectedPods.length == containerCount) {
+ break;
+ }
+ Thread.sleep(10000);
+ }
+
+ if (log.isDebugEnabled()) {
+
+ log.debug(String.format("Pods created : %s for cluster : %s", selectedPods.length, clusterId));
+ }
+
+ List<MemberContext> memberContexts = new ArrayList<MemberContext>();
+
+ PodToMemberContext podToMemberContextFunc = new PodToMemberContext();
+ // generate Member Contexts
+ for (Pod pod : selectedPods) {
+ MemberContext context;
+ // if member context does not exist -> a new member (scale up)
+ if ((context = CloudControllerContext.getInstance().getMemberContextOfMemberId(pod.getId())) == null) {
+
+ context = podToMemberContextFunc.apply(pod);
+ context.setCartridgeType(cartridgeType);
+ context.setClusterId(clusterId);
+
+ context.setProperties(CloudControllerUtil.addProperty(context
+ .getProperties(), StratosConstants.ALLOCATED_SERVICE_HOST_PORT,
+ CloudControllerUtil.getProperty(clusterContext.getProperties(),
+ StratosConstants.ALLOCATED_SERVICE_HOST_PORT)));
+
+ // 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(context.getMemberId(), exec.schedule(new PodActivationWatcher(pod.getId(), context, kubApi), 5000));
+
+ memberContexts.add(context);
+
+ }
+ // publish data
+ // TODO
+// CartridgeInstanceDataPublisher.publish(context.getMemberId(), null, null, context.getClusterId(), cartridgeType, MemberStatus.Created.toString(), node);
+
+ }
+
+ if (memberContexts.isEmpty()) {
+ // terminated members
+ @SuppressWarnings("unchecked")
+ List<Pod> difference = ListUtils.subtract(Arrays.asList(pods), Arrays.asList(selectedPods));
+ for (Pod pod : difference) {
+ if (pod != null) {
+ MemberContext context = CloudControllerContext.getInstance().getMemberContextOfMemberId(pod.getId());
+ CloudControllerServiceUtil.executeMemberTerminationPostProcess(context);
+ memberContexts.add(context);
+ }
+ }
+ }
+
+
+ // persist in registry
+ CloudControllerContext.getInstance().persist();
+
+ log.info("Kubernetes entities are successfully starting up. " + memberContexts);
+ return memberContexts.toArray(new MemberContext[0]);
+
+ } catch (Exception e) {
+ String msg = "Failed to update containers belong to cluster " + clusterId + ". Cause: " + e.getMessage();
+ log.error(msg, e);
+ throw new IllegalStateException(msg, e);
+ }
+ } finally {
+ if (lock != null) {
+ CloudControllerContext.getInstance().releaseWriteLock(lock);
+ }
+ }
+ }
+
+ public MemberContext terminateContainer(String memberId) throws MemberTerminationFailedException {
+ Lock lock = null;
+ try {
+ lock = CloudControllerContext.getInstance().acquireMemberContextWriteLock();
+ handleNullObject(memberId, "Failed to terminate member. Invalid Member id. [member-id] " + memberId);
+ MemberContext memberContext = CloudControllerContext.getInstance().getMemberContextOfMemberId(memberId);
+ handleNullObject(memberContext, "Failed to terminate member. Member id not found. [member-id] " + memberId);
+
+ String clusterId = memberContext.getClusterId();
+ handleNullObject(clusterId, "Failed to terminate member. Cluster id is null. [member-id] " + memberId);
+
+ ClusterContext ctxt = CloudControllerContext.getInstance().getClusterContext(clusterId);
+ handleNullObject(ctxt, String.format("Failed to terminate member [member-id] %s. Invalid cluster id %s ", memberId, clusterId));
+
+ String kubernetesClusterId = CloudControllerUtil.getProperty(ctxt.getProperties(),
+ StratosConstants.KUBERNETES_CLUSTER_ID);
+
+ handleNullObject(kubernetesClusterId, String.format("Failed to terminate member [member-id] %s. Cannot find '" +
+ StratosConstants.KUBERNETES_CLUSTER_ID + "' in [cluster context] %s ", memberId, ctxt));
+
+ KubernetesClusterContext kubClusterContext = CloudControllerContext.getInstance().getKubernetesClusterContext(kubernetesClusterId);
+ handleNullObject(kubClusterContext, String.format("Failed to terminate member [member-id] %s. Cannot find a matching Kubernetes Cluster in [cluster context] %s ", memberId, ctxt));
+ KubernetesApiClient kubApi = kubClusterContext.getKubApi();
+ // delete the Pod
+ try {
+ // member id = pod id
+ kubApi.deletePod(memberId);
+ MemberContext memberToBeRemoved = CloudControllerContext.getInstance().getMemberContextOfMemberId(memberId);
+ CloudControllerServiceUtil.executeMemberTerminationPostProcess(memberToBeRemoved);
+
+ return memberToBeRemoved;
+
+ } catch (KubernetesClientException e) {
+ String msg = String.format("Failed to terminate member: [member-id] %s", memberId);
+ log.error(msg, e);
+ throw new MemberTerminationFailedException(msg, e);
+ }
+ } finally {
+ if (lock != null) {
+ CloudControllerContext.getInstance().releaseWriteLock(lock);
+ }
+ }
+ }
+
+ private KubernetesClusterContext getKubernetesClusterContext(String kubernetesClusterId, String kubernetesMasterIp,
+ String kubernetesMasterPort, int upperPort, int lowerPort) {
+
+ KubernetesClusterContext origCtxt =
+ CloudControllerContext.getInstance().getKubernetesClusterContext(kubernetesClusterId);
+ KubernetesClusterContext newCtxt =
+ new KubernetesClusterContext(kubernetesClusterId, kubernetesMasterIp,
+ kubernetesMasterPort, upperPort, lowerPort);
+
+ if (origCtxt == null) {
+ CloudControllerContext.getInstance().addKubernetesClusterContext(newCtxt);
+ return newCtxt;
+ }
+
+ if (!origCtxt.equals(newCtxt)) {
+ // if for some reason master IP etc. have changed
+ newCtxt.setAvailableHostPorts(origCtxt.getAvailableHostPorts());
+ CloudControllerContext.getInstance().addKubernetesClusterContext(newCtxt);
+ return newCtxt;
+ } else {
+ return origCtxt;
+ }
+ }
+
+ private String readProperty(String property, org.apache.stratos.common.Properties properties, String object) {
+ String propVal = CloudControllerUtil.getProperty(properties, property);
+ handleNullObject(propVal, "Property validation failed. Cannot find property: '" + property + " in " + object);
+ return propVal;
+
+ }
+
+ private void handleNullObject(Object obj, String errorMsg) {
+ if (obj == null) {
+ log.error(errorMsg);
+ throw new IllegalArgumentException(errorMsg);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/b575c7d6/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/MockIaas.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/MockIaas.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/MockIaas.java
index 9e9273e..d4956d4 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/MockIaas.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/MockIaas.java
@@ -19,14 +19,12 @@
package org.apache.stratos.cloud.controller.iaases;
-import org.apache.stratos.cloud.controller.domain.ClusterContext;
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.mock.MockIaasService;
import org.apache.stratos.cloud.controller.iaases.validators.PartitionValidator;
-import org.jclouds.compute.domain.NodeMetadata;
/**
* Mock IaaS client for invoking mock IaaS service.
@@ -42,8 +40,8 @@ public class MockIaas extends Iaas {
}
@Override
- public NodeMetadata createInstance(ClusterContext clusterContext, MemberContext memberContext) {
- return MockIaasService.getInstance().createInstance(clusterContext, memberContext);
+ public MemberContext createInstance(MemberContext memberContext) {
+ return MockIaasService.getInstance().createInstance(memberContext);
}
@Override
@@ -97,9 +95,8 @@ public class MockIaas extends Iaas {
}
@Override
- public void allocateIpAddress(String clusterId, MemberContext memberContext, Partition partition,
- String cartridgeType, NodeMetadata node) {
- MockIaasService.getInstance().allocateIpAddress(clusterId, memberContext, partition, cartridgeType, node);
+ public void allocateIpAddress(String clusterId, MemberContext memberContext, Partition partition) {
+ MockIaasService.getInstance().allocateIpAddress(clusterId, memberContext, partition);
}
@Override
http://git-wip-us.apache.org/repos/asf/stratos/blob/b575c7d6/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
index bbca7ea..354484b 100644
--- 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
@@ -21,9 +21,7 @@ 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.ClusterContext;
-import org.apache.stratos.cloud.controller.domain.MemberContext;
-import org.apache.stratos.cloud.controller.domain.Partition;
+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;
@@ -105,19 +103,20 @@ public class MockIaasService {
}
}
- public NodeMetadata createInstance(ClusterContext clusterContext, MemberContext memberContext) {
+ public MemberContext createInstance(MemberContext memberContext) {
synchronized (MockIaasService.class) {
// Create mock member instance
- MockMemberContext mockMemberContext = new MockMemberContext(clusterContext.getCartridgeType(),
- clusterContext.getClusterId(), memberContext.getMemberId(), memberContext.getNetworkPartitionId(),
- memberContext.getPartition().getId(), memberContext.getInstanceId());
+ 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);
- // Prepare node metadata
- MockNodeMetadata nodeMetadata = new MockNodeMetadata();
- nodeMetadata.setId(UUID.randomUUID().toString());
+ // Generate instance id
+ memberContext.setInstanceId(UUID.randomUUID().toString());
// Persist changes
persistInRegistry();
@@ -125,7 +124,7 @@ public class MockIaasService {
String serviceName = mockMemberContext.getServiceName();
MockHealthStatisticsGenerator.getInstance().scheduleStatisticsUpdaterTasks(serviceName);
- return nodeMetadata;
+ return memberContext;
}
}
@@ -149,11 +148,11 @@ public class MockIaasService {
}
private ConcurrentHashMap<String, Map<String, MockMember>> readFromRegistry() {
- return (ConcurrentHashMap<String, Map<String, MockMember>>) RegistryManager.getInstance().read(MOCK_IAAS_MEMBERS);
+ return (ConcurrentHashMap<String, Map<String, MockMember>>)
+ RegistryManager.getInstance().read(MOCK_IAAS_MEMBERS);
}
- public void allocateIpAddress(String clusterId, MemberContext memberContext, Partition partition,
- String cartridgeType, NodeMetadata node) {
+ public void allocateIpAddress(String clusterId, MemberContext memberContext, Partition partition) {
// Allocate mock ip addresses
memberContext.setPrivateIpAddress(MockIPAddressPool.getInstance().getNextPrivateIpAddress());
memberContext.setPublicIpAddress(MockIPAddressPool.getInstance().getNextPublicIpAddress());
http://git-wip-us.apache.org/repos/asf/stratos/blob/b575c7d6/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
index 7189d11..a217218 100644
--- 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
@@ -28,18 +28,20 @@ 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;
- private final String instanceId;
- public MockMemberContext(String serviceName, String clusterId, String memberId,
- String networkPartitionId, String partitionId, String instanceId) {
+ 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;
- this.instanceId = instanceId;
}
public String getServiceName() {
@@ -54,6 +56,14 @@ public class MockMemberContext implements Serializable {
return memberId;
}
+ public String getInstanceId() {
+ return instanceId;
+ }
+
+ public String getClusterInstanceId() {
+ return clusterInstanceId;
+ }
+
public String getNetworkPartitionId() {
return networkPartitionId;
}
@@ -61,8 +71,4 @@ public class MockMemberContext implements Serializable {
public String getPartitionId() {
return partitionId;
}
-
- public String getInstanceId() {
- return instanceId;
- }
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/b575c7d6/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
index 1b1ea43..54d4c58 100644
--- 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
@@ -43,10 +43,11 @@ public class MockMemberEventPublisher {
InstanceStartedEvent event = new InstanceStartedEvent(
mockMemberContext.getServiceName(),
mockMemberContext.getClusterId(),
- mockMemberContext.getNetworkPartitionId(),
- mockMemberContext.getPartitionId(),
mockMemberContext.getMemberId(),
- mockMemberContext.getInstanceId());
+ mockMemberContext.getInstanceId(),
+ mockMemberContext.getClusterInstanceId(),
+ mockMemberContext.getNetworkPartitionId(),
+ mockMemberContext.getPartitionId());
String topic = Util.getMessageTopicName(event);
EventPublisher eventPublisher = EventPublisherPool
.getPublisher(topic);
@@ -63,10 +64,11 @@ public class MockMemberEventPublisher {
InstanceActivatedEvent event = new InstanceActivatedEvent(
mockMemberContext.getServiceName(),
mockMemberContext.getClusterId(),
- mockMemberContext.getNetworkPartitionId(),
- mockMemberContext.getPartitionId(),
mockMemberContext.getMemberId(),
- mockMemberContext.getInstanceId());
+ mockMemberContext.getInstanceId(),
+ mockMemberContext.getClusterInstanceId(),
+ mockMemberContext.getNetworkPartitionId(),
+ mockMemberContext.getPartitionId());
// Event publisher connection will
String topic = Util.getMessageTopicName(event);
@@ -85,10 +87,11 @@ public class MockMemberEventPublisher {
InstanceReadyToShutdownEvent event = new InstanceReadyToShutdownEvent(
mockMemberContext.getServiceName(),
mockMemberContext.getClusterId(),
- mockMemberContext.getNetworkPartitionId(),
- mockMemberContext.getPartitionId(),
mockMemberContext.getMemberId(),
- mockMemberContext.getInstanceId());
+ mockMemberContext.getInstanceId(),
+ mockMemberContext.getClusterInstanceId(),
+ mockMemberContext.getNetworkPartitionId(),
+ mockMemberContext.getPartitionId());
String topic = Util.getMessageTopicName(event);
EventPublisher eventPublisher = EventPublisherPool
.getPublisher(topic);
@@ -107,10 +110,11 @@ public class MockMemberEventPublisher {
InstanceMaintenanceModeEvent event = new InstanceMaintenanceModeEvent(
mockMemberContext.getServiceName(),
mockMemberContext.getClusterId(),
- mockMemberContext.getNetworkPartitionId(),
- mockMemberContext.getPartitionId(),
mockMemberContext.getMemberId(),
- mockMemberContext.getInstanceId());
+ mockMemberContext.getInstanceId(),
+ mockMemberContext.getClusterInstanceId(),
+ mockMemberContext.getNetworkPartitionId(),
+ mockMemberContext.getPartitionId());
String topic = Util.getMessageTopicName(event);
EventPublisher eventPublisher = EventPublisherPool.getPublisher(topic);
eventPublisher.publish(event);
http://git-wip-us.apache.org/repos/asf/stratos/blob/b575c7d6/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockNodeMetadata.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockNodeMetadata.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockNodeMetadata.java
deleted file mode 100644
index 6dd3faf..0000000
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockNodeMetadata.java
+++ /dev/null
@@ -1,143 +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.jclouds.compute.domain.ComputeType;
-import org.jclouds.compute.domain.Hardware;
-import org.jclouds.compute.domain.NodeMetadata;
-import org.jclouds.compute.domain.OperatingSystem;
-import org.jclouds.domain.Location;
-import org.jclouds.domain.LoginCredentials;
-import org.jclouds.domain.ResourceMetadata;
-
-import java.net.URI;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * Mock node metadata definition.
- */
-public class MockNodeMetadata implements NodeMetadata {
- private String id;
-
- @Override
- public String getHostname() {
- return null;
- }
-
- @Override
- public String getGroup() {
- return null;
- }
-
- @Override
- public Hardware getHardware() {
- return null;
- }
-
- @Override
- public String getImageId() {
- return null;
- }
-
- @Override
- public OperatingSystem getOperatingSystem() {
- return null;
- }
-
- @Override
- public int getLoginPort() {
- return 0;
- }
-
- @Override
- public LoginCredentials getCredentials() {
- return null;
- }
-
- @Override
- public Set<String> getPublicAddresses() {
- return null;
- }
-
- @Override
- public Set<String> getPrivateAddresses() {
- return null;
- }
-
- @Override
- public Status getStatus() {
- return null;
- }
-
- @Override
- public String getBackendStatus() {
- return null;
- }
-
- @Override
- public ComputeType getType() {
- return null;
- }
-
- @Override
- public String getProviderId() {
- return null;
- }
-
- @Override
- public String getName() {
- return null;
- }
-
- @Override
- public Location getLocation() {
- return null;
- }
-
- @Override
- public URI getUri() {
- return null;
- }
-
- @Override
- public Map<String, String> getUserMetadata() {
- return null;
- }
-
- @Override
- public String getId() {
- return id;
- }
-
- @Override
- public Set<String> getTags() {
- return null;
- }
-
- @Override
- public int compareTo(ResourceMetadata<ComputeType> computeTypeResourceMetadata) {
- return 0;
- }
-
- public void setId(String id) {
- this.id = id;
- }
-}
http://git-wip-us.apache.org/repos/asf/stratos/blob/b575c7d6/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 e1055f0..ef7ae94 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
@@ -21,7 +21,6 @@ package org.apache.stratos.cloud.controller.iaases.mock;
import org.apache.stratos.cloud.controller.domain.IaasProvider;
import org.apache.stratos.cloud.controller.exception.InvalidPartitionException;
-import org.apache.stratos.cloud.controller.iaases.validators.IaasBasedPartitionValidator;
import org.apache.stratos.cloud.controller.iaases.validators.PartitionValidator;
import java.util.Properties;
@@ -29,7 +28,7 @@ import java.util.Properties;
/**
* Mock partition validator.
*/
-public class MockPartitionValidator extends IaasBasedPartitionValidator {
+public class MockPartitionValidator implements PartitionValidator {
private IaasProvider iaasProvider;
http://git-wip-us.apache.org/repos/asf/stratos/blob/b575c7d6/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/AWSEC2PartitionValidator.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/AWSEC2PartitionValidator.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/AWSEC2PartitionValidator.java
index 649eca2..4d16c87 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/AWSEC2PartitionValidator.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/AWSEC2PartitionValidator.java
@@ -36,7 +36,7 @@ import java.util.Properties;
*
*
*/
-public class AWSEC2PartitionValidator extends IaasBasedPartitionValidator {
+public class AWSEC2PartitionValidator implements PartitionValidator {
private static final Log log = LogFactory.getLog(AWSEC2PartitionValidator.class);
private IaasProvider iaasProvider;
http://git-wip-us.apache.org/repos/asf/stratos/blob/b575c7d6/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/CloudstackPartitionValidator.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/CloudstackPartitionValidator.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/CloudstackPartitionValidator.java
index 2038a8c..70b32dd 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/CloudstackPartitionValidator.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/CloudstackPartitionValidator.java
@@ -12,14 +12,13 @@ import org.apache.stratos.messaging.domain.topology.Scope;
import java.util.Properties;
-public class CloudstackPartitionValidator extends IaasBasedPartitionValidator {
-
+public class CloudstackPartitionValidator implements PartitionValidator {
private static final Log log = LogFactory.getLog(AWSEC2PartitionValidator.class);
+
private IaasProvider iaasProvider;
private Iaas iaas;
-
@Override
public void setIaasProvider(IaasProvider iaas) {
this.iaasProvider = iaas;
http://git-wip-us.apache.org/repos/asf/stratos/blob/b575c7d6/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/DockerPartitionValidator.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/DockerPartitionValidator.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/DockerPartitionValidator.java
index 2a57b3e..1a54297 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/DockerPartitionValidator.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/DockerPartitionValidator.java
@@ -32,8 +32,9 @@ import java.util.Properties;
/**
* Docker partition validator definition.
*/
-public class DockerPartitionValidator extends IaasBasedPartitionValidator {
- private static final Log log = LogFactory.getLog(DockerPartitionValidator.class);
+public class DockerPartitionValidator implements PartitionValidator {
+
+ private static final Log log = LogFactory.getLog(DockerPartitionValidator.class);
private IaasProvider iaasProvider;
http://git-wip-us.apache.org/repos/asf/stratos/blob/b575c7d6/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/GCEPartitionValidator.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/GCEPartitionValidator.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/GCEPartitionValidator.java
index ada45cd..4f119ac 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/GCEPartitionValidator.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/GCEPartitionValidator.java
@@ -31,11 +31,11 @@ import org.apache.stratos.cloud.controller.domain.IaasProvider;
* The VCloud {@link PartitionValidator} implementation.
*
*/
-public class GCEPartitionValidator extends IaasBasedPartitionValidator {
+public class GCEPartitionValidator implements PartitionValidator {
private static final Log log = LogFactory.getLog(VCloudPartitionValidator.class);
+
private IaasProvider iaasProvider;
- private Iaas iaas;
@Override
public IaasProvider validate(String partitionId, Properties properties) throws InvalidPartitionException {
@@ -45,9 +45,7 @@ public class GCEPartitionValidator extends IaasBasedPartitionValidator {
}
@Override
- public void setIaasProvider(IaasProvider iaas) {
- this.iaasProvider = iaas;
- this.iaas = iaas.getIaas();
+ public void setIaasProvider(IaasProvider iaasProvider) {
+ this.iaasProvider = iaasProvider;
}
-
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/b575c7d6/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/IaasBasedPartitionValidator.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/IaasBasedPartitionValidator.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/IaasBasedPartitionValidator.java
deleted file mode 100644
index d9a77cf..0000000
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/IaasBasedPartitionValidator.java
+++ /dev/null
@@ -1,47 +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.validators;
-
-import java.util.Properties;
-
-import org.apache.stratos.cloud.controller.exception.InvalidPartitionException;
-import org.apache.stratos.cloud.controller.domain.IaasProvider;
-
-/**
- * All the IaaSes should write a partition validator which extends this class.
- */
-public abstract class IaasBasedPartitionValidator implements PartitionValidator {
-
- /**
- * set the IaasProvider reference.
- *
- * @param iaas {@link IaasProvider}
- */
- public abstract void setIaasProvider(IaasProvider iaas);
-
- /**
- * Validate the given properties for its existent in this partition.
- *
- * @param partitionId partition id.
- * @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 abstract IaasProvider validate(String partitionId, Properties properties) throws InvalidPartitionException;
-}
http://git-wip-us.apache.org/repos/asf/stratos/blob/b575c7d6/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/KubernetesBasedPartitionValidator.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/KubernetesBasedPartitionValidator.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/KubernetesBasedPartitionValidator.java
deleted file mode 100644
index e6225f1..0000000
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/KubernetesBasedPartitionValidator.java
+++ /dev/null
@@ -1,67 +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.validators;
-
-import java.util.Properties;
-
-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.exception.InvalidPartitionException;
-import org.apache.stratos.cloud.controller.exception.NonExistingKubernetesGroupException;
-import org.apache.stratos.common.constants.StratosConstants;
-import org.apache.stratos.common.kubernetes.KubernetesGroup;
-
-/**
- * Kubernetes Partition Validator
- */
-public class KubernetesBasedPartitionValidator implements PartitionValidator {
-
- private static final Log log = LogFactory.getLog(KubernetesBasedPartitionValidator.class);
-
- /**
- * Validate the given properties for its existent in this partition.
- *
- * @param partitionId partition id.
- * @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 KubernetesGroup validate(String partitionId, Properties properties) throws InvalidPartitionException {
-
- if (properties.containsKey(StratosConstants.KUBERNETES_CLUSTER_ID)) {
- String kubernetesClusterId = properties.getProperty(StratosConstants.KUBERNETES_CLUSTER_ID);
- try {
- KubernetesGroup kubGroup = CloudControllerContext.getInstance().getKubernetesGroup(kubernetesClusterId);
- return kubGroup;
- } catch (NonExistingKubernetesGroupException e) {
- String msg = "Invalid Partition Detected : " + partitionId + ". Cause: " + e.getMessage();
- log.error(msg, e);
- throw new InvalidPartitionException(msg, e);
- }
- }
-
- String msg =
- "Invalid Partition Detected : " + partitionId + ". Cause: Essential "
- + StratosConstants.KUBERNETES_CLUSTER_ID + " property not found.";
- log.error(msg);
- throw new InvalidPartitionException(msg);
-
- }
-}
http://git-wip-us.apache.org/repos/asf/stratos/blob/b575c7d6/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/KubernetesPartitionValidator.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/KubernetesPartitionValidator.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/KubernetesPartitionValidator.java
new file mode 100644
index 0000000..a95aa37
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/KubernetesPartitionValidator.java
@@ -0,0 +1,72 @@
+/*
+ * 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.validators;
+
+import java.util.Properties;
+
+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.exception.InvalidPartitionException;
+import org.apache.stratos.cloud.controller.exception.NonExistingKubernetesGroupException;
+import org.apache.stratos.common.constants.StratosConstants;
+
+/**
+ * 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 partitionId partition id.
+ * @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(String partitionId, Properties properties) throws InvalidPartitionException {
+
+ if (properties.containsKey(StratosConstants.KUBERNETES_CLUSTER_ID)) {
+ String kubernetesClusterId = properties.getProperty(StratosConstants.KUBERNETES_CLUSTER_ID);
+ try {
+ CloudControllerContext.getInstance().getKubernetesGroup(kubernetesClusterId);
+ return iaasProvider;
+ } catch (NonExistingKubernetesGroupException e) {
+ String message = "Kubernetes partition is not valid: [partition-id] " + partitionId;
+ log.error(message, e);
+ throw new InvalidPartitionException(message, e);
+ }
+ }
+
+ String message = "Kubernetes partition is not valid: [partition-id] " + partitionId + ", property not found: "
+ + StratosConstants.KUBERNETES_CLUSTER_ID;
+ log.error(message);
+ throw new InvalidPartitionException(message);
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/b575c7d6/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/OpenstackNovaPartitionValidator.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/OpenstackNovaPartitionValidator.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/OpenstackNovaPartitionValidator.java
index bb8358c..f2205b2 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/OpenstackNovaPartitionValidator.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/OpenstackNovaPartitionValidator.java
@@ -36,9 +36,10 @@ import java.util.Properties;
*
*
*/
-public class OpenstackNovaPartitionValidator extends IaasBasedPartitionValidator {
+public class OpenstackNovaPartitionValidator implements PartitionValidator {
private static final Log log = LogFactory.getLog(OpenstackNovaPartitionValidator.class);
+
private IaasProvider iaasProvider;
private Iaas iaas;
http://git-wip-us.apache.org/repos/asf/stratos/blob/b575c7d6/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/PartitionValidator.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/PartitionValidator.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/PartitionValidator.java
index ed29c2d..6bcbdcd 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/PartitionValidator.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/PartitionValidator.java
@@ -21,19 +21,27 @@ package org.apache.stratos.cloud.controller.iaases.validators;
import java.util.Properties;
import org.apache.stratos.cloud.controller.exception.InvalidPartitionException;
+import org.apache.stratos.cloud.controller.domain.IaasProvider;
/**
- * All the Partition Validators should implement this interface.
- *
+ * All the IaaSes needs to write a partition validator which implements this interface.
*/
public interface PartitionValidator {
-
+
+ /**
+ * set the IaasProvider reference.
+ *
+ * @param iaasProvider {@link IaasProvider}
+ */
+ public abstract void setIaasProvider(IaasProvider iaasProvider);
+
/**
* Validate the given properties for its existent in this partition.
+ *
* @param partitionId partition id.
* @param properties set of properties to be validated.
- * @return cloned and modified {@link Object} which maps to the given partition.
+ * @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 Object validate(String partitionId, Properties properties) throws InvalidPartitionException;
+ public abstract IaasProvider validate(String partitionId, Properties properties) throws InvalidPartitionException;
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/b575c7d6/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/VCloudPartitionValidator.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/VCloudPartitionValidator.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/VCloudPartitionValidator.java
index 21b3417..8af42d7 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/VCloudPartitionValidator.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/VCloudPartitionValidator.java
@@ -31,7 +31,7 @@ import org.apache.stratos.cloud.controller.domain.IaasProvider;
* The VCloud {@link PartitionValidator} implementation.
*
*/
-public class VCloudPartitionValidator extends IaasBasedPartitionValidator {
+public class VCloudPartitionValidator implements PartitionValidator {
@SuppressWarnings("unused")
private static final Log log = LogFactory.getLog(VCloudPartitionValidator.class);
http://git-wip-us.apache.org/repos/asf/stratos/blob/b575c7d6/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/publisher/StatisticsDataPublisher.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/publisher/StatisticsDataPublisher.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/publisher/StatisticsDataPublisher.java
index 15cf63b..0539e23 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/publisher/StatisticsDataPublisher.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/publisher/StatisticsDataPublisher.java
@@ -22,9 +22,12 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.stratos.cloud.controller.config.CloudControllerConfig;
import org.apache.stratos.cloud.controller.context.CloudControllerContext;
+import org.apache.stratos.cloud.controller.domain.IaasProvider;
+import org.apache.stratos.cloud.controller.domain.InstanceMetadata;
import org.apache.stratos.cloud.controller.exception.CloudControllerException;
import org.apache.stratos.cloud.controller.domain.Cartridge;
import org.apache.stratos.cloud.controller.domain.MemberContext;
+import org.apache.stratos.cloud.controller.iaases.JcloudsIaas;
import org.apache.stratos.cloud.controller.util.CloudControllerConstants;
import org.jclouds.compute.domain.NodeMetadata;
import org.wso2.carbon.base.ServerConfiguration;
@@ -56,7 +59,7 @@ public class StatisticsDataPublisher {
String clusterId,
String serviceName,
String status,
- NodeMetadata metadata) {
+ InstanceMetadata metadata) {
if(!CloudControllerConfig.getInstance().isBAMDataPublisherEnabled()){
return;
}
@@ -74,7 +77,6 @@ public class StatisticsDataPublisher {
}
}
-
MemberContext memberContext = CloudControllerContext.getInstance().getMemberContextOfMemberId(memberId);
String cartridgeType = memberContext.getCartridgeType();
Cartridge cartridge = CloudControllerContext.getInstance().getCartridge(cartridgeType);
@@ -98,14 +100,14 @@ public class StatisticsDataPublisher {
if(metadata != null) {
payload.add(metadata.getHostname());
- payload.add(metadata.getHardware().getHypervisor());
- payload.add(String.valueOf(metadata.getHardware().getRam()));
+ payload.add(metadata.getHypervisor());
+ payload.add(String.valueOf(metadata.getRam()));
payload.add(metadata.getImageId());
payload.add(metadata.getLoginPort());
- payload.add(metadata.getOperatingSystem().getName());
- payload.add(metadata.getOperatingSystem().getVersion());
- payload.add(metadata.getOperatingSystem().getArch());
- payload.add(String.valueOf(metadata.getOperatingSystem().is64Bit()));
+ payload.add(metadata.getOperatingSystemName());
+ payload.add(metadata.getOperatingSystemVersion());
+ payload.add(metadata.getOperatingSystemArchitecture());
+ payload.add(String.valueOf(metadata.isOperatingSystem64bit()));
} else {
payload.add("");
payload.add("");