Implementing Kubernetes replication controller creation and service proxy creation - initial version.
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/bedaac71 Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/bedaac71 Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/bedaac71 Branch: refs/heads/docker-integration Commit: bedaac71648a30ef4212a7146e17f7a0034374bc Parents: 39d161e Author: Nirmal Fernando <[email protected]> Authored: Sat Sep 13 20:30:37 2014 +0530 Committer: Nirmal Fernando <[email protected]> Committed: Sat Sep 13 20:30:37 2014 +0530 ---------------------------------------------------------------------- .../MemberContextToKubernetesContainer.java | 57 +++---- .../MemberContextToReplicationController.java | 24 ++- .../impl/CloudControllerServiceImpl.java | 165 ++++++++++++++----- .../pojo/KubernetesClusterContext.java | 62 ++++++- .../runtime/FasterLookUpDataHolder.java | 6 +- .../controller/util/CloudControllerUtil.java | 6 + 6 files changed, 247 insertions(+), 73 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/bedaac71/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/MemberContextToKubernetesContainer.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/MemberContextToKubernetesContainer.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/MemberContextToKubernetesContainer.java index a38f5d6..9ae4145 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/MemberContextToKubernetesContainer.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/MemberContextToKubernetesContainer.java @@ -27,6 +27,7 @@ import org.apache.commons.logging.LogFactory; import org.apache.stratos.cloud.controller.pojo.Cartridge; import org.apache.stratos.cloud.controller.pojo.ClusterContext; import org.apache.stratos.cloud.controller.pojo.KubernetesClusterContext; +import org.apache.stratos.cloud.controller.pojo.MemberContext; import org.apache.stratos.cloud.controller.pojo.PortMapping; import org.apache.stratos.cloud.controller.pojo.Property; import org.apache.stratos.cloud.controller.runtime.FasterLookUpDataHolder; @@ -39,16 +40,19 @@ import org.apache.stratos.kubernetes.client.model.Port; import com.google.common.base.Function; /** - * Is responsible for converting a {@link ClusterContext} object to a Kubernetes {@link Container} + * Is responsible for converting a {@link MemberContext} object to a Kubernetes {@link Container} * Object. */ -public class ClusterContextToKubernetesContainer implements Function<ClusterContext, Container>{ +public class MemberContextToKubernetesContainer implements Function<MemberContext, Container>{ - private static final Log log = LogFactory.getLog(ClusterContextToKubernetesContainer.class); + private static final Log log = LogFactory.getLog(MemberContextToKubernetesContainer.class); private FasterLookUpDataHolder dataHolder = FasterLookUpDataHolder.getInstance(); @Override - public Container apply(ClusterContext clusterContext) { + public Container apply(MemberContext memberContext) { + String clusterId = memberContext.getClusterId(); + ClusterContext clusterContext = dataHolder.getClusterContext(clusterId); + Container container = new Container(); container.setName(clusterContext.getHostName()); @@ -64,21 +68,23 @@ public class ClusterContextToKubernetesContainer implements Function<ClusterCont container.setImage(cartridge.getContainer().getImageName()); container.setPorts(getPorts(clusterContext, cartridge)); + + container.setEnv(getEnvironmentVars(memberContext, clusterContext)); return container; } private Port[] getPorts(ClusterContext ctxt, Cartridge cartridge) { - String kubernetesClusterId = CloudControllerUtil.getProperty(ctxt.getProperties(), - StratosConstants.KUBERNETES_CLUSTER_ID); - KubernetesClusterContext kubClusterContext = dataHolder.getKubernetesClusterContext(kubernetesClusterId); +// String kubernetesClusterId = CloudControllerUtil.getProperty(ctxt.getProperties(), +// StratosConstants.KUBERNETES_CLUSTER_ID); +// KubernetesClusterContext kubClusterContext = dataHolder.getKubernetesClusterContext(kubernetesClusterId); Port[] ports = new Port[cartridge.getPortMappings().size()]; List<Port> portList = new ArrayList<Port>(); for (PortMapping portMapping : cartridge.getPortMappings()) { Port p = new Port(); p.setContainerPort(Integer.parseInt(portMapping.getPort())); - p.setHostPort(kubClusterContext.getAnAvailableHostPort()); +// p.setHostPort(kubClusterContext.getAnAvailableHostPort()); p.setProtocol(portMapping.getProtocol()); p.setName(p.getProtocol()+p.getContainerPort()); portList.add(p); @@ -87,36 +93,31 @@ public class ClusterContextToKubernetesContainer implements Function<ClusterCont return portList.toArray(ports); } - private String generateMemberId(String clusterId) { - UUID memberId = UUID.randomUUID(); - return clusterId + memberId.toString(); - } - - private EnvironmentVariable[] getEnvironmentVars(ClusterContext ctxt, Cartridge cartridge) { + private EnvironmentVariable[] getEnvironmentVars(MemberContext memberCtxt, + ClusterContext ctxt) { String kubernetesClusterId = CloudControllerUtil.getProperty(ctxt.getProperties(), StratosConstants.KUBERNETES_CLUSTER_ID); List<EnvironmentVariable> envVars = new ArrayList<EnvironmentVariable>(); - - addToEnvironment(envVars, StratosConstants.MEMBER_ID, generateMemberId(ctxt.getClusterId())); - addToEnvironment(envVars, StratosConstants.LB_CLUSTER_ID, generateMemberId(ctxt.getClusterId())); - addToEnvironment(envVars, StratosConstants.MEMBER_ID, generateMemberId(ctxt.getClusterId())); - addToEnvironment(envVars, StratosConstants.MEMBER_ID, generateMemberId(ctxt.getClusterId())); - // have to add memberID to the payload - StringBuilder payload = new StringBuilder(ctxt.getPayload()); - addToPayload(payload, "MEMBER_ID", memberID); - addToPayload(payload, "LB_CLUSTER_ID", memberContext.getLbClusterId()); - addToPayload(payload, "NETWORK_PARTITION_ID", memberContext.getNetworkPartitionId()); - addToPayload(payload, StratosConstants.KUBERNETES_CLUSTER_ID, kubernetesClusterId); - if(memberContext.getProperties() != null) { - org.apache.stratos.cloud.controller.pojo.Properties props1 = memberContext.getProperties(); + //FIXME member id, should it be unique for a container? + addToEnvironment(envVars, StratosConstants.MEMBER_ID, memberCtxt.getMemberId()); + addToEnvironment(envVars, StratosConstants.LB_CLUSTER_ID, memberCtxt.getLbClusterId()); + addToEnvironment(envVars, StratosConstants.NETWORK_PARTITION_ID, memberCtxt.getNetworkPartitionId()); + addToEnvironment(envVars, StratosConstants.KUBERNETES_CLUSTER_ID, kubernetesClusterId); + if(memberCtxt.getProperties() != null) { + org.apache.stratos.cloud.controller.pojo.Properties props1 = memberCtxt.getProperties(); if (props1 != null) { for (Property prop : props1.getProperties()) { - addToPayload(payload, prop.getName(), prop.getValue()); + addToEnvironment(envVars, prop.getName(), prop.getValue()); } } } + + EnvironmentVariable[] vars = new EnvironmentVariable[envVars.size()]; + + return envVars.toArray(vars); + } private void addToEnvironment(List<EnvironmentVariable> envVars, http://git-wip-us.apache.org/repos/asf/stratos/blob/bedaac71/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/MemberContextToReplicationController.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/MemberContextToReplicationController.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/MemberContextToReplicationController.java index 36141f2..9bc1cf9 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/MemberContextToReplicationController.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/MemberContextToReplicationController.java @@ -19,6 +19,10 @@ package org.apache.stratos.cloud.controller.functions; import org.apache.stratos.cloud.controller.pojo.ClusterContext; +import org.apache.stratos.cloud.controller.pojo.MemberContext; +import org.apache.stratos.cloud.controller.runtime.FasterLookUpDataHolder; +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.Manifest; @@ -30,19 +34,27 @@ import org.apache.stratos.kubernetes.client.model.State; import com.google.common.base.Function; /** - * Is responsible for converting a {@link ClusterContext} object to a Kubernetes {@link ReplicationController} + * Is responsible for converting a {@link MemberContext} object to a Kubernetes {@link ReplicationController} * Object. */ -public class ClusterContextToReplicationController implements Function<ClusterContext, ReplicationController>{ +public class MemberContextToReplicationController implements Function<MemberContext, ReplicationController>{ + private FasterLookUpDataHolder dataHolder = FasterLookUpDataHolder.getInstance(); + @Override - public ReplicationController apply(ClusterContext clusterContext) { + public ReplicationController apply(MemberContext memberContext) { + + String clusterId = memberContext.getClusterId(); + ClusterContext clusterContext = dataHolder.getClusterContext(clusterId); + ReplicationController contr = new ReplicationController(); contr.setId(clusterContext.getClusterId()); contr.setKind("ReplicationController"); contr.setApiVersion("v1beta1"); State desiredState = new State(); - desiredState.setReplicas(3); + String minReplicas = CloudControllerUtil.getProperty(clusterContext.getProperties(), + StratosConstants.KUBERNETES_MIN_REPLICAS); + desiredState.setReplicas(Integer.parseInt(minReplicas)); Selector selector = new Selector(); selector.setName(clusterContext.getClusterId()); desiredState.setReplicaSelector(selector); @@ -53,8 +65,8 @@ public class ClusterContextToReplicationController implements Function<ClusterCo manifest.setVersion("v1beta1"); manifest.setId(clusterContext.getClusterId()); - ClusterContextToKubernetesContainer containerFunc = new ClusterContextToKubernetesContainer(); - Container container = containerFunc.apply(clusterContext); + MemberContextToKubernetesContainer containerFunc = new MemberContextToKubernetesContainer(); + Container container = containerFunc.apply(memberContext); manifest.setContainers(new Container[] { container }); http://git-wip-us.apache.org/repos/asf/stratos/blob/bedaac71/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java index 118daf4..fc1f504 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java @@ -28,7 +28,8 @@ import org.apache.stratos.cloud.controller.concurrent.PartitionValidatorCallable import org.apache.stratos.cloud.controller.concurrent.ThreadExecutor; import org.apache.stratos.cloud.controller.deployment.partition.Partition; import org.apache.stratos.cloud.controller.exception.*; -import org.apache.stratos.cloud.controller.functions.ClusterContextToReplicationController; +import org.apache.stratos.cloud.controller.functions.MemberContextToKubernetesService; +import org.apache.stratos.cloud.controller.functions.MemberContextToReplicationController; import org.apache.stratos.cloud.controller.interfaces.CloudControllerService; import org.apache.stratos.cloud.controller.interfaces.Iaas; import org.apache.stratos.cloud.controller.persist.Deserializer; @@ -43,6 +44,8 @@ import org.apache.stratos.cloud.controller.util.CloudControllerUtil; import org.apache.stratos.cloud.controller.validate.interfaces.PartitionValidator; import org.apache.stratos.common.constants.StratosConstants; import org.apache.stratos.kubernetes.client.KubernetesApiClient; +import org.apache.stratos.kubernetes.client.model.ReplicationController; +import org.apache.stratos.kubernetes.client.model.Service; import org.apache.stratos.messaging.domain.topology.Member; import org.apache.stratos.messaging.domain.topology.MemberStatus; import org.apache.stratos.messaging.util.Constants; @@ -1290,17 +1293,6 @@ public class CloudControllerServiceImpl implements CloudControllerService { throw new IllegalArgumentException(msg); } - String kubernetesClusterId = CloudControllerUtil.getProperty(ctxt.getProperties(), - StratosConstants.KUBERNETES_CLUSTER_ID); - - if (kubernetesClusterId == null) { - String msg = "Instance start-up failed. Cannot find '"+ - StratosConstants.KUBERNETES_CLUSTER_ID+"'. " + memberContext.toString(); - log.error(msg); - throw new IllegalArgumentException(msg); - } - - KubernetesClusterContext kubClusterContext = dataHolder.getKubernetesClusterContext(kubernetesClusterId); String cartridgeType = ctxt.getCartridgeType(); @@ -1320,35 +1312,117 @@ public class CloudControllerServiceImpl implements CloudControllerService { // generating the Unique member ID... String memberID = generateMemberId(clusterId); memberContext.setMemberId(memberID); - // have to add memberID to the payload - StringBuilder payload = new StringBuilder(ctxt.getPayload()); - addToPayload(payload, "MEMBER_ID", memberID); - addToPayload(payload, "LB_CLUSTER_ID", memberContext.getLbClusterId()); - addToPayload(payload, "NETWORK_PARTITION_ID", memberContext.getNetworkPartitionId()); - addToPayload(payload, StratosConstants.KUBERNETES_CLUSTER_ID, kubernetesClusterId); - if(memberContext.getProperties() != null) { - org.apache.stratos.cloud.controller.pojo.Properties props1 = memberContext.getProperties(); - if (props1 != null) { - for (Property prop : props1.getProperties()) { - addToPayload(payload, prop.getName(), prop.getValue()); - } - } - } - if (log.isDebugEnabled()) { - log.debug("Payload: " + payload.toString()); - } - + + + String kubernetesClusterId = CloudControllerUtil.getProperty(ctxt.getProperties(), + StratosConstants.KUBERNETES_CLUSTER_ID); + + if (kubernetesClusterId == null) { + String msg = "Instance start-up failed. Cannot find '"+ + StratosConstants.KUBERNETES_CLUSTER_ID+"'. " + ctxt; + log.error(msg); + throw new IllegalArgumentException(msg); + } + + String kubernetesMasterIp = CloudControllerUtil.getProperty(memberContext.getProperties(), + StratosConstants.KUBERNETES_MASTER_IP); + + if (kubernetesMasterIp == null) { + String msg = "Instance start-up failed. Cannot find '"+ + StratosConstants.KUBERNETES_MASTER_IP+"'. " + memberContext; + log.error(msg); + throw new IllegalArgumentException(msg); + } + + String kubernetesPortRange = CloudControllerUtil.getProperty(memberContext.getProperties(), + StratosConstants.KUBERNETES_PORT_RANGE); + + if (kubernetesPortRange == null) { + String msg = "Instance start-up failed. Cannot find '"+ + StratosConstants.KUBERNETES_PORT_RANGE+"'. " + memberContext; + log.error(msg); + throw new IllegalArgumentException(msg); + } + + KubernetesClusterContext kubClusterContext = getKubernetesClusterContext(kubernetesClusterId, kubernetesMasterIp, kubernetesPortRange); + + if (kubClusterContext == null) { + + } + KubernetesApiClient client = kubClusterContext.getKubernetesApiClient(); + + + // first let's create a replication controller. + MemberContextToReplicationController controllerFunction = new MemberContextToReplicationController(); + ReplicationController controller = controllerFunction.apply(memberContext); + if (log.isDebugEnabled()) { - log.debug("Cloud Controller is delegating request to start a container for " - + memberContext + " to Kubernetes layer."); + log.debug("Cloud Controller is delegating request to start a replication controller "+controller+ + " for "+ memberContext + " to Kubernetes layer."); } - - if (log.isDebugEnabled()) { - log.debug("Cloud Controller received a response for the request to start " - + memberContext + " from Jclouds layer."); + + client.createReplicationController(controller); + + if (log.isDebugEnabled()) { + log.debug("Cloud Controller successfully starte the controller " + + controller + " via Kubernetes layer."); + } + + // secondly let's create a kubernetes service proxy to load balance these containers + MemberContextToKubernetesService serviceFunction = new MemberContextToKubernetesService(); + Service service = serviceFunction.apply(memberContext); + + if (log.isDebugEnabled()) { + log.debug("Cloud Controller is delegating request to start a service "+service+ + " for "+ memberContext + " to Kubernetes layer."); } + + client.createService(service); + + if (log.isDebugEnabled()) { + log.debug("Cloud Controller successfully starte the controller " + + controller + " via Kubernetes layer."); + } + +// try{ +// memberContext.setPublicIpAddress(); +// dataHolder.addMemberContext(memberContext); +// +// // persist in registry +// persist(); +// +// +// // trigger topology +// TopologyBuilder.handleMemberSpawned(cartridgeType, clusterId, +// partition.getId(), ip, publicIp, memberContext); +// +// String memberID = memberContext.getMemberId(); +// +// // update the topology with the newly spawned member +// // publish data +// CartridgeInstanceDataPublisher.publish(memberID, +// memberContext.getPartition().getId(), +// memberContext.getNetworkPartitionId(), +// memberContext.getClusterId(), +// cartridgeType, +// MemberStatus.Created.toString(), +// node); +// if (log.isDebugEnabled()) { +// log.debug("Node details: " + node.toString()); +// } +// +// if (log.isDebugEnabled()) { +// log.debug("IP allocation process ended for "+memberContext); +// } +// +// } catch (Exception e) { +// String msg = "Error occurred while allocating an ip address. " + memberContext.toString(); +// log.error(msg, e); +// throw new CloudControllerException(msg, e); +// } + // //Start allocating ip as a new job @@ -1395,7 +1469,7 @@ public class CloudControllerServiceImpl implements CloudControllerService { // } // } - log.info("Instance is successfully starting up. "+memberContext.toString()); + log.info("Kubernetes entities are successfully starting up. "+memberContext.toString()); return memberContext; @@ -1405,5 +1479,22 @@ public class CloudControllerServiceImpl implements CloudControllerService { throw new IllegalStateException(msg, e); } } + + private KubernetesClusterContext getKubernetesClusterContext( + String kubernetesClusterId, String kubernetesMasterIp, + String kubernetesPortRange) { + + KubernetesClusterContext origCtxt = dataHolder.getKubernetesClusterContext(kubernetesClusterId); + KubernetesClusterContext newCtxt = new KubernetesClusterContext(kubernetesClusterId, kubernetesPortRange, kubernetesMasterIp); + + if (!origCtxt.equals(newCtxt)) { + // if for some reason master IP etc. have changed + newCtxt.setAvailableHostPorts(origCtxt.getAvailableHostPorts()); + dataHolder.addKubernetesClusterContext(newCtxt); + return newCtxt; + } else { + return origCtxt; + } + } } http://git-wip-us.apache.org/repos/asf/stratos/blob/bedaac71/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/KubernetesClusterContext.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/KubernetesClusterContext.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/KubernetesClusterContext.java index e501e56..c67d61a 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/KubernetesClusterContext.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/KubernetesClusterContext.java @@ -40,15 +40,25 @@ public class KubernetesClusterContext implements Serializable { private String kubernetesClusterId; // available host port range, delimited by a hyphen private String hostPortRange; + // kubernetes master ip + private String masterIp; // available list of ports private List<Integer> availableHostPorts; // kubernetes client API instance private KubernetesApiClient kubernetesApiClient; - public KubernetesClusterContext() { + public KubernetesClusterContext(String id, String portRange, String masterIp) { availableHostPorts = new ArrayList<Integer>(); + this.kubernetesClusterId = id; + this.hostPortRange = portRange; + this.masterIp = masterIp; + kubernetesApiClient = new KubernetesApiClient(getEndpoint(masterIp)); } + private String getEndpoint(String ip) { + return "http://"+ip+":8080/api/v1beta1/"; + } + public String getKubernetesClusterId() { return kubernetesClusterId; } @@ -113,5 +123,55 @@ public class KubernetesClusterContext implements Serializable { public void setKubernetesApiClient(KubernetesApiClient kubernetesApiClient) { this.kubernetesApiClient = kubernetesApiClient; } + + public String getMasterIp() { + return masterIp; + } + + public void setMasterIp(String masterIp) { + this.masterIp = masterIp; + } + + @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; + } } http://git-wip-us.apache.org/repos/asf/stratos/blob/bedaac71/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/runtime/FasterLookUpDataHolder.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/runtime/FasterLookUpDataHolder.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/runtime/FasterLookUpDataHolder.java index 8aae06b..a8c47ce 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/runtime/FasterLookUpDataHolder.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/runtime/FasterLookUpDataHolder.java @@ -399,10 +399,14 @@ public class FasterLookUpDataHolder implements Serializable{ public KubernetesClusterContext getKubernetesClusterContext(String kubClusterId) { return kubClusterIdToKubClusterContext.get(kubClusterId); } + + public void addKubernetesClusterContext(KubernetesClusterContext ctxt) { + this.kubClusterIdToKubClusterContext.put(ctxt.getKubernetesClusterId(), ctxt); + } public void setKubClusterIdToKubClusterContext( Map<String, KubernetesClusterContext> kubClusterIdToKubClusterContext) { this.kubClusterIdToKubClusterContext = kubClusterIdToKubClusterContext; } - + } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/stratos/blob/bedaac71/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 8895d3e..213fedb 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 @@ -303,6 +303,12 @@ public class CloudControllerUtil { return null; } + public static String getProperty(org.apache.stratos.cloud.controller.pojo.Properties properties, String key) { + Properties props = toJavaUtilProperties(properties); + + return getProperty(props, key); + } + /** * Converts org.apache.stratos.messaging.util.Properties to java.util.Properties * @param properties org.apache.stratos.messaging.util.Properties
