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