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/21 17:10:43 UTC
[1/3] stratos git commit: Initial implementation of kubernetes iaas
createInstance(), terminateInstance() methods
Repository: stratos
Updated Branches:
refs/heads/master 9a355d9a0 -> 405ff36de
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/KubernetesApiClientLiveTest.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/KubernetesApiClientLiveTest.java b/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/KubernetesApiClientLiveTest.java
index 03dc7d8..6a7bd9b 100644
--- a/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/KubernetesApiClientLiveTest.java
+++ b/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/KubernetesApiClientLiveTest.java
@@ -20,28 +20,19 @@
*/
package org.apache.stratos.kubernetes.client.live;
-import java.net.InetAddress;
-import java.net.URL;
-
import junit.framework.TestCase;
-
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.stratos.kubernetes.client.KubernetesApiClient;
import org.apache.stratos.kubernetes.client.exceptions.KubernetesClientException;
-import org.apache.stratos.kubernetes.client.model.Container;
-import org.apache.stratos.kubernetes.client.model.Label;
-import org.apache.stratos.kubernetes.client.model.Manifest;
-import org.apache.stratos.kubernetes.client.model.Pod;
-import org.apache.stratos.kubernetes.client.model.Port;
-import org.apache.stratos.kubernetes.client.model.ReplicationController;
-import org.apache.stratos.kubernetes.client.model.Selector;
-import org.apache.stratos.kubernetes.client.model.Service;
-import org.apache.stratos.kubernetes.client.model.State;
+import org.apache.stratos.kubernetes.client.model.*;
import org.junit.Before;
import org.junit.Test;
import org.junit.experimental.categories.Category;
+import java.net.InetAddress;
+import java.net.URL;
+
@Category(org.apache.stratos.kubernetes.client.LiveTests.class)
public class KubernetesApiClientLiveTest extends TestCase{
@@ -74,7 +65,7 @@ public class KubernetesApiClientLiveTest extends TestCase{
pod.setApiVersion("v1beta1");
pod.setId(podId);
pod.setKind("Pod");
- Label l = new Label();
+ Labels l = new Labels();
l.setName("nirmal");
pod.setLabels(l);
State desiredState = new State();
@@ -88,9 +79,9 @@ public class KubernetesApiClientLiveTest extends TestCase{
p.setContainerPort(8379);
p.setHostPort(8379);
c.setPorts(new Port[] { p });
- m.setContainers(new Container[] { c });
+ m.addContainer(c);
desiredState.setManifest(m);
- pod.setDesiredState(desiredState);
+ pod.setState(desiredState);
if (log.isDebugEnabled()) {
log.debug("Creating a Pod "+pod);
}
@@ -134,7 +125,7 @@ public class KubernetesApiClientLiveTest extends TestCase{
}
assertEquals(true, match);
- Pod[] selectedPods = client.queryPods(new Label[]{l});
+ Pod[] selectedPods = client.queryPods(new Labels[]{l});
assertEquals(1, selectedPods.length);
if (log.isDebugEnabled()) {
@@ -154,15 +145,15 @@ public class KubernetesApiClientLiveTest extends TestCase{
assertEquals(true, e instanceof KubernetesClientException);
}
- selectedPods = client.queryPods(new Label[]{l});
+ selectedPods = client.queryPods(new Labels[]{l});
assertEquals(0, selectedPods.length);
- Label ll = new Label();
+ Labels ll = new Labels();
ll.setName("nirmal2");
- selectedPods = client.queryPods(new Label[]{l, ll});
+ selectedPods = client.queryPods(new Labels[]{l, ll});
assertEquals(0, selectedPods.length);
- selectedPods = client.queryPods(new Label[]{});
+ selectedPods = client.queryPods(new Labels[]{});
assertEquals(0, selectedPods.length);
}
@@ -192,16 +183,16 @@ public class KubernetesApiClientLiveTest extends TestCase{
Port p = new Port();
p.setContainerPort(80);
container.setPorts(new Port[] { p });
- manifest.setContainers(new Container[] { container });
+ manifest.addContainer(container);
podState.setManifest(manifest);
- podTemplate.setDesiredState(podState);
- Label l1 = new Label();
+ podTemplate.setState(podState);
+ Labels l1 = new Labels();
l1.setName("nirmal");
podTemplate.setLabels(l1);
desiredState.setPodTemplate(podTemplate);
contr.setDesiredState(desiredState);
- Label l2 = new Label();
+ Labels l2 = new Labels();
l2.setName("nirmal");
contr.setLabels(l2);
if (log.isDebugEnabled()) {
@@ -219,24 +210,28 @@ public class KubernetesApiClientLiveTest extends TestCase{
assertEquals(1, client.getAllReplicationControllers().length);
- Pod[] pods = client.queryPods(new Label[]{l1});
+ Pod[] pods = client.queryPods(new Labels[]{l1});
assertEquals(replicas, pods.length);
// test incorrect replica count
replicas = -1;
try {
- client.updateReplicationController(id, replicas);
+ ReplicationController replicationController = client.getReplicationController(id);
+ replicationController.getDesiredState().setReplicas(replicas);
+ client.updateReplicationController(replicationController);
} catch (Exception e) {
assertEquals(true, e instanceof KubernetesClientException);
assertEquals(true, e.getMessage().contains("update failed"));
}
replicas = 0;
- client.updateReplicationController(id, replicas);
-
+ ReplicationController replicationController = client.getReplicationController(id);
+ replicationController.getDesiredState().setReplicas(replicas);
+ client.updateReplicationController(replicationController);
+
Thread.sleep(10000);
- pods = client.queryPods(new Label[]{l1});
+ pods = client.queryPods(new Labels[]{l1});
assertEquals(replicas, pods.length);
client.deleteReplicationController(id);
@@ -264,7 +259,9 @@ public class KubernetesApiClientLiveTest extends TestCase{
}
try {
- client.updateReplicationController(bogusContrId, 3);
+ replicationController = client.getReplicationController(bogusContrId);
+ replicationController.getDesiredState().setReplicas(3);
+ client.updateReplicationController(replicationController);
} catch (Exception e) {
assertEquals(true, e instanceof KubernetesClientException);
assertEquals("Replication Controller ["+bogusContrId+"] doesn't exist.", e.getMessage());
@@ -291,7 +288,7 @@ public class KubernetesApiClientLiveTest extends TestCase{
String publicIp = address.getHostAddress();
serv.setPublicIPs(new String[]{publicIp});
- Label l = new Label();
+ Labels l = new Labels();
l.setName("nirmal");
serv.setLabels(l);
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/unit/PodUnitTest.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/unit/PodUnitTest.java b/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/unit/PodUnitTest.java
index 81961d9..65d2108 100644
--- a/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/unit/PodUnitTest.java
+++ b/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/unit/PodUnitTest.java
@@ -23,7 +23,7 @@ package org.apache.stratos.kubernetes.client.unit;
import junit.framework.TestCase;
import org.apache.stratos.kubernetes.client.model.Container;
-import org.apache.stratos.kubernetes.client.model.Label;
+import org.apache.stratos.kubernetes.client.model.Labels;
import org.apache.stratos.kubernetes.client.model.Manifest;
import org.apache.stratos.kubernetes.client.model.Pod;
import org.apache.stratos.kubernetes.client.model.Port;
@@ -53,7 +53,7 @@ public class PodUnitTest extends TestCase{
pod.setResourceVersion(apiVersion);
String kind = "Pod";
pod.setKind(kind);
- Label l = new Label();
+ Labels l = new Labels();
l.setName("nirmal");
pod.setLabels(l);
State desiredState = new State();
@@ -67,9 +67,9 @@ public class PodUnitTest extends TestCase{
p.setContainerPort(8379);
p.setHostPort(8379);
c.setPorts(new Port[] { p });
- m.setContainers(new Container[] { c });
+ m.addContainer(c);
desiredState.setManifest(m);
- pod.setDesiredState(desiredState);
+ pod.setState(desiredState);
State currentState = desiredState;
pod.setCurrentState(currentState);
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/behaviour/CartridgeMgtBehaviour.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/behaviour/CartridgeMgtBehaviour.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/behaviour/CartridgeMgtBehaviour.java
index 384d494..1419f00 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/behaviour/CartridgeMgtBehaviour.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/behaviour/CartridgeMgtBehaviour.java
@@ -109,7 +109,7 @@ public abstract class CartridgeMgtBehaviour implements Serializable {
if ("DEPLOYMENT".equals(payloadParamSubstring)) {
isDeploymentParam = true;
}
- payloadData.add(payloadParamSubstring, property.getValue());
+ payloadData.add(payloadParamSubstring, String.valueOf(property.getValue()));
}
}
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/manager/CartridgeSubscriptionManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/manager/CartridgeSubscriptionManager.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/manager/CartridgeSubscriptionManager.java
index 4e74b42..d2a92e1 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/manager/CartridgeSubscriptionManager.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/manager/CartridgeSubscriptionManager.java
@@ -342,7 +342,7 @@ public class CartridgeSubscriptionManager {
continue;
}
if (prop.getName().equals(CartridgeConstants.LB_CLUSTER_ID)) {
- return prop.getValue();
+ return String.valueOf(prop.getValue());
}
}
}
@@ -493,7 +493,8 @@ public class CartridgeSubscriptionManager {
for(Property property : subscriptionData.getProperties().getProperties()){
if (property.getName().startsWith(CartridgeConstants.CUSTOM_PAYLOAD_PARAM_NAME_PREFIX)) {
String payloadParamName = property.getName();
- cartridgeSubscription.getPayloadData().add(payloadParamName.substring(payloadParamName.indexOf(".") + 1), property.getValue());
+ cartridgeSubscription.getPayloadData().add(payloadParamName.substring(
+ payloadParamName.indexOf(".") + 1), String.valueOf(property.getValue()));
}
}
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/ApplicationManagementUtil.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/ApplicationManagementUtil.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/ApplicationManagementUtil.java
index f570755..84fb2e3 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/ApplicationManagementUtil.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/ApplicationManagementUtil.java
@@ -223,7 +223,7 @@ public class ApplicationManagementUtil {
if ((property != null) && (property.getValue() != null)) {
org.apache.stratos.cloud.controller.stub.Property newProperty = new org.apache.stratos.cloud.controller.stub.Property();
newProperty.setName(property.getName());
- newProperty.setValue(property.getValue());
+ newProperty.setValue(String.valueOf(property.getValue()));
stubProps.addProperties(newProperty);
}
}
@@ -243,7 +243,7 @@ public class ApplicationManagementUtil {
if ((property != null) && (property.getValue() != null)) {
org.apache.stratos.autoscaler.stub.Property newProperty = new org.apache.stratos.autoscaler.stub.Property();
newProperty.setName(property.getName());
- newProperty.setValue(property.getValue());
+ newProperty.setValue(String.valueOf(property.getValue()));
stubProps.addProperties(newProperty);
}
}
[2/3] stratos git commit: Initial implementation of kubernetes iaas
createInstance(), terminateInstance() methods
Posted by im...@apache.org.
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/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
index 2b824dc..bdb36cc 100644
--- 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
@@ -19,7 +19,6 @@
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;
@@ -27,9 +26,7 @@ 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;
@@ -41,13 +38,9 @@ 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 org.apache.stratos.kubernetes.client.model.*;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
import java.util.concurrent.locks.Lock;
@@ -57,6 +50,7 @@ import java.util.concurrent.locks.Lock;
public class KubernetesIaas extends Iaas {
private static final Log log = LogFactory.getLog(KubernetesIaas.class);
+ private static final long POD_CREATION_TIMEOUT = 60000; // 1 min
private PartitionValidator partitionValidator;
@@ -71,9 +65,8 @@ public class KubernetesIaas extends Iaas {
}
@Override
- public MemberContext createInstance(MemberContext memberContext) throws CartridgeNotFoundException {
- memberContext = startContainer(memberContext);
- return memberContext;
+ public MemberContext startInstance(MemberContext memberContext) throws CartridgeNotFoundException {
+ return startContainer(memberContext);
}
@Override
@@ -83,17 +76,20 @@ public class KubernetesIaas extends Iaas {
@Override
public boolean isValidRegion(String region) throws InvalidRegionException {
- return false;
+ // No regions in kubernetes cluster
+ return true;
}
@Override
public boolean isValidZone(String region, String zone) throws InvalidZoneException, InvalidRegionException {
- return false;
+ // No zones in kubernetes cluster
+ return true;
}
@Override
public boolean isValidHost(String zone, String host) throws InvalidHostException {
- return false;
+ // No zones in kubernetes cluster
+ return true;
}
@Override
@@ -133,12 +129,13 @@ public class KubernetesIaas extends Iaas {
@Override
public void setDynamicPayload(byte[] payload) {
-
+ // Payload is passed via environment
}
@Override
- public void terminateInstance(MemberContext memberContext) throws InvalidCartridgeTypeException, InvalidMemberException {
-
+ public void terminateInstance(MemberContext memberContext) throws InvalidCartridgeTypeException,
+ InvalidMemberException, MemberTerminationFailedException {
+ terminateContainer(memberContext.getMemberId());
}
public MemberContext startContainer(MemberContext memberContext)
@@ -154,22 +151,25 @@ public class KubernetesIaas extends Iaas {
// Validate cluster id
String clusterId = memberContext.getClusterId();
- handleNullObject(clusterId, "Could not start containers, cluster id is null in member context.");
+ String memberId = memberContext.getMemberId();
+ 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);
+ + clusterId + " [member-id] " + memberId);
// Validate partition
Partition partition = memberContext.getPartition();
- handleNullObject(partition, "Could not start containers, partition not found in member context.");
+ handleNullObject(partition, "Could not start containers, 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 containers, cartridge not found: [cartridge-type] " + cartridgeType;
+ String msg = "Could not start containers, cartridge not found: [cartridge-type] " + cartridgeType + " " +
+ "[cluster-id] " + clusterId + " [member-id] " + memberId;
log.error(msg);
throw new CartridgeNotFoundException(msg);
}
@@ -179,123 +179,83 @@ public class KubernetesIaas extends Iaas {
partition.getProperties(),
partition.toString());
- KubernetesGroup kubernetesGroup =
- CloudControllerContext.getInstance().getKubernetesGroup(kubernetesClusterId);
+ KubernetesGroup kubernetesGroup = CloudControllerContext.getInstance().
+ getKubernetesGroup(kubernetesClusterId);
handleNullObject(kubernetesGroup, "Could not start container, kubernetes group not found: " +
- "[kubernetes-cluster-id] " + kubernetesClusterId);
+ "[kubernetes-cluster-id] " + kubernetesClusterId + " [cluster-id] " + clusterId +
+ " [member-id] " + memberId);
+ // Prepare kubernetes context
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.");
- }
+ kubernetesMasterIp, kubernetesMasterPort, kubernetesPortRange.getLower(),
+ kubernetesPortRange.getUpper());
- // secondly let's create a kubernetes service proxy to load balance these containers
- ContainerClusterContextToKubernetesService serviceFunction = new ContainerClusterContextToKubernetesService();
- Service service = serviceFunction.apply(memberContext);
+ // Get kubernetes API
+ KubernetesApiClient kubernetesApi = kubClusterContext.getKubApi();
- 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);
- }
+ // Create replication controller
+ createReplicationController(memberContext, clusterId, kubernetesApi);
- // 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);
+ // Create proxy services for port mappings
+ List<Service> services = createProxyServices(clusterContext, kubClusterContext, kubernetesApi);
- 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});
+ // Wait for pod to be created
+ Pod[] pods = waitForPodToBeCreated(memberContext, kubernetesApi);
+ if (pods.length != 1) {
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));
+ 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));
}
terminateContainers(clusterId);
return null;
}
-
+ Pod pod = pods[0];
if (log.isDebugEnabled()) {
- log.debug(String.format("Pods created : %s for cluster : %s", newlyCreatedPods.length, clusterId));
+ log.debug(String.format("Pod created: [cluster-id] %s [member-id] %s [pod-id] %s",
+ clusterId, memberId, pod.getId()));
}
- 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);
+ // Create member context
+ MemberContext newMemberContext = new MemberContext();
+ newMemberContext.setCartridgeType(cartridgeType);
+ newMemberContext.setClusterId(clusterId);
+ newMemberContext.setMemberId(memberContext.getMemberId());
+ newMemberContext.setClusterInstanceId(memberContext.getClusterInstanceId());
+ newMemberContext.setInitTime(memberContext.getInitTime());
+ newMemberContext.setNetworkPartitionId(memberContext.getNetworkPartitionId());
+ newMemberContext.setPartition(memberContext.getPartition());
+ newMemberContext.setInitTime(System.currentTimeMillis());
+ newMemberContext.setInstanceId(pod.getId());
+ newMemberContext.setPrivateIpAddress(pod.getCurrentState().getHostIP());
+ newMemberContext.setPublicIpAddress(pod.getCurrentState().getHostIP());
+ newMemberContext.setProperties(memberContext.getProperties());
+
+ Property servicesProperty = new Property();
+ servicesProperty.setName(StratosConstants.KUBERNETES_SERVICES);
+ servicesProperty.setValue(services);
+ newMemberContext.getProperties().addProperty(servicesProperty);
+
+ 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());
- log.info("Kubernetes entities are successfully starting up: " + memberContexts);
-
- return memberContext;
+ return newMemberContext;
} catch (Exception e) {
String msg = "Could not start container: " + memberContext.toString() + " Cause: " + e.getMessage();
log.error(msg, e);
@@ -308,26 +268,106 @@ public class KubernetesIaas extends Iaas {
}
}
- 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);
+ private Pod[] waitForPodToBeCreated(MemberContext memberContext, KubernetesApiClient kubernetesApi) throws KubernetesClientException, InterruptedException {
+ Labels labels = new Labels();
+ labels.setName(memberContext.getMemberId());
+ Pod[] pods = new Pod[0];
+ long startTime = System.currentTimeMillis();
+ while (pods.length == 1) {
+ pods = kubernetesApi.queryPods(new Labels[]{labels});
+ if (log.isDebugEnabled()) {
+ log.debug("Member pod: [member-id] " + memberContext.getMemberId() + " [count] " + pods.length);
}
- // send cluster removal notifications and update the state
- //onClusterRemoval(clusterId);
- } finally {
- if (lock != null) {
- CloudControllerContext.getInstance().releaseWriteLock(lock);
+ if ((System.currentTimeMillis() - startTime) > POD_CREATION_TIMEOUT) {
+ break;
+ }
+ Thread.sleep(5000);
+ }
+ return pods;
+ }
+
+ /**
+ * Create new replication controller for the cluster and generate environment variables using member context.
+ * @param memberContext
+ * @param clusterId
+ * @param kubernetesApi
+ * @throws KubernetesClientException
+ */
+ private ReplicationController createReplicationController(MemberContext memberContext, String clusterId, KubernetesApiClient kubernetesApi) throws KubernetesClientException {
+ if (log.isDebugEnabled()) {
+ log.debug("Creating kubernetes replication controller: [cluster-id] " + clusterId);
+ }
+ ContainerClusterContextToReplicationController controllerFunction = new ContainerClusterContextToReplicationController();
+ ReplicationController replicationController = controllerFunction.apply(memberContext);
+ kubernetesApi.createReplicationController(replicationController);
+ if (log.isDebugEnabled()) {
+ log.debug("Kubernetes replication controller successfully created: [cluster-id] " + clusterId);
+ }
+ return replicationController;
+ }
+
+ /**
+ * Create proxy services for the cluster
+ * @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) {
+ if (log.isInfoEnabled()) {
+ log.info(String.format("Creating kubernetes service: [cluster-id] %s [protocol] %s [port] %s ",
+ clusterId, portMapping.getProtocol(), portMapping.getPort()));
+ }
+
+ Service service = new Service();
+ service.setId(prepareKubernetesServiceId(clusterId, portMapping));
+ service.setApiVersion("v1beta1");
+ service.setKind("Service");
+ int nextServicePort = kubernetesClusterContext.getNextServicePort();
+ if(nextServicePort == -1) {
+ throw new RuntimeException("Service port not found");
+ }
+ service.setPort(nextServicePort);
+ Selector selector = new Selector();
+ selector.setName(clusterId);
+ service.setSelector(selector);
+
+ kubernetesApi.createService(service);
+ services.add(service);
+
+ if (log.isInfoEnabled()) {
+ log.info(String.format("Kubernetes service successfully created: [cluster-id] %s [protocol] %s " +
+ "[port] %s [proxy-port] %s", clusterId, portMapping.getProtocol(),
+ portMapping.getPort(), service.getPort()));
}
}
+ // Set service port and update
+ Property servicePortProperty = new Property();
+ servicePortProperty.setName(StratosConstants.KUBERNETES_SERVICES);
+ servicePortProperty.setValue(services);
+ clusterContext.getProperties().addProperty(servicePortProperty);
+ CloudControllerContext.getInstance().addClusterContext(clusterContext);
+
+ return services;
+ }
+
+ private String prepareKubernetesServiceId(String clusterId, PortMapping portMapping) {
+ return String.format("%s-%s-%s", clusterId, portMapping.getProtocol(), portMapping.getPort());
}
public MemberContext[] terminateContainers(String clusterId)
@@ -336,86 +376,50 @@ public class KubernetesIaas extends Iaas {
try {
lock = CloudControllerContext.getInstance().acquireMemberContextWriteLock();
- ClusterContext ctxt = CloudControllerContext.getInstance().getClusterContext(clusterId);
- handleNullObject(ctxt, "Kubernetes units temrination failed. Invalid cluster id. " + clusterId);
+ ClusterContext clusterContext = CloudControllerContext.getInstance().getClusterContext(clusterId);
+ handleNullObject(clusterContext, "Could not terminate containers, cluster not found: [cluster-id] " + clusterId);
- String kubernetesClusterId = CloudControllerUtil.getProperty(ctxt.getProperties(),
+ String kubernetesClusterId = CloudControllerUtil.getProperty(clusterContext.getProperties(),
StratosConstants.KUBERNETES_CLUSTER_ID);
- handleNullObject(kubernetesClusterId, "Kubernetes units termination failed. Cannot find '" +
- StratosConstants.KUBERNETES_CLUSTER_ID + "'. " + ctxt);
+ handleNullObject(kubernetesClusterId, "Could not terminate containers, kubernetes cluster id not found: " +
+ "[cluster-id] " + clusterId);
KubernetesClusterContext kubClusterContext = CloudControllerContext.getInstance().getKubernetesClusterContext(kubernetesClusterId);
- handleNullObject(kubClusterContext, "Kubernetes units termination failed. Cannot find a matching Kubernetes Cluster for cluster id: "
- + kubernetesClusterId);
+ handleNullObject(kubClusterContext, "Could not terminate containers, kubernetes cluster not found: " +
+ "[kubernetes-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) {
+ // Remove the services
+ Property servicesProperty = clusterContext.getProperties().getProperty(StratosConstants.KUBERNETES_SERVICES);
+ if (servicesProperty != null) {
+ List<Service> services = (List<Service>) servicesProperty.getValue();
+ for (Service service : services) {
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()));
+ 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);
}
}
- } 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);
+ 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 membersToBeRemoved.toArray(new MemberContext[0]);
+ return memberContextsRemoved.toArray(new MemberContext[memberContextsRemoved.size()]);
} finally {
if (lock != null) {
CloudControllerContext.getInstance().releaseWriteLock(lock);
@@ -423,184 +427,66 @@ public class KubernetesIaas extends Iaas {
}
}
- public MemberContext[] updateContainers(String clusterId, int containerCount)
- throws CartridgeNotFoundException {
+ /**
+ * 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");
- if (log.isDebugEnabled()) {
- log.debug("CloudControllerServiceImpl:updateContainers for cluster : " + clusterId);
- }
+ 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, "Container update failed. Invalid cluster id. " + clusterId);
+ handleNullObject(clusterContext, String.format("Could not terminate container, cluster context not found: " +
+ "[cluster-id] %s [member-id] %s", clusterId, memberId));
- String cartridgeType = clusterContext.getCartridgeType();
- Cartridge cartridge = CloudControllerContext.getInstance().getCartridge(cartridgeType);
+ 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));
- if (cartridge == null) {
- String msg = "Container update failed. No matching Cartridge found [type] " + cartridgeType
- + ". [cluster id] " + clusterId;
- log.error(msg);
- throw new CartridgeNotFoundException(msg);
- }
+ 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 {
- 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.");
- }
-
+ Labels l = new Labels();
+ l.setName(memberId);
// 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);
- }
+ 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()));
}
}
-
-
- // 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);
+ } 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);
}
- }
- }
-
- 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
+ // Remove the replication controller
try {
- // member id = pod id
- kubApi.deletePod(memberId);
+ 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: [member-id] %s", memberId);
+ 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);
}
@@ -614,30 +500,21 @@ public class KubernetesIaas extends Iaas {
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;
+ KubernetesClusterContext kubernetesClusterContext = CloudControllerContext.getInstance().
+ getKubernetesClusterContext(kubernetesClusterId);
+ if (kubernetesClusterContext != null) {
+ return kubernetesClusterContext;
}
- 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;
- }
+ 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. Cannot find property: '" + property + " in " + object);
+ handleNullObject(propVal, "Property validation failed. Could not find property: '" + property + " in " + object);
return propVal;
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/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 d4956d4..0c86ad2 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
@@ -40,7 +40,7 @@ public class MockIaas extends Iaas {
}
@Override
- public MemberContext createInstance(MemberContext memberContext) {
+ public MemberContext startInstance(MemberContext memberContext) {
return MockIaasService.getInstance().createInstance(memberContext);
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyBuilder.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyBuilder.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyBuilder.java
index 6220f24..400428a 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyBuilder.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyBuilder.java
@@ -155,7 +155,6 @@ public class TopologyBuilder {
try {
Topology topology = TopologyManager.getTopology();
-
for (Cluster cluster : appClusters) {
Service service = topology.getService(cluster.getServiceName());
if (service == null) {
@@ -168,13 +167,10 @@ public class TopologyBuilder {
}
TopologyManager.updateTopology(topology);
-
} finally {
TopologyManager.releaseWriteLock();
}
-
TopologyEventPublisher.sendApplicationClustersCreated(appId, appClusters);
-
}
public static void handleApplicationClustersRemoved(String appId, Set<ClusterDataHolder> clusterData) {
@@ -397,7 +393,8 @@ public class TopologyBuilder {
// adding the new member to the cluster after it is successfully started
// in IaaS.
Topology topology = TopologyManager.getTopology();
- Service service = topology.getService(memberContext.getCartridgeType());
+
+ Service service = topology.getService(memberContext.getCartridgeType());
String clusterId = memberContext.getClusterId();
Cluster cluster = service.getCluster(clusterId);
String memberId = memberContext.getMemberId();
@@ -436,7 +433,7 @@ public class TopologyBuilder {
if(cluster.isKubernetesCluster()){
// Update port mappings with generated service proxy port
// TODO: Need to properly fix with the latest Kubernetes version
- String serviceHostPortStr = CloudControllerUtil.getProperty(memberContext.getProperties(), StratosConstants.ALLOCATED_SERVICE_HOST_PORT);
+ String serviceHostPortStr = CloudControllerUtil.getProperty(memberContext.getProperties(), StratosConstants.KUBERNETES_SERVICES);
if(StringUtils.isEmpty(serviceHostPortStr)) {
log.warn("Kubernetes service host port not found for member: [member-id] " + memberId);
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java
index e67b26c..a5d78eb 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java
@@ -383,7 +383,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
org.apache.stratos.common.Properties properties = memberContext.getProperties();
if (properties != null) {
for (Property prop : properties.getProperties()) {
- addToPayload(payload, prop.getName(), prop.getValue());
+ addToPayload(payload, prop.getName(), String.valueOf(prop.getValue()));
}
}
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/InstanceCreator.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/InstanceCreator.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/InstanceCreator.java
index 01059ec..415b3a7 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/InstanceCreator.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/InstanceCreator.java
@@ -29,7 +29,6 @@ import org.apache.stratos.cloud.controller.iaases.Iaas;
import org.apache.stratos.cloud.controller.messaging.publisher.StatisticsDataPublisher;
import org.apache.stratos.cloud.controller.messaging.topology.TopologyBuilder;
import org.apache.stratos.messaging.domain.topology.MemberStatus;
-import org.jclouds.compute.domain.NodeMetadata;
import java.util.concurrent.locks.Lock;
@@ -98,7 +97,7 @@ public class InstanceCreator implements Runnable {
}
private MemberContext createInstance(Iaas iaas, MemberContext memberContext) throws CartridgeNotFoundException {
- memberContext = iaas.createInstance(memberContext);
+ memberContext = iaas.startInstance(memberContext);
// Validate node id
String instanceId = memberContext.getInstanceId();
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java
index 8dc6164..b2af060 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java
@@ -111,7 +111,7 @@ public class CloudControllerUtil {
org.apache.stratos.common.Properties props = config.getProperties();
if (props != null) {
for (Property prop : props.getProperties()) {
- cartridge.addProperty(prop.getName(), prop.getValue());
+ cartridge.addProperty(prop.getName(), String.valueOf(prop.getValue()));
}
}
@@ -178,7 +178,7 @@ public class CloudControllerUtil {
org.apache.stratos.common.Properties props1 = iaasConfig.getProperties();
if (props1 != null) {
for (Property prop : props1.getProperties()) {
- iaasProvider.addProperty(prop.getName(), prop.getValue());
+ iaasProvider.addProperty(prop.getName(), String.valueOf(prop.getValue()));
}
}
@@ -261,7 +261,7 @@ public class CloudControllerUtil {
public static String getProperty(Properties properties, String key, String defaultValue) {
if (key != null && properties != null) {
for (Iterator<Entry<Object, Object>> iterator = properties.entrySet().iterator(); iterator.hasNext();) {
- Entry<Object, Object> type = (Entry<Object, Object>) iterator.next();
+ Entry<Object, Object> type = iterator.next();
String propName = type.getKey().toString();
String propValue = type.getValue().toString();
if (key.equals(propName)) {
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/Properties.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/Properties.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/Properties.java
index 638daba..9dcf5b2 100644
--- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/Properties.java
+++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/Properties.java
@@ -54,6 +54,15 @@ public class Properties implements Serializable {
}
}
+ public Property getProperty(String name) {
+ for(Property property : properties) {
+ if(property.getName().equals(name)) {
+ return property;
+ }
+ }
+ return null;
+ }
+
public void setProperties(Property[] properties) {
this.properties = new ArrayList<Property>();
Collections.addAll(this.properties, properties.clone());
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/Property.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/Property.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/Property.java
index 7ac6b02..4e50252 100644
--- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/Property.java
+++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/Property.java
@@ -28,7 +28,7 @@ public class Property implements Serializable, Cloneable {
private static final long serialVersionUID = -2191782657999410197L;
private String name;
- private String value;
+ private Object value;
public Property() {
}
@@ -46,11 +46,11 @@ public class Property implements Serializable, Cloneable {
this.name = name;
}
- public String getValue() {
+ public Object getValue() {
return value;
}
- public void setValue(String value) {
+ public void setValue(Object value) {
this.value = value;
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/constants/StratosConstants.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/constants/StratosConstants.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/constants/StratosConstants.java
index d6bf002..7583f89 100644
--- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/constants/StratosConstants.java
+++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/constants/StratosConstants.java
@@ -154,7 +154,7 @@ public class StratosConstants {
public static final String KUBERNETES_MIN_REPLICAS = "KUBERNETES_REPLICAS_MIN";
public static final String KUBERNETES_MAX_REPLICAS = "KUBERNETES_REPLICAS_MAX";
public static final String KUBERNETES_PORT_RANGE = "KUBERNETES_PORT_RANGE";
- public static final String ALLOCATED_SERVICE_HOST_PORT = "ALLOCATED_SERVICE_HOST_PORT";
+ public static final String KUBERNETES_SERVICES = "KUBERNETES_SERVICES";
//drools related constants
public static final String DROOLS_DIR_NAME = "drools";
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java
index f075b8e..beec22f 100644
--- a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java
+++ b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java
@@ -267,78 +267,80 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
}
@Override
- public void updateReplicationController(String controllerId, int replicas)
+ public void updateReplicationController(ReplicationController replicationController)
throws KubernetesClientException {
- // gets the current controller
- ReplicationController controller = getReplicationController(controllerId);
-
try {
- // update the number of replicas
- controller.getDesiredState().setReplicas(replicas);
-
GsonBuilder gsonBuilder = new GsonBuilder();
Gson gson = gsonBuilder.create();
- String content = gson.toJson(controller);
+ String content = gson.toJson(replicationController);
if (log.isDebugEnabled()) {
- log.debug("UpdateReplicationController Request Body : "
+ log.debug("Update kubernetes replication controller request body: "
+ content);
}
- URI uri = new URIBuilder(baseURL+"replicationControllers/"+controllerId).build();
+ URI uri = new URIBuilder(baseURL+"replicationControllers/"+replicationController.getId()).build();
KubernetesResponse res = restClient.doPut(uri, content);
- handleNullResponse("Replication Controller ["+controllerId+"] update failed.", res);
+ handleNullResponse("Could not update kubernetes replication controller: [replication-controller-id] " +
+ replicationController.getId(), res);
if (res.getStatusCode() != HttpStatus.SC_ACCEPTED
&& res.getStatusCode() != HttpStatus.SC_OK) {
- String msg = "Replication Controller [" + controller
- + "] update failed. Error: "
- + res.getReason();
- log.error(msg);
- throw new KubernetesClientException(msg);
+ String message = "Could not update kubernetes replication controller: [replication-controller-id] " +
+ replicationController.getId() + ": " + res.getReason();
+ log.error(message);
+ throw new KubernetesClientException(message);
}
} catch (KubernetesClientException e) {
+ String message = "Could not update kubernetes replication controller: [replication-controller-id] " +
+ replicationController.getId();
+ log.error(message, e);
throw e;
} catch (Exception e) {
- String msg = "Error while updating Replication Controller: "
- + controller;
- log.error(msg, e);
- throw new KubernetesClientException(msg, e);
-
+ String message = "Could not update kubernetes replication controller: [replication-controller-id] " +
+ replicationController.getId();
+ log.error(message, e);
+ throw new KubernetesClientException(message, e);
}
}
@Override
- public void deleteReplicationController(String controllerId)
+ public void deleteReplicationController(String replicationControllerId)
throws KubernetesClientException {
try {
- URI uri = new URIBuilder(baseURL+"replicationControllers/"+controllerId).build();
+ URI uri = new URIBuilder(baseURL+"replicationControllers/"+ replicationControllerId).build();
KubernetesResponse res = restClient.doDelete(uri);
- handleNullResponse("Replication Controller ["+controllerId+"] deletion failed.", res);
+ handleNullResponse("Could not delete kubernetes replication controller: [replication-controller-id] " +
+ replicationControllerId, res);
if (res.getStatusCode() == HttpStatus.SC_NOT_FOUND) {
- String msg = "Replication Controller ["+controllerId+"] doesn't exist.";
- log.error(msg);
- throw new KubernetesClientException(msg);
+ String message = "Replication controller does not exist: [replicateion-controller-id] "
+ + replicationControllerId;
+ log.error(message);
+ throw new KubernetesClientException(message);
}
if (res.getStatusCode() != HttpStatus.SC_ACCEPTED &&
res.getStatusCode() != HttpStatus.SC_OK) {
- String msg = "Replication Controller ["+controllerId+"] deletion failed. Error: "+
- res.getReason();
- log.error(msg);
- throw new KubernetesClientException(msg);
+ String message = "Could not delete kubernetes replication controller: [replication-controller-id] " +
+ replicationControllerId + ": " + res.getReason();
+ log.error(message);
+ throw new KubernetesClientException(message);
}
} catch (KubernetesClientException e) {
+ String message = "Could not delete kubernetes replication controller: [replication-controller-id] " +
+ replicationControllerId;
+ log.error(message, e);
throw e;
} catch (Exception e) {
- String msg = "Error while deleting Replication Controller with Controller ID: "+controllerId;
- log.error(msg, e);
- throw new KubernetesClientException(msg, e);
+ String message = "Could not delete kubernetes replication controller: [replication-controller-id] " +
+ replicationControllerId;
+ log.error(message, e);
+ throw new KubernetesClientException(message, e);
}
}
@@ -440,7 +442,7 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
throws KubernetesClientException {
try {
- URI uri = new URIBuilder(baseURL+"services/"+serviceId).build();
+ URI uri = new URIBuilder(baseURL + "services/" + serviceId).build();
KubernetesResponse res = restClient.doDelete(uri);
handleNullResponse("Service ["+serviceId+"] deletion failed.", res);
@@ -469,10 +471,10 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
}
@Override
- public Pod[] queryPods(Label[] label) throws KubernetesClientException {
+ public Pod[] queryPods(Labels[] labels) throws KubernetesClientException {
try {
- String labelQuery = getLabelQuery(label);
+ String labelQuery = getLabelQuery(labels);
URI uri = new URIBuilder(baseURL + "pods").addParameter("labels", labelQuery).build();
KubernetesResponse response = restClient.doGet(uri);
@@ -497,9 +499,9 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
}
}
- private String getLabelQuery(Label[] label) {
+ private String getLabelQuery(Labels[] labels) {
String query = "";
- for (Label l : label) {
+ for (Labels l : labels) {
query = query.concat("name="+l.getName()+",");
}
return query.endsWith(",") ? query.substring(0, query.length()-1) : query;
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/interfaces/KubernetesAPIClientInterface.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/interfaces/KubernetesAPIClientInterface.java b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/interfaces/KubernetesAPIClientInterface.java
index aab4f52..72eda49 100644
--- a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/interfaces/KubernetesAPIClientInterface.java
+++ b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/interfaces/KubernetesAPIClientInterface.java
@@ -45,11 +45,11 @@ public interface KubernetesAPIClientInterface {
/**
* Run a label query and retrieve a sub set of Pods.
- * @param label of labels for the label query
+ * @param labels of labels for the label query
* @return Pods selected Pods by executing the label query.
* @throws KubernetesClientException
*/
- public Pod[] queryPods(Label[] label) throws KubernetesClientException;
+ public Pod[] queryPods(Labels[] labels) throws KubernetesClientException;
/**
* Create a new Pod
@@ -84,25 +84,24 @@ public interface KubernetesAPIClientInterface {
/**
* Create a new Replication Controller
- * @param controller controller to be created
+ * @param replicationController replication controller to be created
* @throws KubernetesClientException
*/
- public void createReplicationController(ReplicationController controller) throws KubernetesClientException;
+ public void createReplicationController(ReplicationController replicationController) throws KubernetesClientException;
/**
* Update a Replication Controller (update the number of replicas).
- * @param controllerId id of the controller to be updated
- * @param replicas update the replicas count of the current controller.
+ * @param replicationController replication controller to be updated
* @throws KubernetesClientException
*/
- public void updateReplicationController(String controllerId, int replicas) throws KubernetesClientException;
+ public void updateReplicationController(ReplicationController replicationController) throws KubernetesClientException;
/**
* Delete a Replication Controller.
- * @param controllerId controller id controller id to be deleted.
+ * @param replicationControllerId controller id controller id to be deleted.
* @throws KubernetesClientException
*/
- public void deleteReplicationController(String controllerId) throws KubernetesClientException;
+ public void deleteReplicationController(String replicationControllerId) throws KubernetesClientException;
/* Services API */
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/Container.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/Container.java b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/Container.java
index d0187ee..2496523 100644
--- a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/Container.java
+++ b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/Container.java
@@ -37,45 +37,59 @@ public class Container {
public String getName() {
return name;
}
+
public void setName(String name) {
this.name = name;
}
+
public String getImage() {
return image;
}
+
public void setImage(String image) {
this.image = image;
}
+
public String getWorkingDir() {
return workingDir;
}
+
public void setWorkingDir(String workingDir) {
this.workingDir = workingDir;
}
+
public String[] getCommand() {
return command;
}
+
public void setCommand(String[] command) {
this.command = ArrayUtils.clone(command);
}
+
public VolumeMount[] getVolumeMounts() {
return volumeMounts;
}
+
public void setVolumeMounts(VolumeMount[] volumeMounts) {
this.volumeMounts = ArrayUtils.clone(volumeMounts);
}
+
public Port[] getPorts() {
return ports;
}
+
public void setPorts(Port[] ports) {
this.ports = ArrayUtils.clone(ports);
}
+
public EnvironmentVariable[] getEnv() {
return env;
}
+
public void setEnv(EnvironmentVariable[] env) {
this.env = ArrayUtils.clone(env);
}
+
@Override
public String toString() {
return "Container [name=" + name + ", image=" + image + ", workingDir="
@@ -84,6 +98,4 @@ public class Container {
+ ", ports=" + Arrays.toString(ports) + ", env="
+ Arrays.toString(env) + "]";
}
-
-
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/EnvironmentVariable.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/EnvironmentVariable.java b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/EnvironmentVariable.java
index 7c9644a..4fb9ab7 100644
--- a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/EnvironmentVariable.java
+++ b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/EnvironmentVariable.java
@@ -42,6 +42,4 @@ public class EnvironmentVariable {
public String toString() {
return "EnvironmentVariable [name=" + name + ", value=" + value + "]";
}
-
-
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/Label.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/Label.java b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/Label.java
deleted file mode 100644
index 873e882..0000000
--- a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/Label.java
+++ /dev/null
@@ -1,40 +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.kubernetes.client.model;
-
-public class Label {
-
- private String name;
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- @Override
- public String toString() {
- return "Label [name=" + name + "]";
- }
-
-}
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/Labels.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/Labels.java b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/Labels.java
new file mode 100644
index 0000000..dfcf082
--- /dev/null
+++ b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/Labels.java
@@ -0,0 +1,42 @@
+/*
+ *
+ * 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.kubernetes.client.model;
+
+/**
+ * Labels can contain a list of key/value pairs. Currently we are only using one key/value pair: name/value.
+ */
+public class Labels {
+
+ private String name;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public String toString() {
+ return "Label [name=" + name + "]";
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/Manifest.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/Manifest.java b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/Manifest.java
index eef33a4..c4c850e 100644
--- a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/Manifest.java
+++ b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/Manifest.java
@@ -20,7 +20,9 @@
*/
package org.apache.stratos.kubernetes.client.model;
+import java.util.ArrayList;
import java.util.Arrays;
+import java.util.List;
import org.apache.commons.lang3.ArrayUtils;
@@ -33,38 +35,51 @@ public class Manifest {
private String version;
private String id;
- private Container[] containers;
- private Volume[] volumes;
-
+ private List<Container> containers;
+ private List<Volume> volumes;
+
+ public Manifest() {
+ containers = new ArrayList<Container>();
+ volumes = new ArrayList<Volume>();
+ }
+
public String getVersion() {
return version;
}
+
public void setVersion(String version) {
this.version = version;
}
+
public String getId() {
return id;
}
+
public void setId(String id) {
this.id = id;
}
- public Container[] getContainers() {
+
+ public List<Container> getContainers() {
return containers;
}
- public void setContainers(Container[] containers) {
- this.containers = ArrayUtils.clone(containers);
+
+ public void addContainer(Container container) {
+ containers.add(container);
}
- public Volume[] getVolumes() {
+
+ public List<Volume> getVolumes() {
return volumes;
}
- public void setVolumes(Volume[] volumes) {
- this.volumes = ArrayUtils.clone(volumes);
+
+ public void addVolume(Volume volume) {
+ volumes.add(volume);
}
+
@Override
public String toString() {
return "Manifest [version=" + version + ", id=" + id + ", containers="
- + Arrays.toString(containers) + ", volumes="
- + Arrays.toString(volumes) + "]";
+ + containers + ", volumes="
+ + volumes + "]";
}
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/Pod.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/Pod.java b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/Pod.java
index 49334d4..a875105 100644
--- a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/Pod.java
+++ b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/Pod.java
@@ -41,80 +41,104 @@ public class Pod {
private String status;
private String message;
private String code;
- private Label labels;
+ private Labels labels;
public String getKind() {
return kind;
}
+
public void setKind(String kind) {
this.kind = kind;
}
+
public String getId() {
return id;
}
+
public void setId(String id) {
this.id = id;
}
+
public String getCreationTimestamp() {
return creationTimestamp;
}
+
public void setCreationTimestamp(String creationTimestamp) {
this.creationTimestamp = creationTimestamp;
}
+
public String getSelfLink() {
return selfLink;
}
+
public void setSelfLink(String selfLink) {
this.selfLink = selfLink;
}
+
public State getDesiredState() {
return desiredState;
}
- public void setDesiredState(State desiredState) {
+
+ public void setState(State desiredState) {
this.desiredState = desiredState;
}
+
public State getCurrentState() {
return currentState;
}
+
public void setCurrentState(State currentState) {
this.currentState = currentState;
}
+
public String getResourceVersion() {
return resourceVersion;
}
+
public void setResourceVersion(String resourceVersion) {
this.resourceVersion = resourceVersion;
}
+
public String getApiVersion() {
return apiVersion;
}
+
public void setApiVersion(String apiVersion) {
this.apiVersion = apiVersion;
}
- public Label getLabels() {
+
+ public Labels getLabels() {
return labels;
}
- public void setLabels(Label labels) {
+
+ public void setLabels(Labels labels) {
this.labels = labels;
}
+
public String getStatus() {
return status;
}
+
public void setStatus(String status) {
this.status = status;
}
+
public String getMessage() {
return message;
}
+
public void setMessage(String message) {
this.message = message;
}
+
public String getCode() {
return code;
}
+
public void setCode(String code) {
this.code = code;
}
+
@Override
public String toString() {
return "Pod [kind=" + kind + ", id=" + id + ", creationTimestamp="
@@ -148,6 +172,4 @@ public class Pod {
return false;
return true;
}
-
-
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/ReplicationController.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/ReplicationController.java b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/ReplicationController.java
index 2f1d822..a8a757e 100644
--- a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/ReplicationController.java
+++ b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/ReplicationController.java
@@ -21,6 +21,8 @@
package org.apache.stratos.kubernetes.client.model;
import javax.xml.bind.annotation.XmlRootElement;
+import java.util.ArrayList;
+import java.util.List;
/**
*
@@ -35,42 +37,53 @@ public class ReplicationController {
private String creationTimestamp;
private String selfLink;
private String apiVersion;
- private Label labels;
+ private Labels labels;
private State desiredState;
-
+
public String getKind() {
return kind;
}
+
public void setKind(String kind) {
this.kind = kind;
}
+
public String getId() {
return id;
}
+
public void setId(String id) {
this.id = id;
}
+
public String getCreationTimestamp() {
return creationTimestamp;
}
+
public void setCreationTimestamp(String creationTimestamp) {
this.creationTimestamp = creationTimestamp;
}
+
public String getSelfLink() {
return selfLink;
}
+
public void setSelfLink(String selfLink) {
this.selfLink = selfLink;
}
- public Label getLabels() {
+
+ public Labels getLabels() {
return labels;
}
- public void setLabels(Label labels) {
+
+ public void setLabels(Labels labels) {
this.labels = labels;
}
+
public State getDesiredState() {
return desiredState;
}
+
public void setDesiredState(State desiredState) {
this.desiredState = desiredState;
}
@@ -78,15 +91,19 @@ public class ReplicationController {
public String getApiVersion() {
return apiVersion;
}
+
public void setApiVersion(String apiVersion) {
this.apiVersion = apiVersion;
}
+
public int getResourceVersion() {
return resourceVersion;
}
+
public void setResourceVersion(int resourceVersion) {
this.resourceVersion = resourceVersion;
}
+
@Override
public String toString() {
return "ReplicationController [kind=" + kind + ", id=" + id
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/Service.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/Service.java b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/Service.java
index 0950d1f..9cc904e 100644
--- a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/Service.java
+++ b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/Service.java
@@ -41,81 +41,102 @@ public class Service {
private String containerPort;
private Selector selector;
private String apiVersion;
- private Label labels;
+ private Labels labels;
private String[] publicIPs;
public String getKind() {
return kind;
}
+
public void setKind(String kind) {
this.kind = kind;
}
+
public String getId() {
return id;
}
+
public void setId(String id) {
this.id = id;
}
+
public String getCreationTimestamp() {
return creationTimestamp;
}
+
public void setCreationTimestamp(String creationTimestamp) {
this.creationTimestamp = creationTimestamp;
}
+
public String getSelfLink() {
return selfLink;
}
+
public void setSelfLink(String selfLink) {
this.selfLink = selfLink;
}
+
public String getApiVersion() {
return apiVersion;
}
+
public void setApiVersion(String apiVersion) {
this.apiVersion = apiVersion;
}
- public Label getLabels() {
+
+ public Labels getLabels() {
return labels;
}
- public void setLabels(Label labels) {
+
+ public void setLabels(Labels labels) {
this.labels = labels;
}
+
public String getName() {
return name;
}
+
public void setName(String name) {
this.name = name;
}
+
public int getPort() {
return port;
}
+
public void setPort(int port) {
this.port = port;
}
+
public String getContainerPort() {
return containerPort;
}
+
public void setContainerPort(String containerPort) {
this.containerPort = containerPort;
}
+
public Selector getSelector() {
return selector;
}
+
public void setSelector(Selector selector) {
this.selector = selector;
}
+
public String[] getPublicIPs() {
return publicIPs;
}
+
public void setPublicIPs(String[] publicIPs) {
this.publicIPs = publicIPs;
}
- @Override
+
+ @Override
public String toString() {
return "Service [kind=" + kind + ", id=" + id + ", creationTimestamp=" + creationTimestamp + ", selfLink="
+ selfLink + ", name=" + name + ", port=" + port + ", containerPort=" + containerPort + ", selector="
+ selector + ", apiVersion=" + apiVersion + ", labels=" + labels + ", publicIPs="
+ Arrays.toString(publicIPs) + "]";
}
-
}
[3/3] stratos git commit: Initial implementation of kubernetes iaas
createInstance(), terminateInstance() methods
Posted by im...@apache.org.
Initial implementation of kubernetes iaas createInstance(), terminateInstance() methods
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/405ff36d
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/405ff36d
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/405ff36d
Branch: refs/heads/master
Commit: 405ff36de8c79cd1b786272cb7ebeb1c1644c8f4
Parents: 9a355d9
Author: Imesh Gunaratne <im...@apache.org>
Authored: Sun Dec 21 21:38:51 2014 +0530
Committer: Imesh Gunaratne <im...@apache.org>
Committed: Sun Dec 21 21:40:19 2014 +0530
----------------------------------------------------------------------
.../autoscaler/api/AutoScalerServiceImpl.java | 3 +-
.../applications/ApplicationUtils.java | 4 +-
.../partition/ClusterLevelPartitionContext.java | 4 +-
.../partition/GroupLevelPartitionContext.java | 2 +-
.../internal/AutoscalerServerComponent.java | 4 +-
.../kubernetes/KubernetesManager.java | 4 +-
.../monitor/cluster/ClusterMonitor.java | 2 +-
.../autoscaler/registry/RegistryManager.java | 2 +-
.../stratos/autoscaler/util/AutoscalerUtil.java | 2 +-
.../publisher/CartridgeAgentEventPublisher.java | 1 +
.../domain/ApplicationClusterContext.java | 3 -
.../cloud/controller/domain/Cartridge.java | 2 +-
.../cloud/controller/domain/ClusterContext.java | 7 +
.../domain/KubernetesClusterContext.java | 48 +-
...inerClusterContextToKubernetesContainer.java | 25 +-
...tainerClusterContextToKubernetesService.java | 79 +--
...erClusterContextToReplicationController.java | 54 +-
.../functions/PodToMemberContext.java | 36 +-
.../stratos/cloud/controller/iaases/Iaas.java | 4 +-
.../cloud/controller/iaases/JcloudsEC2Iaas.java | 6 +-
.../cloud/controller/iaases/JcloudsIaas.java | 5 +-
.../controller/iaases/JcloudsOpenstackIaas.java | 2 +-
.../cloud/controller/iaases/KubernetesIaas.java | 617 ++++++++-----------
.../cloud/controller/iaases/MockIaas.java | 2 +-
.../messaging/topology/TopologyBuilder.java | 9 +-
.../impl/CloudControllerServiceImpl.java | 2 +-
.../services/impl/InstanceCreator.java | 3 +-
.../controller/util/CloudControllerUtil.java | 6 +-
.../org/apache/stratos/common/Properties.java | 9 +
.../org/apache/stratos/common/Property.java | 6 +-
.../common/constants/StratosConstants.java | 2 +-
.../kubernetes/client/KubernetesApiClient.java | 80 +--
.../KubernetesAPIClientInterface.java | 17 +-
.../kubernetes/client/model/Container.java | 16 +-
.../client/model/EnvironmentVariable.java | 2 -
.../stratos/kubernetes/client/model/Label.java | 40 --
.../stratos/kubernetes/client/model/Labels.java | 42 ++
.../kubernetes/client/model/Manifest.java | 37 +-
.../stratos/kubernetes/client/model/Pod.java | 34 +-
.../client/model/ReplicationController.java | 25 +-
.../kubernetes/client/model/Service.java | 31 +-
.../live/KubernetesApiClientLiveTest.java | 61 +-
.../kubernetes/client/unit/PodUnitTest.java | 8 +-
.../behaviour/CartridgeMgtBehaviour.java | 2 +-
.../manager/CartridgeSubscriptionManager.java | 5 +-
.../utils/ApplicationManagementUtil.java | 4 +-
46 files changed, 651 insertions(+), 708 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
index 43e881d..4499f17 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
@@ -413,7 +413,8 @@ public class AutoScalerServiceImpl implements AutoScalerServiceInterface {
Properties properties = entry.getValue();
if (properties != null) {
for (Property property : properties.getProperties()) {
- metaDataServiceClien.addPropertyToCluster(appId, alias, property.getName(), property.getValue());
+ metaDataServiceClien.addPropertyToCluster(appId, alias, property.getName(),
+ String.valueOf(property.getValue()));
}
}
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/ApplicationUtils.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/ApplicationUtils.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/ApplicationUtils.java
index d0918e6..f48b8a9 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/ApplicationUtils.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/ApplicationUtils.java
@@ -227,7 +227,7 @@ public class ApplicationUtils {
if ("DEPLOYMENT".equals(payloadParamSubstring)) {
isDeploymentParam = true;
}
- payloadData.add(payloadParamSubstring, propertyEntry.getValue());
+ payloadData.add(payloadParamSubstring, String.valueOf(propertyEntry.getValue()));
}
}
}
@@ -239,7 +239,7 @@ public class ApplicationUtils {
if (property.getName().startsWith("payload_parameter.")) {
String payloadParamName = property.getName();
String payloadParamSubstring = payloadParamName.substring(payloadParamName.indexOf(".") + 1);
- payloadData.add(payloadParamSubstring, property.getValue());
+ payloadData.add(payloadParamSubstring, String.valueOf(property.getValue()));
}
}
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java
index 547aca7..5724e71 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java
@@ -145,7 +145,7 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se
}
synchronized (pendingMembers) {
for (Iterator<MemberContext> iterator = pendingMembers.iterator(); iterator.hasNext(); ) {
- MemberContext pendingMember = (MemberContext) iterator.next();
+ MemberContext pendingMember = iterator.next();
if (id.equals(pendingMember.getMemberId())) {
iterator.remove();
return true;
@@ -653,7 +653,7 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se
Iterator<Entry<String, MemberContext>> iterator = obsoletedMembers.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<String, MemberContext> pairs = iterator.next();
- MemberContext obsoleteMember = (MemberContext) pairs.getValue();
+ MemberContext obsoleteMember = pairs.getValue();
if (obsoleteMember == null) {
continue;
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/GroupLevelPartitionContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/GroupLevelPartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/GroupLevelPartitionContext.java
index ccb8cfe..6a6b93f 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/GroupLevelPartitionContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/GroupLevelPartitionContext.java
@@ -177,7 +177,7 @@ public class GroupLevelPartitionContext extends PartitionContext implements Seri
}
synchronized (pendingInstances) {
for (Iterator<Instance> iterator = pendingInstances.iterator(); iterator.hasNext(); ) {
- Instance pendingInstance = (Instance) iterator.next();
+ Instance pendingInstance = iterator.next();
if (id.equals(pendingInstance.getInstanceId())) {
iterator.remove();
return true;
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServerComponent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServerComponent.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServerComponent.java
index 5fc6f89..9de9587 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServerComponent.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServerComponent.java
@@ -39,7 +39,6 @@ import org.apache.stratos.autoscaler.util.ServiceReferenceHolder;
import org.apache.stratos.cloud.controller.stub.domain.Partition;
import org.apache.stratos.common.kubernetes.KubernetesGroup;
import org.apache.stratos.common.threading.StratosThreadPool;
-import org.drools.reteoo.PartitionManager;
import org.osgi.service.component.ComponentContext;
import org.wso2.carbon.ntask.core.service.TaskService;
import org.wso2.carbon.registry.api.RegistryException;
@@ -50,7 +49,6 @@ import java.io.File;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.ExecutorService;
-import java.util.logging.FileHandler;
/**
* @scr.component name=org.apache.stratos.autoscaler.internal.AutoscalerServerComponent"
@@ -136,7 +134,7 @@ public class AutoscalerServerComponent {
Iterator<KubernetesGroup> kubernetesGroupIterator = kubernetesGroupList.iterator();
while (kubernetesGroupIterator.hasNext()) {
KubernetesGroup kubernetesGroup = kubernetesGroupIterator.next();
- KubernetesManager.getInstance().addNewKubernetesGroup(kubernetesGroup);
+ KubernetesManager.getInstance().addKubernetesGroup(kubernetesGroup);
}
//starting the processor chain
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/kubernetes/KubernetesManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/kubernetes/KubernetesManager.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/kubernetes/KubernetesManager.java
index 4eb420a..e67fd8d 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/kubernetes/KubernetesManager.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/kubernetes/KubernetesManager.java
@@ -158,9 +158,9 @@ public class KubernetesManager {
/**
- * Register a new KubernetesGroup in AutoScaler.
+ * Register a KubernetesGroup in AutoScaler.
*/
- public synchronized boolean addNewKubernetesGroup(KubernetesGroup kubernetesGroup)
+ public synchronized boolean addKubernetesGroup(KubernetesGroup kubernetesGroup)
throws InvalidKubernetesGroupException {
if (kubernetesGroup == null) {
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java
index 27cad51..2211775 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java
@@ -176,7 +176,7 @@ public class ClusterMonitor extends AbstractClusterMonitor {
if (props != null && props.getProperties() != null) {
for (Property prop : props.getProperties()) {
if (prop.getName().equals("PRIMARY")) {
- if (Boolean.parseBoolean(prop.getValue())) {
+ if (Boolean.parseBoolean(String.valueOf(prop.getValue()))) {
log.debug("Adding member id [" + memberContext.getMemberId() + "] " +
"member instance id [" + memberContext.getInstanceId() + "] as a primary member");
return true;
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/registry/RegistryManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/registry/RegistryManager.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/registry/RegistryManager.java
index 28e107c..5cb8bda 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/registry/RegistryManager.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/registry/RegistryManager.java
@@ -275,7 +275,7 @@ public class RegistryManager {
String applicationResourcePath = AutoScalerConstants.AUTOSCALER_RESOURCE +
AutoScalerConstants.APPLICATION_CONTEXTS_RESOURCE + "/" + applicationId;
- return (ApplicationContext) getApplicationContextByResourcePath(applicationResourcePath);
+ return getApplicationContextByResourcePath(applicationResourcePath);
} finally {
PrivilegedCarbonContext.endTenantFlow();
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
index 144d062..ebf5908 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
@@ -327,7 +327,7 @@ public class AutoscalerUtil {
if ((property != null) && (property.getValue() != null)) {
org.apache.stratos.cloud.controller.stub.Property newProperty = new org.apache.stratos.cloud.controller.stub.Property();
newProperty.setName(property.getName());
- newProperty.setValue(property.getValue());
+ newProperty.setValue(String.valueOf(property.getValue()));
stubProps.addProperties(newProperty);
}
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/event/publisher/CartridgeAgentEventPublisher.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/event/publisher/CartridgeAgentEventPublisher.java b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/event/publisher/CartridgeAgentEventPublisher.java
index 5b01a4f..269cb47 100644
--- a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/event/publisher/CartridgeAgentEventPublisher.java
+++ b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/event/publisher/CartridgeAgentEventPublisher.java
@@ -56,6 +56,7 @@ public class CartridgeAgentEventPublisher {
CartridgeAgentConfiguration.getInstance().getClusterInstanceId(),
CartridgeAgentConfiguration.getInstance().getNetworkPartitionId(),
CartridgeAgentConfiguration.getInstance().getPartitionId());
+
String topic = Util.getMessageTopicName(event);
EventPublisher eventPublisher = EventPublisherPool
.getPublisher(topic);
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ApplicationClusterContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ApplicationClusterContext.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ApplicationClusterContext.java
index ca3457d..cdd8cf3 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ApplicationClusterContext.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ApplicationClusterContext.java
@@ -43,11 +43,9 @@ public class ApplicationClusterContext {
// properties
private Properties properties;
-
public ApplicationClusterContext() {
}
-
public String getClusterId() {
return clusterId;
}
@@ -139,5 +137,4 @@ public class ApplicationClusterContext {
public void setProperties(Properties properties) {
this.properties = properties;
}
-
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/Cartridge.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/Cartridge.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/Cartridge.java
index c3d5d03..6cce42b 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/Cartridge.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/Cartridge.java
@@ -127,7 +127,7 @@ public class Cartridge implements Serializable{
public void addIaasProviders(Map<String, IaasProvider> map) {
for (Iterator<String> iterator = map.keySet().iterator(); iterator.hasNext();) {
- String key = (String) iterator.next();
+ String key = iterator.next();
IaasProvider value = map.get(key);
partitionToIaasProvider.put(key, value);
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ClusterContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ClusterContext.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ClusterContext.java
index 06e48cc..1652997 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ClusterContext.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ClusterContext.java
@@ -78,6 +78,13 @@ public class ClusterContext implements Serializable{
return hostName;
}
+ public String findContainerHostName() {
+ if (hostName.indexOf('.') != -1) {
+ hostName = hostName.replace('.', '-');
+ }
+ return hostName;
+ }
+
public void setHostName(String hostName) {
this.hostName = hostName;
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/KubernetesClusterContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/KubernetesClusterContext.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/KubernetesClusterContext.java
index aecd614..83feabd 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/KubernetesClusterContext.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/KubernetesClusterContext.java
@@ -22,6 +22,7 @@ import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
+import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.stratos.kubernetes.client.KubernetesApiClient;
@@ -44,16 +45,16 @@ public class KubernetesClusterContext implements Serializable {
private String masterIp;
private String masterPort;
// available list of ports
- private List<Integer> availableHostPorts;
+ private List<Integer> servicePorts;
// kubernetes client API instance
private transient KubernetesApiClient kubApi;
public KubernetesClusterContext(String id, String masterIp, String masterPort, int lowerPort, int upperPort) {
- availableHostPorts = new ArrayList<Integer>();
+ servicePorts = new ArrayList<Integer>();
+ this.lowerPort = lowerPort;
this.upperPort = upperPort;
- this.lowerPort = lowerPort;
- // populate the ports
- populatePorts(lowerPort, upperPort);
+ // Generate the ports
+ generateServicePorts(lowerPort, upperPort);
this.kubernetesClusterId = id;
this.masterIp = masterIp;
this.masterPort = masterPort;
@@ -68,35 +69,36 @@ public class KubernetesClusterContext implements Serializable {
public String getKubernetesClusterId() {
return kubernetesClusterId;
}
+
public void setKubernetesClusterId(String kubernetesClusterId) {
this.kubernetesClusterId = kubernetesClusterId;
}
- public List<Integer> getAvailableHostPorts() {
- return availableHostPorts;
+ public List<Integer> getServicePorts() {
+ return servicePorts;
}
- public void setAvailableHostPorts(List<Integer> availableHostPorts) {
- this.availableHostPorts = availableHostPorts;
+ public void setServicePorts(List<Integer> servicePorts) {
+ this.servicePorts = servicePorts;
}
- public int getAnAvailableHostPort() {
- if (availableHostPorts.isEmpty()) {
+ public int getNextServicePort() {
+ if (servicePorts.isEmpty()) {
return -1;
}
- return availableHostPorts.remove(0);
+ return servicePorts.remove(0);
}
- public void deallocateHostPort (int port) {
- if (!availableHostPorts.contains(port)) {
- availableHostPorts.add(port);
+ public void deallocatePort(int port) {
+ if (!servicePorts.contains(port)) {
+ servicePorts.add(port);
+ // TODO Sort elements
}
}
- private void populatePorts(int i, int j) {
-
- for (int x = i; x < j; x++) {
- availableHostPorts.add(x);
+ private void generateServicePorts(int lowerPort, int upperPort) {
+ for (int port = lowerPort; port <= upperPort; port++) {
+ servicePorts.add(port);
}
}
@@ -139,7 +141,7 @@ public class KubernetesClusterContext implements Serializable {
public int hashCode() {
final int prime = 31;
int result = 1;
- result = prime * result + ((availableHostPorts == null) ? 0 : availableHostPorts.hashCode());
+ result = prime * result + ((servicePorts == null) ? 0 : servicePorts.hashCode());
result = prime * result + ((kubernetesClusterId == null) ? 0 : kubernetesClusterId.hashCode());
result = prime * result + lowerPort;
result = prime * result + ((masterIp == null) ? 0 : masterIp.hashCode());
@@ -157,10 +159,10 @@ public class KubernetesClusterContext implements Serializable {
if (getClass() != obj.getClass())
return false;
KubernetesClusterContext other = (KubernetesClusterContext) obj;
- if (availableHostPorts == null) {
- if (other.availableHostPorts != null)
+ if (servicePorts == null) {
+ if (other.servicePorts != null)
return false;
- } else if (!availableHostPorts.equals(other.availableHostPorts))
+ } else if (!servicePorts.equals(other.servicePorts))
return false;
if (kubernetesClusterId == null) {
if (other.kubernetesClusterId != null)
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesContainer.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesContainer.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesContainer.java
index 2a9137a..4b0916b 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesContainer.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesContainer.java
@@ -49,31 +49,22 @@ public class ContainerClusterContextToKubernetesContainer implements Function<Me
ClusterContext clusterContext = CloudControllerContext.getInstance().getClusterContext(clusterId);
Container container = new Container();
- container.setName(getCompatibleName(clusterContext.getHostName()));
+ container.setName(clusterContext.findContainerHostName());
Cartridge cartridge = CloudControllerContext.getInstance().getCartridge(clusterContext.getCartridgeType());
-
if (cartridge == null) {
- log.error("Cannot find a Cartridge of type : " + clusterContext.getCartridgeType());
- return null;
+ String message = "Could not find cartridge: [cartridge-type] " + clusterContext.getCartridgeType();
+ log.error(message);
+ throw new RuntimeException(message);
}
container.setImage(cartridge.getContainer().getImageName());
-
container.setPorts(getPorts(clusterContext, cartridge));
-
container.setEnv(getEnvironmentVars(memberContext, clusterContext));
return container;
}
- private String getCompatibleName(String hostName) {
- if (hostName.indexOf('.') != -1) {
- hostName = hostName.replace('.', '-');
- }
- return hostName;
- }
-
private Port[] getPorts(ClusterContext ctxt, Cartridge cartridge) {
Port[] ports = new Port[cartridge.getPortMappings().size()];
List<Port> portList = new ArrayList<Port>();
@@ -91,7 +82,6 @@ public class ContainerClusterContextToKubernetesContainer implements Function<Me
}
private EnvironmentVariable[] getEnvironmentVars(MemberContext memberCtxt, ClusterContext ctxt) {
-
String kubernetesClusterId = CloudControllerUtil.getProperty(ctxt.getProperties(),
StratosConstants.KUBERNETES_CLUSTER_ID);
@@ -102,19 +92,16 @@ public class ContainerClusterContextToKubernetesContainer implements Function<Me
Properties props1 = memberCtxt.getProperties();
if (props1 != null) {
for (Property prop : props1.getProperties()) {
- addToEnvironment(envVars, prop.getName(), prop.getValue());
+ addToEnvironment(envVars, prop.getName(), String.valueOf(prop.getValue()));
}
}
}
EnvironmentVariable[] vars = new EnvironmentVariable[envVars.size()];
-
return envVars.toArray(vars);
-
}
private void addToEnvironment(List<EnvironmentVariable> envVars, String payload) {
-
if (payload != null) {
String[] entries = payload.split(",");
for (String entry : entries) {
@@ -128,11 +115,9 @@ public class ContainerClusterContextToKubernetesContainer implements Function<Me
}
private void addToEnvironment(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/405ff36d/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesService.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesService.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesService.java
index d6f0a0f..4adba07 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesService.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesService.java
@@ -16,48 +16,37 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.stratos.cloud.controller.functions;
-
-import org.apache.stratos.cloud.controller.context.CloudControllerContext;
-import org.apache.stratos.cloud.controller.domain.ClusterContext;
-import org.apache.stratos.cloud.controller.domain.ContainerClusterContext;
-import org.apache.stratos.cloud.controller.domain.KubernetesClusterContext;
-import org.apache.stratos.cloud.controller.domain.MemberContext;
-import org.apache.stratos.cloud.controller.util.CloudControllerUtil;
-import org.apache.stratos.common.constants.StratosConstants;
-import org.apache.stratos.kubernetes.client.model.Selector;
-import org.apache.stratos.kubernetes.client.model.Service;
-
-import com.google.common.base.Function;
-
-/**
- * Is responsible for converting a {@link ContainerClusterContext} object to a Kubernetes
- * {@link Service} Object.
- */
-public class ContainerClusterContextToKubernetesService implements Function<MemberContext, Service> {
-
- @Override
- public Service apply(MemberContext memberContext) {
-
- String clusterId = memberContext.getClusterId();
- ClusterContext clusterContext = CloudControllerContext.getInstance().getClusterContext(clusterId);
-
- String kubernetesClusterId = CloudControllerUtil.getProperty(
- clusterContext.getProperties(), StratosConstants.KUBERNETES_CLUSTER_ID);
- KubernetesClusterContext kubClusterContext = CloudControllerContext.getInstance()
- .getKubernetesClusterContext(kubernetesClusterId);
-
- Service service = new Service();
- service.setApiVersion("v1beta1");
- service.setId(CloudControllerUtil.getCompatibleId(clusterId));
- service.setKind("Service");
- int hostPort = kubClusterContext.getAnAvailableHostPort();
- service.setPort(hostPort);
- Selector selector = new Selector();
- selector.setName(clusterId);
- service.setSelector(selector);
-
- return service;
- }
-
-}
+//package org.apache.stratos.cloud.controller.functions;
+//
+//import org.apache.stratos.cloud.controller.context.CloudControllerContext;
+//import org.apache.stratos.cloud.controller.domain.ClusterContext;
+//import org.apache.stratos.cloud.controller.domain.ContainerClusterContext;
+//import org.apache.stratos.cloud.controller.domain.KubernetesClusterContext;
+//import org.apache.stratos.cloud.controller.domain.MemberContext;
+//import org.apache.stratos.cloud.controller.util.CloudControllerUtil;
+//import org.apache.stratos.common.constants.StratosConstants;
+//import org.apache.stratos.kubernetes.client.model.Selector;
+//import org.apache.stratos.kubernetes.client.model.Service;
+//
+//import com.google.common.base.Function;
+//
+///**
+// * Is responsible for converting a {@link ContainerClusterContext} object to a Kubernetes
+// * {@link Service} Object.
+// */
+//public class ContainerClusterContextToKubernetesService implements Function<ClusterContext, Service> {
+//
+// @Override
+// public Service apply(ClusterContext clusterContext) {
+//
+// String clusterId = clusterContext.getClusterId();
+// String kubernetesClusterId = CloudControllerUtil.getProperty(
+// clusterContext.getProperties(), StratosConstants.KUBERNETES_CLUSTER_ID);
+// KubernetesClusterContext kubClusterContext = CloudControllerContext.getInstance()
+// .getKubernetesClusterContext(kubernetesClusterId);
+//
+//
+//
+// return service;
+// }
+//}
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToReplicationController.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToReplicationController.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToReplicationController.java
index af63a3f..7aeaa3e 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToReplicationController.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToReplicationController.java
@@ -22,10 +22,8 @@ import org.apache.stratos.cloud.controller.context.CloudControllerContext;
import org.apache.stratos.cloud.controller.domain.ClusterContext;
import org.apache.stratos.cloud.controller.domain.ContainerClusterContext;
import org.apache.stratos.cloud.controller.domain.MemberContext;
-import org.apache.stratos.cloud.controller.util.CloudControllerUtil;
-import org.apache.stratos.common.constants.StratosConstants;
import org.apache.stratos.kubernetes.client.model.Container;
-import org.apache.stratos.kubernetes.client.model.Label;
+import org.apache.stratos.kubernetes.client.model.Labels;
import org.apache.stratos.kubernetes.client.model.Manifest;
import org.apache.stratos.kubernetes.client.model.Pod;
import org.apache.stratos.kubernetes.client.model.ReplicationController;
@@ -35,8 +33,10 @@ import org.apache.stratos.kubernetes.client.model.State;
import com.google.common.base.Function;
/**
- * Is responsible for converting a {@link ContainerClusterContext} object to a Kubernetes
- * {@link ReplicationController} Object.
+ * Is responsible for converting a {@link org.apache.stratos.cloud.controller.domain.MemberContext} object to a Kubernetes
+ * {@link ReplicationController} object:
+ * - A replication controller is created for each cluster but uses the same environment variables
+ * generated by the member context, hence using member context.
*/
public class ContainerClusterContextToReplicationController implements
Function<MemberContext, ReplicationController> {
@@ -44,44 +44,42 @@ public class ContainerClusterContextToReplicationController implements
@Override
public ReplicationController apply(MemberContext memberContext) {
- String clusterId = memberContext.getClusterId();
- ClusterContext clusterContext = CloudControllerContext.getInstance().getClusterContext(clusterId);
-
ReplicationController replicationController = new ReplicationController();
- replicationController.setId(clusterContext.getClusterId());
+ replicationController.setId(memberContext.getClusterId());
replicationController.setKind("ReplicationController");
replicationController.setApiVersion("v1beta1");
- State desiredState = new State();
- String minReplicas = CloudControllerUtil.getProperty(clusterContext.getProperties(),
- StratosConstants.KUBERNETES_MIN_REPLICAS);
- desiredState.setReplicas(Integer.parseInt(minReplicas));
+
+ State state = new State();
+ state.setReplicas(1);
Selector selector = new Selector();
- selector.setName(clusterContext.getClusterId());
- desiredState.setReplicaSelector(selector);
+ selector.setName(memberContext.getClusterId());
+ state.setReplicaSelector(selector);
Pod podTemplate = new Pod();
State podState = new State();
Manifest manifest = new Manifest();
manifest.setVersion("v1beta1");
- manifest.setId(clusterContext.getClusterId());
+ manifest.setId(memberContext.getClusterId());
+ podTemplate.setState(podState);
+ // Add container to the manifest
ContainerClusterContextToKubernetesContainer containerFunc = new ContainerClusterContextToKubernetesContainer();
Container container = containerFunc.apply(memberContext);
-
- manifest.setContainers(new Container[] { container });
-
+ manifest.addContainer(container);
podState.setManifest(manifest);
- podTemplate.setDesiredState(podState);
- Label l1 = new Label();
- l1.setName(clusterContext.getClusterId());
- podTemplate.setLabels(l1);
- desiredState.setPodTemplate(podTemplate);
- replicationController.setDesiredState(desiredState);
+ // Set pod labels
+ Labels podLabels = new Labels();
+ podLabels.setName(memberContext.getClusterId());
+ podTemplate.setLabels(podLabels);
+
+ state.setPodTemplate(podTemplate);
+ replicationController.setDesiredState(state);
- Label l2 = new Label();
- l2.setName(clusterContext.getClusterId());
- replicationController.setLabels(l2);
+ // Set replication controller labels
+ Labels replicatoionControllerLabels = new Labels();
+ replicatoionControllerLabels.setName(memberContext.getClusterId());
+ replicationController.setLabels(replicatoionControllerLabels);
return replicationController;
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/PodToMemberContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/PodToMemberContext.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/PodToMemberContext.java
index a744eb1..c8d05d2 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/PodToMemberContext.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/PodToMemberContext.java
@@ -26,23 +26,19 @@ import com.google.common.base.Function;
* Is responsible for converting a {@link Pod} object to a
* {@link MemberContext} Object.
*/
-public class PodToMemberContext implements Function<Pod, MemberContext> {
-
- @Override
- public MemberContext apply(Pod pod) {
-
- if (pod == null) {
- return null;
- }
- MemberContext memberContext = new MemberContext();
- memberContext.setMemberId(pod.getId());
- memberContext.setDefaultPrivateIP(pod.getCurrentState().getHostIP());
- memberContext.setPrivateIPs(new String[]{pod.getCurrentState().getHostIP()});
- memberContext.setDefaultPublicIP(pod.getCurrentState().getHostIP());
- memberContext.setPublicIPs(new String[]{pod.getCurrentState().getHostIP()});
- memberContext.setInitTime(System.currentTimeMillis());
-
- return memberContext;
- }
-
-}
+//public class PodToMemberContext implements Function<Pod, MemberContext> {
+//
+// @Override
+// public MemberContext apply(Pod pod) {
+// if (pod == null) {
+// return null;
+// }
+// MemberContext memberContext = new MemberContext();
+// memberContext.setInstanceId(pod.getId());
+// memberContext.setPrivateIpAddress(pod.getCurrentState().getHostIP());
+// memberContext.setPublicIpAddress(pod.getCurrentState().getHostIP());
+// memberContext.setInitTime(System.currentTimeMillis());
+//
+// return memberContext;
+// }
+//}
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/Iaas.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/Iaas.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/Iaas.java
index 4270f19..2224a56 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/Iaas.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/Iaas.java
@@ -54,7 +54,7 @@ public abstract class Iaas {
* @param memberContext
* @return updated memberContext
*/
- public abstract MemberContext createInstance(MemberContext memberContext) throws CartridgeNotFoundException;
+ public abstract MemberContext startInstance(MemberContext memberContext) throws CartridgeNotFoundException;
/**
* This will deallocate/release the given IP address back to pool.
@@ -155,5 +155,5 @@ public abstract class Iaas {
* @throws InvalidCartridgeTypeException
* @throws InvalidMemberException
*/
- public abstract void terminateInstance(MemberContext memberContext) throws InvalidCartridgeTypeException, InvalidMemberException;
+ public abstract void terminateInstance(MemberContext memberContext) throws InvalidCartridgeTypeException, InvalidMemberException, MemberTerminationFailedException;
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/JcloudsEC2Iaas.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/JcloudsEC2Iaas.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/JcloudsEC2Iaas.java
index 23c62d0..3133cad 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/JcloudsEC2Iaas.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/JcloudsEC2Iaas.java
@@ -276,7 +276,7 @@ public class JcloudsEC2Iaas extends JcloudsIaas {
// first try to find an unassigned IP.
ArrayList<PublicIpInstanceIdPair> unassignedIps = Lists
- .newArrayList(Iterables.filter(elasticIPAddressApi.describeAddressesInRegion(region, new String[0]),
+ .newArrayList(Iterables.filter(elasticIPAddressApi.describeAddressesInRegion(region),
new Predicate<PublicIpInstanceIdPair>() {
@Override
@@ -419,8 +419,8 @@ public class JcloudsEC2Iaas extends JcloudsIaas {
getAvailabilityZoneAndRegionApiForRegion(region).get();
Set<AvailabilityZoneInfo> availabilityZones =
- zoneRegionApi.describeAvailabilityZonesInRegion(region,
- new DescribeAvailabilityZonesOptions[0]);
+ zoneRegionApi.describeAvailabilityZonesInRegion(region
+ );
for (AvailabilityZoneInfo zoneInfo : availabilityZones) {
String configuredZone = zoneInfo.getZone();
if (zone.equalsIgnoreCase(configuredZone)) {
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/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 6d1e7f3..11d11ed 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
@@ -102,7 +102,7 @@ public abstract class JcloudsIaas extends Iaas {
}
@Override
- public MemberContext createInstance(MemberContext memberContext) {
+ public MemberContext startInstance(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
@@ -279,7 +279,8 @@ public abstract class JcloudsIaas extends Iaas {
}
}
- public void terminateInstance(MemberContext memberContext) throws InvalidCartridgeTypeException, InvalidMemberException {
+ public void terminateInstance(MemberContext memberContext) throws InvalidCartridgeTypeException,
+ InvalidMemberException {
String memberId = memberContext.getMemberId();
String cartridgeType = memberContext.getCartridgeType();
String nodeId = memberContext.getInstanceId();
http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/JcloudsOpenstackIaas.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/JcloudsOpenstackIaas.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/JcloudsOpenstackIaas.java
index d3386f2..6a7bc24 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/JcloudsOpenstackIaas.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/JcloudsOpenstackIaas.java
@@ -397,7 +397,7 @@ public class JcloudsOpenstackIaas extends JcloudsIaas {
IaasProvider iaasInfo = getIaasProvider();
String region = ComputeServiceBuilderUtil.extractRegion(iaasInfo);
- ComputeServiceContext context = iaasInfo.getComputeService().getContext();;
+ ComputeServiceContext context = iaasInfo.getComputeService().getContext();
NovaApi novaApi = context.unwrapApi(NovaApi.class);
VolumeApi volumeApi = novaApi.getVolumeExtensionForZone(region).get();
Volume.Status volumeStatus = this.getVolumeStatus(volumeApi, volumeId);