Repository: stratos
Updated Branches:
  refs/heads/docker-integration 57a19044d -> 5ab19f5d0


docker cluster monitor


Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/5ab19f5d
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/5ab19f5d
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/5ab19f5d

Branch: refs/heads/docker-integration
Commit: 5ab19f5d071048d1fa1f535e871475a11cd11705
Parents: 57a1904
Author: R-Rajkumar <[email protected]>
Authored: Fri Sep 12 20:57:10 2014 +0530
Committer: R-Rajkumar <[email protected]>
Committed: Fri Sep 12 20:57:10 2014 +0530

----------------------------------------------------------------------
 .../stratos/autoscaler/AutoscalerContext.java   |  33 ++++
 .../autoscaler/KubernetesClusterContext.java    |  20 +++
 .../cloud/controller/CloudControllerClient.java |  47 ++++-
 .../AutoscalerTopologyEventReceiver.java        |  85 +++++++--
 .../monitor/KubernetesClusterMonitor.java       | 180 +++++++++++++++++++
 .../stratos/autoscaler/util/AutoscalerUtil.java |  45 +++++
 .../cloud/controller/pojo/ClusterContext.java   |   9 +
 .../topology/TopologyEventPublisher.java        |   2 +-
 .../common/constants/StratosConstants.java      |   3 +-
 .../event/topology/ClusterRemovedEvent.java     |   8 +-
 10 files changed, 414 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/5ab19f5d/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/AutoscalerContext.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/AutoscalerContext.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/AutoscalerContext.java
index c49d582..e3eb598 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/AutoscalerContext.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/AutoscalerContext.java
@@ -23,6 +23,7 @@ package org.apache.stratos.autoscaler;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.autoscaler.monitor.ClusterMonitor;
+import org.apache.stratos.autoscaler.monitor.KubernetesClusterMonitor;
 import org.apache.stratos.autoscaler.monitor.LbClusterMonitor;
 
 import java.util.HashMap;
