You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by ni...@apache.org on 2014/12/07 13:40:43 UTC
[10/16] stratos git commit: Porting container APIs with grouping
changes.
Porting container APIs with grouping changes.
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/2e9edf45
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/2e9edf45
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/2e9edf45
Branch: refs/heads/master
Commit: 2e9edf4579418e831b3a6e0e8b28e62ca6265530
Parents: 1821ee0
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Sun Dec 7 12:50:24 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sun Dec 7 18:00:49 2014 +0530
----------------------------------------------------------------------
.../client/CloudControllerClient.java | 4 +-
.../domain/KubernetesClusterContext.java | 160 +++++++++----------
.../impl/CloudControllerServiceImpl.java | 81 +++++++---
.../impl/CloudControllerServiceUtil.java | 2 +
.../controller/util/CloudControllerUtil.java | 43 +++--
.../common/constants/StratosConstants.java | 2 +
6 files changed, 171 insertions(+), 121 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/2e9edf45/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/CloudControllerClient.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/CloudControllerClient.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/CloudControllerClient.java
index bf68913..e902dfb 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/CloudControllerClient.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/CloudControllerClient.java
@@ -197,7 +197,7 @@ public class CloudControllerClient {
isPrimaryProp.setValue(String.valueOf(isPrimary));
Property minCountProp = new Property();
- minCountProp.setName("MIN_COUNT");
+ minCountProp.setName(StratosConstants.MIN_COUNT);
minCountProp.setValue(String.valueOf(minMemberCount));
memberContextProps.addProperty(isPrimaryProp);
@@ -381,7 +381,7 @@ public class CloudControllerClient {
isPrimaryProp.setValue(String.valueOf(isPrimary));
Property minCountProp = new Property();
- minCountProp.setName("MIN_COUNT");
+ minCountProp.setName(StratosConstants.MIN_COUNT);
minCountProp.setValue(String.valueOf(minMemberCount));
memberContextProps.addProperty(isPrimaryProp);
http://git-wip-us.apache.org/repos/asf/stratos/blob/2e9edf45/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 1f19271..a92db26 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
@@ -38,26 +38,31 @@ public class KubernetesClusterContext implements Serializable {
// id of the Kubernetes cluster
private String kubernetesClusterId;
- // available host port range, delimited by a hyphen
- private String hostPortRange;
+ private int upperPort;
+ private int lowerPort;
// kubernetes master ip
private String masterIp;
+ private String masterPort;
// available list of ports
private List<Integer> availableHostPorts;
// kubernetes client API instance
private transient KubernetesApiClient kubApi;
- public KubernetesClusterContext(String id, String portRange, String masterIp) {
+ public KubernetesClusterContext(String id, String masterIp, String masterPort, int upperPort, int lowerPort) {
availableHostPorts = new ArrayList<Integer>();
+ this.upperPort = upperPort;
+ this.lowerPort = lowerPort;
+ // populate the ports
+ populatePorts(lowerPort, upperPort);
this.kubernetesClusterId = id;
- this.hostPortRange = portRange;
this.masterIp = masterIp;
- this.setKubApi(new KubernetesApiClient(getEndpoint(masterIp)));
+ this.masterPort = masterPort;
+ this.setKubApi(new KubernetesApiClient(getEndpoint(masterIp, masterPort)));
}
- private String getEndpoint(String ip) {
- return "http://"+ip+":8080/api/v1beta1/";
+ private String getEndpoint(String ip, String port) {
+ return "http://"+ip+":"+port+"/api/v1beta1/";
}
public String getKubernetesClusterId() {
@@ -67,14 +72,6 @@ public class KubernetesClusterContext implements Serializable {
this.kubernetesClusterId = kubernetesClusterId;
}
- public String getHostPortRange() {
- return hostPortRange;
- }
-
- public void setHostPortRange(String hostPortRange) {
- this.hostPortRange = hostPortRange;
- }
-
public List<Integer> getAvailableHostPorts() {
return availableHostPorts;
}
@@ -83,30 +80,10 @@ public class KubernetesClusterContext implements Serializable {
this.availableHostPorts = availableHostPorts;
}
- private int[] portBoundaries() {
- String[] portStrings = hostPortRange.split("-");
- int[] portInts = new int[2];
- portInts[0] = Integer.parseInt(portStrings[0]);
- portInts[1] = Integer.parseInt(portStrings[1]);
- return portInts;
- }
-
public int getAnAvailableHostPort() {
- int[] ports = {4000, 5000};
- if (availableHostPorts.isEmpty()) {
- try {
-
- ports = portBoundaries();
- } catch (Exception ignore) {
- // on an exception, we use the default range
- log.warn("Unable to find a port range, hence using the default. [4000-5000]"
- + " Exception");
- }
-
- // populate the ports
- populatePorts(ports[0], ports[1]);
- }
-
+ if (availableHostPorts.isEmpty()) {
+ return -1;
+ }
return availableHostPorts.remove(0);
}
@@ -133,7 +110,7 @@ public class KubernetesClusterContext implements Serializable {
public KubernetesApiClient getKubApi() {
if (kubApi == null) {
- kubApi = new KubernetesApiClient(getEndpoint(masterIp));
+ kubApi = new KubernetesApiClient(getEndpoint(masterIp, masterPort));
}
return kubApi;
}
@@ -142,46 +119,69 @@ public class KubernetesClusterContext implements Serializable {
this.kubApi = kubApi;
}
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result
- + ((hostPortRange == null) ? 0 : hostPortRange.hashCode());
- result = prime
- * result
- + ((kubernetesClusterId == null) ? 0 : kubernetesClusterId
- .hashCode());
- result = prime * result
- + ((masterIp == null) ? 0 : masterIp.hashCode());
- return result;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj)
- return true;
- if (obj == null)
- return false;
- if (getClass() != obj.getClass())
- return false;
- KubernetesClusterContext other = (KubernetesClusterContext) obj;
- if (hostPortRange == null) {
- if (other.hostPortRange != null)
- return false;
- } else if (!hostPortRange.equals(other.hostPortRange))
- return false;
- if (kubernetesClusterId == null) {
- if (other.kubernetesClusterId != null)
- return false;
- } else if (!kubernetesClusterId.equals(other.kubernetesClusterId))
- return false;
- if (masterIp == null) {
- if (other.masterIp != null)
- return false;
- } else if (!masterIp.equals(other.masterIp))
- return false;
- return true;
- }
+ public int getUpperPort() {
+ return upperPort;
+ }
+
+ public void setUpperPort(int upperPort) {
+ this.upperPort = upperPort;
+ }
+
+ public int getLowerPort() {
+ return lowerPort;
+ }
+
+ public void setLowerPort(int lowerPort) {
+ this.lowerPort = lowerPort;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((availableHostPorts == null) ? 0 : availableHostPorts.hashCode());
+ result = prime * result + ((kubernetesClusterId == null) ? 0 : kubernetesClusterId.hashCode());
+ result = prime * result + lowerPort;
+ result = prime * result + ((masterIp == null) ? 0 : masterIp.hashCode());
+ result = prime * result + ((masterPort == null) ? 0 : masterPort.hashCode());
+ result = prime * result + upperPort;
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ KubernetesClusterContext other = (KubernetesClusterContext) obj;
+ if (availableHostPorts == null) {
+ if (other.availableHostPorts != null)
+ return false;
+ } else if (!availableHostPorts.equals(other.availableHostPorts))
+ return false;
+ if (kubernetesClusterId == null) {
+ if (other.kubernetesClusterId != null)
+ return false;
+ } else if (!kubernetesClusterId.equals(other.kubernetesClusterId))
+ return false;
+ if (lowerPort != other.lowerPort)
+ return false;
+ if (masterIp == null) {
+ if (other.masterIp != null)
+ return false;
+ } else if (!masterIp.equals(other.masterIp))
+ return false;
+ if (masterPort == null) {
+ if (other.masterPort != null)
+ return false;
+ } else if (!masterPort.equals(other.masterPort))
+ return false;
+ if (upperPort != other.upperPort)
+ return false;
+ return true;
+ }
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/2e9edf45/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 b8fd6c5..1679e3f 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
@@ -51,6 +51,7 @@ import org.apache.stratos.common.constants.StratosConstants;
import org.apache.stratos.common.kubernetes.KubernetesGroup;
import org.apache.stratos.common.kubernetes.KubernetesHost;
import org.apache.stratos.common.kubernetes.KubernetesMaster;
+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;
@@ -1082,6 +1083,9 @@ public class CloudControllerServiceImpl implements CloudControllerService {
String clusterId = containerClusterContext.getClusterId();
handleNullObject(clusterId, "Container start-up failed. Cluster id is null.");
+
+ Partition partition = containerClusterContext.getPartition();
+ handleNullObject(partition, "Container start-up failed. Null partition found in ContainerClusterContext.");
if (log.isDebugEnabled()) {
log.debug("Received a container spawn request : " + containerClusterContext.toString());
@@ -1102,13 +1106,28 @@ public class CloudControllerServiceImpl implements CloudControllerService {
}
try {
- String minReplicas = validateProperty(StratosConstants.KUBERNETES_MIN_REPLICAS, ctxt);
- String kubernetesClusterId = validateProperty(StratosConstants.KUBERNETES_CLUSTER_ID, ctxt);
- String kubernetesMasterIp = validateProperty(StratosConstants.KUBERNETES_MASTER_IP, containerClusterContext);
- String kubernetesPortRange = validateProperty(StratosConstants.KUBERNETES_PORT_RANGE, containerClusterContext);
+ String minReplicas =
+ validateProperty(StratosConstants.MIN_COUNT, containerClusterContext.getProperties(),
+ containerClusterContext.toString());
+ String kubernetesClusterId =
+ validateProperty(StratosConstants.KUBERNETES_CLUSTER_ID, partition.getProperties(),
+ partition.toString());
+
+ KubernetesGroup kubernetesGroup =
+ CloudControllerContext.getInstance().getKubernetesGroup(kubernetesClusterId);
+ handleNullObject(kubernetesGroup, "Container start-up failed. Kubernetes group not found for id: "
+ + kubernetesClusterId);
+
+ String kubernetesMasterIp = kubernetesGroup.getKubernetesMaster().getHostIpAddress();
+ PortRange kubernetesPortRange = kubernetesGroup.getPortRange();
+ // optional
+ String kubernetesMasterPort =
+ CloudControllerUtil.getProperty(kubernetesGroup.getKubernetesMaster().getProperties(),
+ StratosConstants.KUBERNETES_MASTER_PORT,
+ StratosConstants.KUBERNETES_MASTER_DEFAULT_PORT);
KubernetesClusterContext kubClusterContext = getKubernetesClusterContext(kubernetesClusterId,
- kubernetesMasterIp, kubernetesPortRange);
+ kubernetesMasterIp, kubernetesMasterPort, kubernetesPortRange.getLower(), kubernetesPortRange.getUpper());
KubernetesApiClient kubApi = kubClusterContext.getKubApi();
// first let's create a replication controller.
@@ -1227,27 +1246,45 @@ public class CloudControllerServiceImpl implements CloudControllerService {
}
}
- private String validateProperty(String property, ClusterContext ctxt) {
-
- String propVal = CloudControllerUtil.getProperty(ctxt.getProperties(), property);
- handleNullObject(propVal, "Property validation failed. Cannot find '" + property + "' in " + ctxt);
- return propVal;
- }
-
- private String validateProperty(String property, ContainerClusterContext ctxt) {
+// private String validateProperty(String property, ClusterContext ctxt) {
+//
+// String propVal = CloudControllerUtil.getProperty(ctxt.getProperties(), property);
+// handleNullObject(propVal, "Property validation failed. Cannot find '" + property + "' in " + ctxt);
+// return propVal;
+// }
+//
+// private String validateProperty(String property, ContainerClusterContext ctxt) {
+//
+// String propVal = CloudControllerUtil.getProperty(ctxt.getProperties(), property);
+// handleNullObject(propVal, "Property validation failed. Cannot find '" + property + "' in " + ctxt);
+// return propVal;
+//
+// }
+//
+// private String validateProperty(String property, Partition partition) {
+//
+// String propVal = CloudControllerUtil.getProperty(partition.getProperties(), property);
+// handleNullObject(propVal, "Property validation failed. Cannot find property: '" + property);
+// return propVal;
+//
+// }
+
+ private String validateProperty(String property, org.apache.stratos.common.Properties properties, String object) {
- String propVal = CloudControllerUtil.getProperty(ctxt.getProperties(), property);
- handleNullObject(propVal, "Property validation failed. '" + property + "' in " + ctxt);
+ String propVal = CloudControllerUtil.getProperty(properties, property);
+ handleNullObject(propVal, "Property validation failed. Cannot find property: '" + property+ " in "+object);
return propVal;
}
- private KubernetesClusterContext getKubernetesClusterContext(
- String kubernetesClusterId, String kubernetesMasterIp,
- String kubernetesPortRange) {
+ private KubernetesClusterContext getKubernetesClusterContext(String kubernetesClusterId, String kubernetesMasterIp,
+ String kubernetesMasterPort, int upperPort, int lowerPort) {
- KubernetesClusterContext origCtxt = CloudControllerContext.getInstance().getKubernetesClusterContext(kubernetesClusterId);
- KubernetesClusterContext newCtxt = new KubernetesClusterContext(kubernetesClusterId, kubernetesPortRange, kubernetesMasterIp);
+ KubernetesClusterContext origCtxt =
+ CloudControllerContext.getInstance().getKubernetesClusterContext(kubernetesClusterId);
+ KubernetesClusterContext newCtxt =
+ new KubernetesClusterContext(kubernetesClusterId, kubernetesMasterIp,
+ kubernetesMasterPort, upperPort, lowerPort);
if (origCtxt == null) {
CloudControllerContext.getInstance().addKubernetesClusterContext(newCtxt);
@@ -1385,7 +1422,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
}
try {
- String kubernetesClusterId = validateProperty(StratosConstants.KUBERNETES_CLUSTER_ID, ctxt);
+ String kubernetesClusterId = validateProperty(StratosConstants.KUBERNETES_CLUSTER_ID, ctxt.getProperties(), ctxt.toString());
KubernetesClusterContext kubClusterContext = CloudControllerContext.getInstance().getKubernetesClusterContext(kubernetesClusterId);
@@ -1555,7 +1592,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
}
}
}
-
+
private void handleNullObject(Object obj, String errorMsg) {
if (obj == null) {
log.error(errorMsg);
http://git-wip-us.apache.org/repos/asf/stratos/blob/2e9edf45/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceUtil.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceUtil.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceUtil.java
index 4fbf294..b992643 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceUtil.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceUtil.java
@@ -27,6 +27,7 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.stratos.cloud.controller.context.CloudControllerContext;
import org.apache.stratos.cloud.controller.domain.ClusterContext;
+import org.apache.stratos.cloud.controller.domain.ContainerClusterContext;
import org.apache.stratos.cloud.controller.domain.IaasProvider;
import org.apache.stratos.cloud.controller.domain.MemberContext;
import org.apache.stratos.cloud.controller.domain.Partition;
@@ -197,4 +198,5 @@ public class CloudControllerServiceUtil {
validatePartitionAndGetIaasProvider(partition, iaasProvider);
return true;
}
+
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/2e9edf45/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 2e4e505..82baef8 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
@@ -295,9 +295,15 @@ public class CloudControllerUtil {
}
- public static String getProperty(Properties properties, String key) {
- if (key != null && properties != null) {
- for (Iterator<Entry<Object, Object>> iterator = properties.entrySet().iterator(); iterator.hasNext();) {
+ public static String getProperty(org.apache.stratos.common.Properties properties, String key, String defaultValue) {
+ Properties props = toJavaUtilProperties(properties);
+
+ return getProperty(props, key, defaultValue);
+ }
+
+ 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();
String propName = type.getKey().toString();
String propValue = type.getValue().toString();
@@ -305,25 +311,28 @@ public class CloudControllerUtil {
return propValue;
}
}
- }
-
- return null;
+ }
+
+ return defaultValue;
}
-
- public static String getProperty(org.apache.stratos.common.Properties properties, String key) {
- Properties props = toJavaUtilProperties(properties);
-
- return getProperty(props, key);
- }
-
- public static org.apache.stratos.common.Properties addProperty(
- org.apache.stratos.common.Properties properties, String key, String value) {
+
+ public static String getProperty(Properties properties, String key) {
+ return getProperty(properties, key, null);
+ }
+
+ public static String getProperty(org.apache.stratos.common.Properties properties, String key) {
+ Properties props = toJavaUtilProperties(properties);
+
+ return getProperty(props, key);
+ }
+
+ public static org.apache.stratos.common.Properties addProperty(org.apache.stratos.common.Properties properties,
+ String key, String value) {
Property property = new Property();
property.setName(key);
property.setValue(value);
- org.apache.stratos.common.Properties newProperties =
- new org.apache.stratos.common.Properties();
+ org.apache.stratos.common.Properties newProperties = new org.apache.stratos.common.Properties();
newProperties.setProperties(ArrayUtils.add(properties.getProperties(), property));
return newProperties;
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/2e9edf45/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 df9dec2..d6bf002 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
@@ -149,6 +149,8 @@ public class StratosConstants {
public static final String KUBERNETES_CLUSTER_ID = "KUBERNETES_CLUSTER_ID";
public static final String KUBERNETES_DEPLOYER_TYPE = "kubernetes";
public static final String KUBERNETES_MASTER_IP = "KUBERNETES_MASTER_IP";
+ public static final String KUBERNETES_MASTER_PORT = "KUBERNETES_MASTER_PORT";
+ public static final String KUBERNETES_MASTER_DEFAULT_PORT = "8080";
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";