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);

Reply via email to