This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 7a020b8da981d91a42cfc9567c319a5edc22950b
Author: Andrea Cosentino <anco...@gmail.com>
AuthorDate: Thu Mar 15 10:59:39 2018 +0100

    CAMEL-12354 - Camel-Kubernetes: Add scale operation to deployment component
---
 .../component/kubernetes/KubernetesConstants.java  |  1 +
 .../component/kubernetes/KubernetesOperations.java |  1 +
 .../deployments/KubernetesDeploymentsProducer.java | 27 ++++++++++++++++++++++
 .../KubernetesDeploymentsProducerTest.java         | 26 +++++++++++++++++++++
 4 files changed, 55 insertions(+)

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 4814076..eecc409 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
@@ -57,6 +57,7 @@ public interface KubernetesConstants {
     String KUBERNETES_BUILD_NAME = "CamelKubernetesBuildName";
     String KUBERNETES_BUILD_CONFIGS_LABELS = 
"CamelKubernetesBuildConfigsLabels";
     String KUBERNETES_BUILD_CONFIG_NAME = "CamelKubernetesBuildConfigName";
+    String KUBERNETES_DEPLOYMENT_REPLICAS = 
"CamelKubernetesDeploymentReplicas";
 
     // Consumer
     String KUBERNETES_EVENT_ACTION = "CamelKubernetesEventAction";
diff --git 
a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/KubernetesOperations.java
 
b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/KubernetesOperations.java
index 6ea4ed6..4eb8dc5 100644
--- 
a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/KubernetesOperations.java
+++ 
b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/KubernetesOperations.java
@@ -91,6 +91,7 @@ public interface KubernetesOperations {
     String GET_DEPLOYMENT = "getDeployment";
     String DELETE_DEPLOYMENT = "deleteDeployment";
     String CREATE_DEPLOYMENT = "createDeployment";
+    String SCALE_DEPLOYMENT = "scaleDeployment";
     
     // Config Maps
     String LIST_CONFIGMAPS = "listConfigMaps";
diff --git 
a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/deployments/KubernetesDeploymentsProducer.java
 
b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/deployments/KubernetesDeploymentsProducer.java
index 29015c5..339810b 100644
--- 
a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/deployments/KubernetesDeploymentsProducer.java
+++ 
b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/deployments/KubernetesDeploymentsProducer.java
@@ -18,6 +18,7 @@ package org.apache.camel.component.kubernetes.deployments;
 
 import java.util.Map;
 
+import io.fabric8.kubernetes.api.model.ReplicationController;
 import io.fabric8.kubernetes.api.model.extensions.Deployment;
 import io.fabric8.kubernetes.api.model.extensions.DeploymentBuilder;
 import io.fabric8.kubernetes.api.model.extensions.DeploymentList;
@@ -80,6 +81,10 @@ public class KubernetesDeploymentsProducer extends 
DefaultProducer {
         case KubernetesOperations.CREATE_DEPLOYMENT:
             doCreateDeployment(exchange, operation);
             break;
+            
+        case KubernetesOperations.SCALE_DEPLOYMENT:
+            doScaleDeployment(exchange, operation);
+            break;
 
         default:
             throw new IllegalArgumentException("Unsupported operation " + 
operation);
@@ -162,4 +167,26 @@ public class KubernetesDeploymentsProducer extends 
DefaultProducer {
         MessageHelper.copyHeaders(exchange.getIn(), exchange.getOut(), true);
         exchange.getOut().setBody(deployment);
     }
+    
+    protected void doScaleDeployment(Exchange exchange, String operation) 
throws Exception {
+        String deploymentName = 
exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_DEPLOYMENT_NAME, 
String.class);
+        String namespaceName = 
exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, 
String.class);
+        Integer replicasNumber = 
exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_DEPLOYMENT_REPLICAS, 
Integer.class);
+        if (ObjectHelper.isEmpty(deploymentName)) {
+            LOG.error("Scale a specific deployment require specify a 
deployment name");
+            throw new IllegalArgumentException("Scale a specific deployment 
require specify a deployment name");
+        }
+        if (ObjectHelper.isEmpty(namespaceName)) {
+            LOG.error("Scale a specific deployment require specify a namespace 
name");
+            throw new IllegalArgumentException("Scale a specific deployment 
require specify a namespace name");
+        }
+        if (ObjectHelper.isEmpty(replicasNumber)) {
+            LOG.error("Scale a specific deployment require specify a replicas 
number");
+            throw new IllegalArgumentException("Scale a specific deployment 
require specify a replicas number");
+        }
+        Deployment deploymentScaled = 
getEndpoint().getKubernetesClient().extensions().deployments().inNamespace(namespaceName).withName(deploymentName).scale(replicasNumber,
 false);
+
+        MessageHelper.copyHeaders(exchange.getIn(), exchange.getOut(), true);
+        exchange.getOut().setBody(deploymentScaled.getStatus().getReplicas());
+    }
 }
diff --git 
a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesDeploymentsProducerTest.java
 
b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesDeploymentsProducerTest.java
index 3b71c13..f1c0b03 100644
--- 
a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesDeploymentsProducerTest.java
+++ 
b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesDeploymentsProducerTest.java
@@ -22,6 +22,7 @@ import java.util.Map;
 
 import io.fabric8.kubernetes.api.model.Namespace;
 import io.fabric8.kubernetes.api.model.NamespaceBuilder;
+import io.fabric8.kubernetes.api.model.ReplicationControllerBuilder;
 import io.fabric8.kubernetes.api.model.Secret;
 import io.fabric8.kubernetes.api.model.SecretBuilder;
 import io.fabric8.kubernetes.api.model.extensions.Deployment;
@@ -120,6 +121,29 @@ public class KubernetesDeploymentsProducerTest extends 
KubernetesTestSupport {
 
         assertTrue(deDeleted);
     }
+    
+    @Test
+    public void createScaleAndDeleteDeployment() throws Exception {
+        
server.expect().withPath("/apis/extensions/v1beta1/namespaces/test/deployments/de1").andReturn(200,
 new DeploymentBuilder().withNewMetadata().withName("de1")
+            
.withResourceVersion("1").endMetadata().withNewSpec().withReplicas(5).endSpec().withNewStatus().withReplicas(1).endStatus().build()).once();
+
+        
server.expect().withPath("/apis/extensions/v1beta1/namespaces/test/deployments/de1").andReturn(200,
 new DeploymentBuilder().withNewMetadata().withName("de1")
+            
.withResourceVersion("1").endMetadata().withNewSpec().withReplicas(5).endSpec().withNewStatus().withReplicas(5).endStatus().build()).always();
+        Exchange ex = template.request("direct:scaleDeployment", new 
Processor() {
+
+            @Override
+            public void process(Exchange exchange) throws Exception {
+                
exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, 
"test");
+                
exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_DEPLOYMENT_NAME, 
"de1");
+                
exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_DEPLOYMENT_REPLICAS, 
1);
+            }
+        });
+
+        //Thread.sleep(3000);
+        int replicas = ex.getOut().getBody(Integer.class);
+
+        assertEquals(5, replicas);
+    }
 
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
@@ -134,6 +158,8 @@ public class KubernetesDeploymentsProducerTest extends 
KubernetesTestSupport {
                         
.toF("kubernetes-deployments:///?kubernetesClient=#kubernetesClient&operation=deleteDeployment");
                 from("direct:createDeployment")
                         
.toF("kubernetes-deployments:///?kubernetesClient=#kubernetesClient&operation=createDeployment");
+                from("direct:scaleDeployment")
+                        
.toF("kubernetes-deployments:///?kubernetesClient=#kubernetesClient&operation=scaleDeployment");
             }
         };
     }

-- 
To stop receiving notification emails like this one, please contact
acosent...@apache.org.

Reply via email to