Repository: camel Updated Branches: refs/heads/master 946c8dffb -> 6c2c8c285
CAMEL-10132: Camel-Kubernetes: Add the ability to scale up and down a replication controller from Producer Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/0c3d3119 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/0c3d3119 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/0c3d3119 Branch: refs/heads/master Commit: 0c3d31190966acc5c1443262be0d0d0874c89240 Parents: 946c8df Author: Andrea Cosentino <anco...@gmail.com> Authored: Fri Jul 8 10:42:24 2016 +0200 Committer: Andrea Cosentino <anco...@gmail.com> Committed: Fri Jul 8 10:52:28 2016 +0200 ---------------------------------------------------------------------- .../kubernetes/KubernetesConstants.java | 1 + .../producer/KubernetesOperations.java | 1 + ...ubernetesReplicationControllersProducer.java | 36 +++++++ ...netesReplicationControllersProducerTest.java | 99 +++++++++++++++++++- 4 files changed, 136 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/0c3d3119/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/KubernetesConstants.java ---------------------------------------------------------------------- diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/KubernetesConstants.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/KubernetesConstants.java index 3d78497..a56b42f 100644 --- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/KubernetesConstants.java +++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/KubernetesConstants.java @@ -27,6 +27,7 @@ public interface KubernetesConstants { String KUBERNETES_REPLICATION_CONTROLLERS_LABELS = "CamelKubernetesReplicationControllersLabels"; String KUBERNETES_REPLICATION_CONTROLLER_NAME = "CamelKubernetesReplicationControllerName"; String KUBERNETES_REPLICATION_CONTROLLER_SPEC = "CamelKubernetesReplicationControllerSpec"; + String KUBERNETES_REPLICATION_CONTROLLER_REPLICAS = "CamelKubernetesReplicationControllerReplicas"; String KUBERNETES_PODS_LABELS = "CamelKubernetesPodsLabels"; String KUBERNETES_POD_NAME = "CamelKubernetesPodName"; String KUBERNETES_POD_SPEC = "CamelKubernetesPodSpec"; http://git-wip-us.apache.org/repos/asf/camel/blob/0c3d3119/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/producer/KubernetesOperations.java ---------------------------------------------------------------------- diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/producer/KubernetesOperations.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/producer/KubernetesOperations.java index e6dec94..f9437b7 100644 --- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/producer/KubernetesOperations.java +++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/producer/KubernetesOperations.java @@ -38,6 +38,7 @@ public interface KubernetesOperations { String GET_REPLICATION_CONTROLLER_OPERATION = "getReplicationController"; String CREATE_REPLICATION_CONTROLLER_OPERATION = "createReplicationController"; String DELETE_REPLICATION_CONTROLLER_OPERATION = "deleteReplicationController"; + String SCALE_REPLICATION_CONTROLLER_OPERATION = "scaleReplicationController"; // Pods String LIST_PODS_OPERATION = "listPods"; http://git-wip-us.apache.org/repos/asf/camel/blob/0c3d3119/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/producer/KubernetesReplicationControllersProducer.java ---------------------------------------------------------------------- diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/producer/KubernetesReplicationControllersProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/producer/KubernetesReplicationControllersProducer.java index 153b0d2..d059f86 100644 --- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/producer/KubernetesReplicationControllersProducer.java +++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/producer/KubernetesReplicationControllersProducer.java @@ -83,6 +83,10 @@ public class KubernetesReplicationControllersProducer extends DefaultProducer { case KubernetesOperations.DELETE_REPLICATION_CONTROLLER_OPERATION: doDeleteReplicationController(exchange, operation); break; + + case KubernetesOperations.SCALE_REPLICATION_CONTROLLER_OPERATION: + doScaleReplicationController(exchange, operation); + break; default: throw new IllegalArgumentException("Unsupported operation " @@ -135,6 +139,7 @@ public class KubernetesReplicationControllersProducer extends DefaultProducer { rcList = replicationControllers.list(); } exchange.getOut().setBody(rcList.getItems()); + } protected void doGetReplicationController(Exchange exchange, @@ -219,4 +224,35 @@ public class KubernetesReplicationControllersProducer extends DefaultProducer { .withName(rcName).delete(); exchange.getOut().setBody(rcDeleted); } + + protected void doScaleReplicationController(Exchange exchange, + String operation) throws Exception { + String rcName = exchange.getIn().getHeader( + KubernetesConstants.KUBERNETES_REPLICATION_CONTROLLER_NAME, + String.class); + String namespaceName = exchange.getIn().getHeader( + KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class); + Integer replicasNumber = exchange.getIn().getHeader( + KubernetesConstants.KUBERNETES_REPLICATION_CONTROLLER_REPLICAS, Integer.class); + if (ObjectHelper.isEmpty(rcName)) { + LOG.error("Scale a specific replication controller require specify a replication controller name"); + throw new IllegalArgumentException( + "Scale a specific replication controller require specify a replication controller name"); + } + if (ObjectHelper.isEmpty(namespaceName)) { + LOG.error("Scale a specific replication controller require specify a namespace name"); + throw new IllegalArgumentException( + "Scale a specific replication controller require specify a namespace name"); + } + if (ObjectHelper.isEmpty(replicasNumber)) { + LOG.error("Scale a specific replication controller require specify a replicas number"); + throw new IllegalArgumentException( + "Scale a specific replication controller require specify a replicas number"); + } + ReplicationController rcScaled = getEndpoint().getKubernetesClient() + .replicationControllers().inNamespace(namespaceName) + .withName(rcName).scale(replicasNumber, true); + + exchange.getOut().setBody(rcScaled.getStatus().getReplicas()); + } } http://git-wip-us.apache.org/repos/asf/camel/blob/0c3d3119/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesReplicationControllersProducerTest.java ---------------------------------------------------------------------- diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesReplicationControllersProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesReplicationControllersProducerTest.java index 08ca143..47e218e 100644 --- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesReplicationControllersProducerTest.java +++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesReplicationControllersProducerTest.java @@ -120,7 +120,7 @@ public class KubernetesReplicationControllersProducerTest extends } @Test - public void createAndDeleteService() throws Exception { + public void createAndDeleteReplicationController() throws Exception { if (ObjectHelper.isEmpty(authToken)) { return; } @@ -187,6 +187,100 @@ public class KubernetesReplicationControllersProducerTest extends assertTrue(rcDeleted); } + + @Test + public void createScaleAndDeleteReplicationController() throws Exception { + if (ObjectHelper.isEmpty(authToken)) { + return; + } + Exchange ex = template.request("direct:createReplicationController", + new Processor() { + + @Override + public void process(Exchange exchange) throws Exception { + exchange.getIn().setHeader( + KubernetesConstants.KUBERNETES_NAMESPACE_NAME, + "default"); + exchange.getIn() + .setHeader( + KubernetesConstants.KUBERNETES_REPLICATION_CONTROLLER_NAME, + "test"); + Map<String, String> labels = new HashMap<String, String>(); + labels.put("this", "rocks"); + exchange.getIn() + .setHeader( + KubernetesConstants.KUBERNETES_REPLICATION_CONTROLLERS_LABELS, + labels); + ReplicationControllerSpec rcSpec = new ReplicationControllerSpec(); + rcSpec.setReplicas(1); + PodTemplateSpecBuilder builder = new PodTemplateSpecBuilder(); + PodTemplateSpec t = builder.withNewMetadata() + .withName("nginx-template") + .addToLabels("server", "nginx").endMetadata() + .withNewSpec().addNewContainer() + .withName("wildfly").withImage("jboss/wildfly") + .addNewPort().withContainerPort(80).endPort() + .endContainer().endSpec().build(); + rcSpec.setTemplate(t); + Map<String, String> selectorMap = new HashMap<String, String>(); + selectorMap.put("server", "nginx"); + rcSpec.setSelector(selectorMap); + exchange.getIn() + .setHeader( + KubernetesConstants.KUBERNETES_REPLICATION_CONTROLLER_SPEC, + rcSpec); + } + }); + + ReplicationController rc = ex.getOut().getBody( + ReplicationController.class); + + assertEquals(rc.getMetadata().getName(), "test"); + + ex = template.request("direct:scaleReplicationController", + new Processor() { + + @Override + public void process(Exchange exchange) throws Exception { + exchange.getIn().setHeader( + KubernetesConstants.KUBERNETES_NAMESPACE_NAME, + "default"); + exchange.getIn() + .setHeader( + KubernetesConstants.KUBERNETES_REPLICATION_CONTROLLER_NAME, + "test"); + exchange.getIn() + .setHeader( + KubernetesConstants.KUBERNETES_REPLICATION_CONTROLLER_REPLICAS, + 2); + } + }); + + Thread.sleep(10000); + + Integer replicas = ex.getOut().getBody(Integer.class); + + assertTrue(replicas == 2); + + ex = template.request("direct:deleteReplicationController", + new Processor() { + + @Override + public void process(Exchange exchange) throws Exception { + exchange.getIn().setHeader( + KubernetesConstants.KUBERNETES_NAMESPACE_NAME, + "default"); + exchange.getIn() + .setHeader( + KubernetesConstants.KUBERNETES_REPLICATION_CONTROLLER_NAME, + "test"); + } + }); + + boolean rcDeleted = ex.getOut().getBody(Boolean.class); + + assertTrue(rcDeleted); + } @Override protected RouteBuilder createRouteBuilder() throws Exception { @@ -205,6 +299,9 @@ public class KubernetesReplicationControllersProducerTest extends from("direct:createReplicationController") .toF("kubernetes://%s?oauthToken=%s&category=replicationControllers&operation=createReplicationController", host, authToken); + from("direct:scaleReplicationController") + .toF("kubernetes://%s?oauthToken=%s&category=replicationControllers&operation=scaleReplicationController", + host, authToken); from("direct:deleteReplicationController") .toF("kubernetes://%s?oauthToken=%s&category=replicationControllers&operation=deleteReplicationController", host, authToken);