@@ -38,6 +39,7 @@ public class AutoscalerContext {
         try {
             setMonitors(new HashMap<String, ClusterMonitor>());
             setLbMonitors(new HashMap<String, LbClusterMonitor>());
+            setKubernetesClusterMonitors(new HashMap<String, 
KubernetesClusterMonitor>());
         } catch (Exception e) {
             log.error("Rule evaluateMinCheck error", e);
         }
@@ -47,6 +49,8 @@ public class AutoscalerContext {
     private Map<String, ClusterMonitor> monitors;
     // Map<LBClusterId, LBClusterMonitor>
     private Map<String, LbClusterMonitor> lbMonitors;
+    // Map<ClusterId, KubernetesClusterMonitor>
+    private Map<String, KubernetesClusterMonitor> kubernetesClusterMonitors;
 
        private static class Holder {
                private static final AutoscalerContext INSTANCE = new 
AutoscalerContext();
@@ -109,4 +113,33 @@ public class AutoscalerContext {
     public void addLbMonitor(LbClusterMonitor monitor) {
         lbMonitors.put(monitor.getClusterId(), monitor);
     }
+    
+    public void addKubernetesClusterMonitor(KubernetesClusterMonitor 
kubernetesClusterMonitor) {
+        kubernetesClusterMonitors.put(kubernetesClusterMonitor.getClusterId(), 
kubernetesClusterMonitor);
+    }
+
+    public KubernetesClusterMonitor getKubernetesClusterMonitor(String 
clusterId) {
+        return kubernetesClusterMonitors.get(clusterId);
+    }
+    
+    public boolean kubernetesClusterMonitorExist(String clusterId) {
+        return kubernetesClusterMonitors.containsKey(clusterId);
+    }
+    
+    public Map<String, KubernetesClusterMonitor> 
getKubernetesClusterMonitors() {
+        return kubernetesClusterMonitors;
+    }
+
+    public void setKubernetesClusterMonitors(Map<String, 
KubernetesClusterMonitor> kubernetesClusterMonitors) {
+        this.kubernetesClusterMonitors = kubernetesClusterMonitors;
+    }
+    
+    public KubernetesClusterMonitor removeKubernetesClusterMonitor(String 
clusterId) {
+       if(!kubernetesClusterMonitorExist(clusterId)) {
+               log.fatal("Kubernetes cluster monitor not found for cluster id: 
"+clusterId);
+               return null;
+       }
+       log.info("Removed KubernetesClusterMonitor [cluster id]: " + clusterId);
+        return kubernetesClusterMonitors.remove(clusterId);
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/5ab19f5d/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/KubernetesClusterContext.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/KubernetesClusterContext.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/KubernetesClusterContext.java
new file mode 100644
index 0000000..f369ac9
--- /dev/null
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/KubernetesClusterContext.java
@@ -0,0 +1,20 @@
+package org.apache.stratos.autoscaler;
+
+import java.io.Serializable;
+
+public class KubernetesClusterContext implements Serializable{
+       
+       private static final long serialVersionUID = 808741789615481596L;
+       String kubernetesClusterID;
+       
+       public KubernetesClusterContext(String kubernetesClusterID){
+               this.kubernetesClusterID = kubernetesClusterID;
+       }
+       
+       public String getKubernetesClusterID() {
+               return kubernetesClusterID;
+       }
+       public void setKubernetesClusterID(String kubernetesClusterID) {
+               this.kubernetesClusterID = kubernetesClusterID;
+       }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/5ab19f5d/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
index dff493d..10bb997 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
@@ -24,16 +24,21 @@ import org.apache.commons.configuration.XMLConfiguration;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.autoscaler.Constants;
+import org.apache.stratos.autoscaler.api.AutoScalerServiceImpl;
 import org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy;
 import org.apache.stratos.autoscaler.exception.PartitionValidationException;
 import org.apache.stratos.autoscaler.exception.SpawningException;
 import org.apache.stratos.autoscaler.exception.TerminationException;
+import org.apache.stratos.autoscaler.interfaces.AutoScalerServiceInterface;
 import org.apache.stratos.autoscaler.util.ConfUtil;
 import org.apache.stratos.cloud.controller.stub.*;
 import org.apache.stratos.cloud.controller.stub.deployment.partition.Partition;
 import org.apache.stratos.cloud.controller.stub.pojo.MemberContext;
 import org.apache.stratos.cloud.controller.stub.pojo.Properties;
 import org.apache.stratos.cloud.controller.stub.pojo.Property;
+import org.apache.stratos.common.constants.StratosConstants;
+import org.apache.stratos.common.kubernetes.KubernetesGroup;
+import org.apache.stratos.common.kubernetes.KubernetesMaster;
 
 import java.rmi.RemoteException;
 
@@ -226,6 +231,46 @@ public class CloudControllerClient {
         }
     }
 
-
+    public synchronized MemberContext createContainer(String 
kubernetesClusterId, String clusterId) throws SpawningException {
+        try {
+               
+               AutoScalerServiceInterface service = new 
AutoScalerServiceImpl();
+               KubernetesMaster kubernetesMaster = 
service.getMasterForKubernetesGroup(kubernetesClusterId);
+               String kubernetesMasterIP = kubernetesMaster.getHostIpAddress();
+               KubernetesGroup kubernetesGroup = 
service.getKubernetesGroup(kubernetesClusterId);
+               int lower = kubernetesGroup.getPortRange().getLower();
+               int upper = kubernetesGroup.getPortRange().getUpper();
+               String portRange = Integer.toString(lower) + "-" + 
Integer.toString(upper);
+               
+            MemberContext member = new MemberContext();
+            member.setClusterId(clusterId);
+            member.setInitTime(System.currentTimeMillis());
+            Properties memberContextProps = new Properties();
+            Property kubernetesClusterMasterIPProps = new Property();
+            
kubernetesClusterMasterIPProps.setName(StratosConstants.KUBERNETES_MASTER_IP);
+            kubernetesClusterMasterIPProps.setValue(kubernetesMasterIP);
+            memberContextProps.addProperties(kubernetesClusterMasterIPProps);
+            Property kubernetesClusterPortRangeProps = new Property();
+            
kubernetesClusterPortRangeProps.setName(StratosConstants.KUBERNETES_PORT_RANGE);
+            kubernetesClusterPortRangeProps.setValue(portRange);
+            memberContextProps.addProperties(kubernetesClusterPortRangeProps);
+            member.setProperties(memberContextProps);
+            long startTime = System.currentTimeMillis();
+            MemberContext memberContext = stub.startContainer(member);
+            
+            if(log.isDebugEnabled()) {
+                long endTime = System.currentTimeMillis();
+                log.debug(String.format("Service call startContainer() 
returned in %dms", (endTime - startTime)));
+            }
+            return memberContext;
+        } catch (CloudControllerServiceUnregisteredCartridgeExceptionException 
e) {
+               String message = 
e.getFaultMessage().getUnregisteredCartridgeException().getMessage();
+               log.error(message, e);
+                       throw new SpawningException(message, e);
+        } catch (RemoteException e) {
+               log.error(e.getMessage(), e);
+            throw new SpawningException(e.getMessage(), e);
+               }
+    }
 
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/5ab19f5d/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
index fed35bc..972cb65 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
@@ -29,6 +29,7 @@ import 
org.apache.stratos.autoscaler.exception.PolicyValidationException;
 import org.apache.stratos.autoscaler.exception.TerminationException;
 import org.apache.stratos.autoscaler.monitor.AbstractMonitor;
 import org.apache.stratos.autoscaler.monitor.ClusterMonitor;
+import org.apache.stratos.autoscaler.monitor.KubernetesClusterMonitor;
 import org.apache.stratos.autoscaler.monitor.LbClusterMonitor;
 import org.apache.stratos.autoscaler.partition.PartitionManager;
 import org.apache.stratos.autoscaler.policy.PolicyManager;
@@ -184,7 +185,9 @@ public class AutoscalerTopologyEventReceiver implements 
Runnable {
                     TopologyManager.acquireReadLock();
                     Service service = 
TopologyManager.getTopology().getService(e.getServiceName());
                     Cluster cluster = service.getCluster(e.getClusterId());
-                    
if(AutoscalerContext.getInstance().monitorExist((cluster.getClusterId()))) {
+                    
if(AutoscalerContext.getInstance().kubernetesClusterMonitorExist(cluster.getClusterId()))
 {
+                       
AutoscalerContext.getInstance().getKubernetesClusterMonitor(e.getClusterId()).setStatus(e.getStatus());
+                    } else 
if(AutoscalerContext.getInstance().monitorExist((cluster.getClusterId()))) {
                         
AutoscalerContext.getInstance().getMonitor(e.getClusterId()).setStatus(e.getStatus());
                     } else if 
(AutoscalerContext.getInstance().lbMonitorExist((cluster.getClusterId()))) {
                         
AutoscalerContext.getInstance().getLBMonitor(e.getClusterId()).setStatus(e.getStatus());
@@ -210,9 +213,19 @@ public class AutoscalerTopologyEventReceiver implements 
Runnable {
                     String clusterId = e.getClusterId();
                     String deploymentPolicy = e.getDeploymentPolicy();
 
-                    AbstractMonitor monitor;
-
-                    if (e.isLbCluster()) {
+                    AbstractMonitor monitor = null;
+                    KubernetesClusterMonitor kubernetesClusterMonitor = null;
+
+                    if (e.isKubernetesCluster()) {
+                       
+                       kubernetesClusterMonitor = 
+                                       
AutoscalerContext.getInstance().removeKubernetesClusterMonitor(clusterId);
+                       if(kubernetesClusterMonitor != null) {
+                               // destroy drools sessions
+                            log.info(String.format("Kubernetes cluster monitor 
has been removed successfully: [cluster] %s ",
+                                    clusterId));
+                       }
+                    } else if (e.isLbCluster()) {
                         DeploymentPolicy depPolicy = 
PolicyManager.getInstance().getDeploymentPolicy(deploymentPolicy);
                         if (depPolicy != null) {
                             List<NetworkPartitionLbHolder> lbHolders = 
PartitionManager.getInstance()
@@ -564,6 +577,51 @@ public class AutoscalerTopologyEventReceiver implements 
Runnable {
         }
     }
 
+    private class KubernetesClusterMonitorAdder implements Runnable {
+        private Cluster cluster;
+
+        public KubernetesClusterMonitorAdder(Cluster cluster) {
+            this.cluster = cluster;
+        }
+
+        public void run() {
+            KubernetesClusterMonitor monitor = null;
+            int retries = 5;
+            boolean success = false;
+            do {
+                try {
+                    Thread.sleep(5000);
+                } catch (InterruptedException e1) {
+                }
+
+                try {
+                    monitor = 
AutoscalerUtil.getKubernetesClusterMonitor(cluster);
+                    success = true;
+
+                } catch (Exception e) {
+                    String msg = "Kubernetes cluster monitor creation failed 
for cluster: " + cluster.getClusterId();
+                    log.debug(msg, e);
+                    retries--;
+                }
+            } while (!success && retries != 0);
+
+            if (monitor == null) {
+                String msg = "Kubernetes cluster monitor creation failed, even 
after retrying for 5 times, "
+                        + "for cluster: " + cluster.getClusterId();
+                log.error(msg);
+                throw new RuntimeException(msg);
+            }
+
+            Thread th = new Thread(monitor);
+            th.start();
+            
AutoscalerContext.getInstance().addKubernetesClusterMonitor(monitor);
+            if (log.isInfoEnabled()) {
+                log.info(String.format("Kubernetes cluster monitor has been 
added successfully: [cluster] %s",
+                        cluster.getClusterId()));
+            }
+        }
+    }
+    
     @SuppressWarnings("unused")
        private void runTerminateAllRule(AbstractMonitor monitor) {
 
@@ -588,16 +646,15 @@ public class AutoscalerTopologyEventReceiver implements 
Runnable {
 
     protected synchronized void startClusterMonitor(Cluster cluster) {
         Thread th = null;
-        if (cluster.isLbCluster()
-                && !AutoscalerContext.getInstance()
-                .lbMonitorExist(
-                        cluster.getClusterId())) {
-            th = new Thread(new LBClusterMonitorAdder(
-                    cluster));
-        } else if (!cluster.isLbCluster() && !AutoscalerContext.getInstance()
-                .monitorExist(cluster.getClusterId())) {
-            th = new Thread(
-                    new ClusterMonitorAdder(cluster));
+        if (cluster.isKubernetesCluster() 
+                       && 
!AutoscalerContext.getInstance().kubernetesClusterMonitorExist(cluster.getClusterId()))
 {
+               th = new Thread(new KubernetesClusterMonitorAdder(cluster));
+        } else if (cluster.isLbCluster() 
+                       && 
!AutoscalerContext.getInstance().lbMonitorExist(cluster.getClusterId())) {
+            th = new Thread(new LBClusterMonitorAdder(cluster));
+        } else if (!cluster.isLbCluster() 
+                       && 
!AutoscalerContext.getInstance().monitorExist(cluster.getClusterId())) {
+            th = new Thread(new ClusterMonitorAdder(cluster));
         }
         if (th != null) {
             th.start();

http://git-wip-us.apache.org/repos/asf/stratos/blob/5ab19f5d/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/KubernetesClusterMonitor.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/KubernetesClusterMonitor.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/KubernetesClusterMonitor.java
new file mode 100644
index 0000000..dc355d5
--- /dev/null
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/KubernetesClusterMonitor.java
@@ -0,0 +1,180 @@
+package org.apache.stratos.autoscaler.monitor;
+
+import java.util.Properties;
+
+import org.apache.commons.configuration.XMLConfiguration;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.autoscaler.KubernetesClusterContext;
+import 
org.apache.stratos.autoscaler.client.cloud.controller.CloudControllerClient;
+import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy;
+import org.apache.stratos.autoscaler.util.AutoScalerConstants;
+import org.apache.stratos.autoscaler.util.ConfUtil;
+import org.apache.stratos.common.constants.StratosConstants;
+import org.apache.stratos.messaging.domain.topology.ClusterStatus;
+import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
+
+public class KubernetesClusterMonitor implements Runnable{
+       
+       private static final Log log = 
LogFactory.getLog(KubernetesClusterMonitor.class);
+
+       protected KubernetesClusterContext kubernetesClusterCtxt;
+       protected String clusterId;
+       protected String serviceId;
+       protected AutoscalePolicy autoscalePolicy;
+       protected int monitorInterval;
+       protected boolean isDestroyed;
+    private ClusterStatus status;
+    private String lbReferenceType;
+    private boolean hasPrimary;
+    private int numberOfReplicasInServiceCluster = 0;
+       
+    public KubernetesClusterMonitor(KubernetesClusterContext 
kubernetesClusterCtxt, String serviceClusterID, String serviceId, 
+               AutoscalePolicy autoscalePolicy) {
+       this.clusterId = serviceClusterID;
+       this.serviceId = serviceId;
+       this.kubernetesClusterCtxt = kubernetesClusterCtxt;
+       this.autoscalePolicy = autoscalePolicy;
+        readConfigurations();
+    }
+
+    private void readConfigurations () {
+       // same as VM cluster monitor interval
+        XMLConfiguration conf = ConfUtil.getInstance(null).getConfiguration();
+        monitorInterval = 
conf.getInt(AutoScalerConstants.AUTOSCALER_MONITOR_INTERVAL, 90000);
+        if (log.isDebugEnabled()) {
+            log.debug("Kubernetes Cluster Monitor task interval: " + 
getMonitorInterval());
+        }
+    }
+       
+       @Override
+       public void run() {
+               try {
+                       // TODO make this configurable,
+                       // this is the delay the min check of normal cluster 
monitor to wait
+                       // until LB monitor is added
+                       Thread.sleep(60000);
+               } catch (InterruptedException ignore) {
+               }
+
+               while (!isDestroyed()) {
+                       if (log.isDebugEnabled()) {
+                               log.debug("Kubernetes cluster monitor is 
running.. " + this.toString());
+                       }
+                       try {
+                               if 
(!ClusterStatus.In_Maintenance.equals(status)) {
+                                       monitor();
+                               } else {
+                                       if (log.isDebugEnabled()) {
+                                               log.debug("Kubernetes cluster 
monitor is suspended as the cluster is in "
+                                                               + 
ClusterStatus.In_Maintenance + " mode......");
+                                       }
+                               }
+                       } catch (Exception e) {
+                               log.error("Kubernetes cluster monitor: Monitor 
failed." + this.toString(),
+                                               e);
+                       }
+                       try {
+                               Thread.sleep(monitorInterval);
+                       } catch (InterruptedException ignore) {
+                       }
+               }
+       }
+       
+       private void monitor() {
+               
+               String kubernetesClusterId = 
this.kubernetesClusterCtxt.getKubernetesClusterID();
+               
+               try {
+                       TopologyManager.acquireReadLock();
+                       Properties props = 
TopologyManager.getTopology().getService(serviceId).getCluster(clusterId).getProperties();
+                       int minReplicas = 
Integer.parseInt(props.getProperty(StratosConstants.KUBERNETES_MIN_REPLICAS));
+
+                       if (this.numberOfReplicasInServiceCluster < 
minReplicas) {
+                               
+                               int numOfAdditionalReplicas = minReplicas - 
this.numberOfReplicasInServiceCluster;
+
+                               for (int i = 0; i < numOfAdditionalReplicas; 
i++) {
+                                       try {
+                                               
CloudControllerClient.getInstance().createContainer(kubernetesClusterId, 
clusterId);
+                                               
this.numberOfReplicasInServiceCluster++;
+                                       } catch (Throwable e) {
+                                   String message = "Cannot create a 
container";
+                                   log.error(message, e);
+                                   throw new RuntimeException(message, e);
+                                       }
+                               }
+                       }
+               } finally {
+                       TopologyManager.releaseReadLock();
+               }
+       }
+
+    @Override
+    public String toString() {
+        return "KubernetesClusterMonitor "
+                       + "[ kubernetesHostClusterId=" + 
this.kubernetesClusterCtxt.getKubernetesClusterID() 
+                       + ", clusterId=" + clusterId 
+                       + ", serviceId=" + serviceId + "]";
+    }
+    
+       public String getServiceId() {
+        return serviceId;
+    }
+
+    public void setServiceId(String serviceId) {
+        this.serviceId = serviceId;
+    }
+    
+    public String getClusterId() {
+        return clusterId;
+    }
+
+    public void setClusterId(String clusterId) {
+        this.clusterId = clusterId;
+    }
+    
+       public AutoscalePolicy getAutoscalePolicy() {
+               return autoscalePolicy;
+       }
+
+       public void setAutoscalePolicy(AutoscalePolicy autoscalePolicy) {
+               this.autoscalePolicy = autoscalePolicy;
+       }
+
+       public int getMonitorInterval() {
+               return monitorInterval;
+       }
+       
+    public ClusterStatus getStatus() {
+        return status;
+    }
+
+    public void setStatus(ClusterStatus status) {
+        this.status = status;
+    }
+    
+    public boolean isDestroyed() {
+        return isDestroyed;
+    }
+
+    public void setDestroyed(boolean isDestroyed) {
+        this.isDestroyed = isDestroyed;
+    }
+
+       public String getLbReferenceType() {
+               return lbReferenceType;
+       }
+
+       public void setLbReferenceType(String lbReferenceType) {
+               this.lbReferenceType = lbReferenceType;
+       }
+
+       public boolean isHasPrimary() {
+               return hasPrimary;
+       }
+
+       public void setHasPrimary(boolean hasPrimary) {
+               this.hasPrimary = hasPrimary;
+       }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/stratos/blob/5ab19f5d/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 8eaf1dd..1bc9ce7 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
@@ -22,6 +22,7 @@ package org.apache.stratos.autoscaler.util;
 import org.apache.axiom.om.OMElement;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.autoscaler.KubernetesClusterContext;
 import org.apache.stratos.autoscaler.MemberStatsContext;
 import org.apache.stratos.autoscaler.NetworkPartitionContext;
 import org.apache.stratos.autoscaler.NetworkPartitionLbHolder;
@@ -31,6 +32,7 @@ import 
org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy;
 import org.apache.stratos.autoscaler.exception.PartitionValidationException;
 import org.apache.stratos.autoscaler.exception.PolicyValidationException;
 import org.apache.stratos.autoscaler.monitor.ClusterMonitor;
+import org.apache.stratos.autoscaler.monitor.KubernetesClusterMonitor;
 import org.apache.stratos.autoscaler.monitor.LbClusterMonitor;
 import org.apache.stratos.autoscaler.partition.PartitionGroup;
 import org.apache.stratos.autoscaler.partition.PartitionManager;
@@ -40,6 +42,7 @@ import 
org.apache.stratos.cloud.controller.stub.deployment.partition.Partition;
 import org.apache.stratos.cloud.controller.stub.pojo.MemberContext;
 import org.apache.stratos.cloud.controller.stub.pojo.Property;
 import org.apache.stratos.cloud.controller.stub.pojo.Properties;
+import org.apache.stratos.common.constants.StratosConstants;
 import org.apache.stratos.messaging.domain.topology.Cluster;
 import org.apache.stratos.messaging.domain.topology.ClusterStatus;
 import org.apache.stratos.messaging.domain.topology.Member;
@@ -47,6 +50,7 @@ import 
org.apache.stratos.messaging.domain.topology.MemberStatus;
 import org.apache.stratos.messaging.util.Constants;
 
 import javax.xml.namespace.QName;
+
 import java.util.*;
 
 /**
@@ -314,7 +318,48 @@ public class AutoscalerUtil {
         log.info("LB Cluster monitor created: "+clusterMonitor.toString());
         return clusterMonitor;
     }
+       
+    public static KubernetesClusterMonitor getKubernetesClusterMonitor(Cluster 
cluster) {
+
+       if (null == cluster) {
+            return null;
+        }
+
+        String autoscalePolicyName = cluster.getAutoscalePolicyName();
+        if (log.isDebugEnabled()) {
+            log.debug("Autoscaler policy name: " + autoscalePolicyName);
+        }
+
+        AutoscalePolicy policy = 
PolicyManager.getInstance().getAutoscalePolicy(autoscalePolicyName);
+        java.util.Properties props = cluster.getProperties();
+        String kubernetesHostClusterID = 
props.getProperty(StratosConstants.KUBERNETES_CLUSTER_ID);
+               KubernetesClusterContext kubernetesClusterCtxt = new 
KubernetesClusterContext(kubernetesHostClusterID);
+
+        KubernetesClusterMonitor kubernetesClusterMonitor = new 
KubernetesClusterMonitor(
+                       kubernetesClusterCtxt, 
+                       cluster.getClusterId(), 
+                       cluster.getServiceName(), 
+                       policy);
+                                        
+        kubernetesClusterMonitor.setStatus(ClusterStatus.Created);
+        
+        // find lb reference type
+        if(props.containsKey(Constants.LOAD_BALANCER_REF)) {
+            String value = props.getProperty(Constants.LOAD_BALANCER_REF);
+            kubernetesClusterMonitor.setLbReferenceType(value);
+            if(log.isDebugEnabled()) {
+                log.debug("Set the lb reference type: "+value);
+            }
+        }
+        
+        // set hasPrimary property
+        // hasPrimary is true if there are primary members available in that 
cluster
+        
kubernetesClusterMonitor.setHasPrimary(Boolean.parseBoolean(props.getProperty(Constants.IS_PRIMARY)));
 
+        log.info("Kubernetes cluster monitor created: "+ 
kubernetesClusterMonitor.toString());
+        return kubernetesClusterMonitor;
+    }
+    
     public static Properties getProperties(final OMElement elt) {
 
         Iterator<?> it = elt.getChildrenWithName(new 
QName(AutoScalerConstants.PROPERTY_ELEMENT));

http://git-wip-us.apache.org/repos/asf/stratos/blob/5ab19f5d/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/ClusterContext.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/ClusterContext.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/ClusterContext.java
index 9d374a7..081d632 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/ClusterContext.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/ClusterContext.java
@@ -37,6 +37,7 @@ public class ClusterContext implements Serializable{
     private String payload;
     private String hostName;
     private boolean isLbCluster;
+    private boolean isKubernetesCluster;
     private boolean isVolumeRequired;
     private Volume[] volumes;
     // timeout in milliseconds - this would be the per member time that CC 
waits before forcefully terminate instances on an unregistration.
@@ -87,6 +88,14 @@ public class ClusterContext implements Serializable{
        public void setLbCluster(boolean isLbCluster) {
                this.isLbCluster = isLbCluster;
        }
+       
+       public boolean isKubernetesCluster() {
+               return isKubernetesCluster;
+       }
+
+       public void setKubernetesCluster(boolean isKubernetesCluster) {
+               this.isKubernetesCluster = isKubernetesCluster;
+       }
 
        public boolean isVolumeRequired() {
                return isVolumeRequired;

http://git-wip-us.apache.org/repos/asf/stratos/blob/5ab19f5d/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyEventPublisher.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyEventPublisher.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyEventPublisher.java
index fe86198..4a44b8a 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyEventPublisher.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyEventPublisher.java
@@ -87,7 +87,7 @@ public class TopologyEventPublisher {
 
     public static void sendClusterRemovedEvent(ClusterContext ctxt, String 
deploymentPolicy) {
 
-        ClusterRemovedEvent clusterRemovedEvent = new 
ClusterRemovedEvent(ctxt.getCartridgeType(), ctxt.getClusterId(), 
deploymentPolicy, ctxt.isLbCluster());
+        ClusterRemovedEvent clusterRemovedEvent = new 
ClusterRemovedEvent(ctxt.getCartridgeType(), ctxt.getClusterId(), 
deploymentPolicy, ctxt.isLbCluster(), ctxt.isKubernetesCluster());
 
         if(log.isInfoEnabled()) {
             log.info(String.format("Publishing cluster removed event: 
[service] %s [cluster] %s", ctxt.getCartridgeType(), ctxt.getClusterId()));

http://git-wip-us.apache.org/repos/asf/stratos/blob/5ab19f5d/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 5058293..b02a1cb 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
@@ -143,5 +143,6 @@ public class StratosConstants {
     // Kubernetes related constants
     public static final String KUBERNETES_CLUSTER_ID = "kubernetes.cluster.id";
     public static final String KUBERNETES_MASTER_IP = "kubernetes.master.ip";
-
+    public static final String KUBERNETES_MIN_REPLICAS = 
"kubernetes.replicas.min";
+    public static final String KUBERNETES_PORT_RANGE = "kubernetes.port.range";
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/5ab19f5d/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ClusterRemovedEvent.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ClusterRemovedEvent.java
 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ClusterRemovedEvent.java
index 43ba836..c23e5a7 100644
--- 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ClusterRemovedEvent.java
+++ 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ClusterRemovedEvent.java
@@ -31,12 +31,14 @@ public class ClusterRemovedEvent extends TopologyEvent 
implements Serializable {
     private final String clusterId;
     private final String deploymentPolicy;
     private final boolean isLbCluster;
+    private final boolean isKubernetesCluster;
 
-    public ClusterRemovedEvent(String serviceName, String clusterId, String 
deploymentPolicy, boolean isLbCluster) {
+    public ClusterRemovedEvent(String serviceName, String clusterId, String 
deploymentPolicy, boolean isLbCluster, boolean isKubernetesCluster) {
         this.serviceName = serviceName;
         this.clusterId = clusterId;
         this.isLbCluster = isLbCluster;
         this.deploymentPolicy = deploymentPolicy;
+        this.isKubernetesCluster = isKubernetesCluster;
     }
 
     public String getServiceName() {
@@ -54,4 +56,8 @@ public class ClusterRemovedEvent extends TopologyEvent 
implements Serializable {
        public String getDeploymentPolicy() {
                return deploymentPolicy;
        }
+       
+    public boolean isKubernetesCluster() {
+        return isKubernetesCluster;
+    }
 }

Reply via email to