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


The following commit(s) were added to refs/heads/master by this push:
     new a00c183  CAMEL-13986 - Camel-Kubernetes: Add deleteNode operation
a00c183 is described below

commit a00c183f32557ca819b8228fad84df453da55ea5
Author: Andrea Cosentino <anco...@gmail.com>
AuthorDate: Tue Sep 17 10:53:30 2019 +0200

    CAMEL-13986 - Camel-Kubernetes: Add deleteNode operation
---
 .../component/kubernetes/KubernetesOperations.java  |  3 ++-
 .../kubernetes/nodes/KubernetesNodesProducer.java   | 16 ++++++++++++++++
 .../producer/KubernetesNodesProducerTest.java       | 21 +++++++++++++++++++++
 3 files changed, 39 insertions(+), 1 deletion(-)

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 ebaa202..4e58477 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
@@ -85,7 +85,8 @@ public interface KubernetesOperations {
     String LIST_NODES_BY_LABELS_OPERATION = "listNodesByLabels";
     String GET_NODE_OPERATION = "getNode";
     String CREATE_NODE_OPERATION = "createNode";
-
+    String DELETE_NODE_OPERATION = "deleteNode";
+    
     // HPA
     String LIST_HPA = "listHPA";
     String LIST_HPA_BY_LABELS_OPERATION = "listHPAByLabels";
diff --git 
a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/nodes/KubernetesNodesProducer.java
 
b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/nodes/KubernetesNodesProducer.java
index 268cf07..793529c 100644
--- 
a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/nodes/KubernetesNodesProducer.java
+++ 
b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/nodes/KubernetesNodesProducer.java
@@ -75,6 +75,10 @@ public class KubernetesNodesProducer extends DefaultProducer 
{
         case KubernetesOperations.CREATE_NODE_OPERATION:
             doCreateNode(exchange, operation);
             break;
+            
+        case KubernetesOperations.DELETE_NODE_OPERATION:
+            doDeleteNode(exchange, operation);
+            break;
 
         default:
             throw new IllegalArgumentException("Unsupported operation " + 
operation);
@@ -133,4 +137,16 @@ public class KubernetesNodesProducer extends 
DefaultProducer {
         MessageHelper.copyHeaders(exchange.getIn(), exchange.getOut(), true);
         exchange.getOut().setBody(node);
     }
+    
+    protected void doDeleteNode(Exchange exchange, String operation) throws 
Exception {
+        String nodeName = 
exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NODE_NAME, 
String.class);
+        if (ObjectHelper.isEmpty(nodeName)) {
+            log.error("Deleting a specific Node require specify a Node name");
+            throw new IllegalArgumentException("Deleting a specific Node 
require specify a Node name");
+        }
+        boolean nodeDeleted = 
getEndpoint().getKubernetesClient().nodes().withName(nodeName).delete();
+
+        MessageHelper.copyHeaders(exchange.getIn(), exchange.getOut(), true);
+        exchange.getOut().setBody(nodeDeleted);
+    }
 }
diff --git 
a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesNodesProducerTest.java
 
b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesNodesProducerTest.java
index 8f0611a..9ca5087 100644
--- 
a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesNodesProducerTest.java
+++ 
b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesNodesProducerTest.java
@@ -26,6 +26,8 @@ import io.fabric8.kubernetes.api.model.NodeListBuilder;
 import io.fabric8.kubernetes.api.model.NodeSpec;
 import io.fabric8.kubernetes.api.model.NodeSpecBuilder;
 import io.fabric8.kubernetes.api.model.ObjectMeta;
+import io.fabric8.kubernetes.api.model.Pod;
+import io.fabric8.kubernetes.api.model.PodBuilder;
 import io.fabric8.kubernetes.client.KubernetesClient;
 import io.fabric8.kubernetes.client.server.mock.KubernetesServer;
 
@@ -99,6 +101,24 @@ public class KubernetesNodesProducerTest extends 
KubernetesTestSupport {
 
         assertEquals("test", result.getMetadata().getName());
     }
+    
+    @Test
+    public void deleteNode() throws Exception {
+        Node node1 = new 
NodeBuilder().withNewMetadata().withName("node1").withNamespace("test").and().build();
+        server.expect().withPath("/api/v1/nodes/node1").andReturn(200, 
node1).once();
+
+        Exchange ex = template.request("direct:deleteNode", new Processor() {
+
+            @Override
+            public void process(Exchange exchange) throws Exception {
+                
exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NODE_NAME, "node1");
+            }
+        });
+
+        boolean nodeDeleted = ex.getOut().getBody(Boolean.class);
+
+        assertTrue(nodeDeleted);
+    }
 
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
@@ -108,6 +128,7 @@ public class KubernetesNodesProducerTest extends 
KubernetesTestSupport {
                 
from("direct:list").toF("kubernetes-nodes:///?kubernetesClient=#kubernetesClient&operation=listNodes");
                 
from("direct:listByLabels").toF("kubernetes-nodes:///?kubernetesClient=#kubernetesClient&operation=listNodesByLabels");
                 
from("direct:createNode").toF("kubernetes-nodes:///?kubernetesClient=#kubernetesClient&operation=createNode");
+                
from("direct:deleteNode").toF("kubernetes-nodes:///?kubernetesClient=#kubernetesClient&operation=deleteNode");
             }
         };
     }

Reply via email to