Refactoring functions to convert a MemberContext and adding a new function to convert a Member context to a Service.
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/39d161e1 Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/39d161e1 Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/39d161e1 Branch: refs/heads/docker-integration Commit: 39d161e11c5cb0f842660af9102606772cad6076 Parents: f44689a Author: Nirmal Fernando <[email protected]> Authored: Sat Sep 13 20:28:46 2014 +0530 Committer: Nirmal Fernando <[email protected]> Committed: Sat Sep 13 20:28:46 2014 +0530 ---------------------------------------------------------------------- .../ClusterContextToKubernetesContainer.java | 131 ------------------- .../ClusterContextToReplicationController.java | 77 ----------- .../MemberContextToKubernetesContainer.java | 131 +++++++++++++++++++ .../MemberContextToKubernetesService.java | 61 +++++++++ .../MemberContextToReplicationController.java | 77 +++++++++++ 5 files changed, 269 insertions(+), 208 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/39d161e1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ClusterContextToKubernetesContainer.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ClusterContextToKubernetesContainer.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ClusterContextToKubernetesContainer.java deleted file mode 100644 index a38f5d6..0000000 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ClusterContextToKubernetesContainer.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.stratos.cloud.controller.functions; - -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; - -import org.apache.commons.logging.Log; -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.PortMapping; -import org.apache.stratos.cloud.controller.pojo.Property; -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.EnvironmentVariable; -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} - * Object. - */ -public class ClusterContextToKubernetesContainer implements Function<ClusterContext, Container>{ - - private static final Log log = LogFactory.getLog(ClusterContextToKubernetesContainer.class); - private FasterLookUpDataHolder dataHolder = FasterLookUpDataHolder.getInstance(); - - @Override - public Container apply(ClusterContext clusterContext) { - Container container = new Container(); - container.setName(clusterContext.getHostName()); - - Cartridge cartridge = dataHolder.getCartridge(clusterContext - .getCartridgeType()); - - if (cartridge == null) { - log.error("Cannot find a Cartridge of type : " - + clusterContext.getCartridgeType()); - return null; - } - - container.setImage(cartridge.getContainer().getImageName()); - - container.setPorts(getPorts(clusterContext, cartridge)); - - return container; - } - - private Port[] getPorts(ClusterContext ctxt, Cartridge cartridge) { - 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.setProtocol(portMapping.getProtocol()); - p.setName(p.getProtocol()+p.getContainerPort()); - portList.add(p); - } - - return portList.toArray(ports); - } - - private String generateMemberId(String clusterId) { - UUID memberId = UUID.randomUUID(); - return clusterId + memberId.toString(); - } - - private EnvironmentVariable[] getEnvironmentVars(ClusterContext ctxt, Cartridge cartridge) { - - 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(); - if (props1 != null) { - for (Property prop : props1.getProperties()) { - addToPayload(payload, prop.getName(), prop.getValue()); - } - } - } - } - - 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/39d161e1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ClusterContextToReplicationController.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ClusterContextToReplicationController.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ClusterContextToReplicationController.java deleted file mode 100644 index 36141f2..0000000 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ClusterContextToReplicationController.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.stratos.cloud.controller.functions; - -import org.apache.stratos.cloud.controller.pojo.ClusterContext; -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.ReplicationController; -import org.apache.stratos.kubernetes.client.model.Selector; -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} - * Object. - */ -public class ClusterContextToReplicationController implements Function<ClusterContext, ReplicationController>{ - - @Override - public ReplicationController apply(ClusterContext clusterContext) { - ReplicationController contr = new ReplicationController(); - contr.setId(clusterContext.getClusterId()); - contr.setKind("ReplicationController"); - contr.setApiVersion("v1beta1"); - State desiredState = new State(); - desiredState.setReplicas(3); - Selector selector = new Selector(); - selector.setName(clusterContext.getClusterId()); - desiredState.setReplicaSelector(selector); - - Pod podTemplate = new Pod(); - State podState = new State(); - Manifest manifest = new Manifest(); - manifest.setVersion("v1beta1"); - manifest.setId(clusterContext.getClusterId()); - - ClusterContextToKubernetesContainer containerFunc = new ClusterContextToKubernetesContainer(); - Container container = containerFunc.apply(clusterContext); - - manifest.setContainers(new Container[] { container }); - - podState.setManifest(manifest); - podTemplate.setDesiredState(podState); - Label l1 = new Label(); - l1.setName(clusterContext.getClusterId()); - podTemplate.setLabels(l1); - - desiredState.setPodTemplate(podTemplate); - contr.setDesiredState(desiredState); - - Label l2 = new Label(); - l2.setName(clusterContext.getClusterId()); - contr.setLabels(l2); - - return contr; - } - -} http://git-wip-us.apache.org/repos/asf/stratos/blob/39d161e1/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 new file mode 100644 index 0000000..a38f5d6 --- /dev/null +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/MemberContextToKubernetesContainer.java @@ -0,0 +1,131 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.stratos.cloud.controller.functions; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import org.apache.commons.logging.Log; +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.PortMapping; +import org.apache.stratos.cloud.controller.pojo.Property; +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.EnvironmentVariable; +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} + * Object. + */ +public class ClusterContextToKubernetesContainer implements Function<ClusterContext, Container>{ + + private static final Log log = LogFactory.getLog(ClusterContextToKubernetesContainer.class); + private FasterLookUpDataHolder dataHolder = FasterLookUpDataHolder.getInstance(); + + @Override + public Container apply(ClusterContext clusterContext) { + Container container = new Container(); + container.setName(clusterContext.getHostName()); + + Cartridge cartridge = dataHolder.getCartridge(clusterContext + .getCartridgeType()); + + if (cartridge == null) { + log.error("Cannot find a Cartridge of type : " + + clusterContext.getCartridgeType()); + return null; + } + + container.setImage(cartridge.getContainer().getImageName()); + + container.setPorts(getPorts(clusterContext, cartridge)); + + return container; + } + + private Port[] getPorts(ClusterContext ctxt, Cartridge cartridge) { + 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.setProtocol(portMapping.getProtocol()); + p.setName(p.getProtocol()+p.getContainerPort()); + portList.add(p); + } + + return portList.toArray(ports); + } + + private String generateMemberId(String clusterId) { + UUID memberId = UUID.randomUUID(); + return clusterId + memberId.toString(); + } + + private EnvironmentVariable[] getEnvironmentVars(ClusterContext ctxt, Cartridge cartridge) { + + 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(); + if (props1 != null) { + for (Property prop : props1.getProperties()) { + addToPayload(payload, prop.getName(), prop.getValue()); + } + } + } + } + + 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/39d161e1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/MemberContextToKubernetesService.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/MemberContextToKubernetesService.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/MemberContextToKubernetesService.java new file mode 100644 index 0000000..79326ce --- /dev/null +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/MemberContextToKubernetesService.java @@ -0,0 +1,61 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.stratos.cloud.controller.functions; + +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.runtime.FasterLookUpDataHolder; +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 MemberContext} object to a Kubernetes {@link Service} + * Object. + */ +public class MemberContextToKubernetesService implements Function<MemberContext, Service>{ + + private FasterLookUpDataHolder dataHolder = FasterLookUpDataHolder.getInstance(); + + @Override + public Service apply(MemberContext memberContext) { + + String clusterId = memberContext.getClusterId(); + ClusterContext clusterContext = dataHolder.getClusterContext(clusterId); + + String kubernetesClusterId = CloudControllerUtil.getProperty(clusterContext.getProperties(), + StratosConstants.KUBERNETES_CLUSTER_ID); + KubernetesClusterContext kubClusterContext = dataHolder.getKubernetesClusterContext(kubernetesClusterId); + + Service service = new Service(); + service.setApiVersion("v1beta1"); + service.setId(clusterId); + service.setKind("Service"); + service.setPort(kubClusterContext.getAnAvailableHostPort()); + Selector selector = new Selector(); + selector.setName(clusterId); + service.setSelector(selector); + + return service; + } + +} http://git-wip-us.apache.org/repos/asf/stratos/blob/39d161e1/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 new file mode 100644 index 0000000..36141f2 --- /dev/null +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/MemberContextToReplicationController.java @@ -0,0 +1,77 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.stratos.cloud.controller.functions; + +import org.apache.stratos.cloud.controller.pojo.ClusterContext; +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.ReplicationController; +import org.apache.stratos.kubernetes.client.model.Selector; +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} + * Object. + */ +public class ClusterContextToReplicationController implements Function<ClusterContext, ReplicationController>{ + + @Override + public ReplicationController apply(ClusterContext clusterContext) { + ReplicationController contr = new ReplicationController(); + contr.setId(clusterContext.getClusterId()); + contr.setKind("ReplicationController"); + contr.setApiVersion("v1beta1"); + State desiredState = new State(); + desiredState.setReplicas(3); + Selector selector = new Selector(); + selector.setName(clusterContext.getClusterId()); + desiredState.setReplicaSelector(selector); + + Pod podTemplate = new Pod(); + State podState = new State(); + Manifest manifest = new Manifest(); + manifest.setVersion("v1beta1"); + manifest.setId(clusterContext.getClusterId()); + + ClusterContextToKubernetesContainer containerFunc = new ClusterContextToKubernetesContainer(); + Container container = containerFunc.apply(clusterContext); + + manifest.setContainers(new Container[] { container }); + + podState.setManifest(manifest); + podTemplate.setDesiredState(podState); + Label l1 = new Label(); + l1.setName(clusterContext.getClusterId()); + podTemplate.setLabels(l1); + + desiredState.setPodTemplate(podTemplate); + contr.setDesiredState(desiredState); + + Label l2 = new Label(); + l2.setName(clusterContext.getClusterId()); + contr.setLabels(l2); + + return contr; + } + +}
