You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by nf...@apache.org on 2022/10/07 14:00:15 UTC
[camel] 04/04: CAMEL-17438: camel-kubernetes - Add replace operation to producers
This is an automated email from the ASF dual-hosted git repository.
nfilotto pushed a commit to branch CAMEL-17438/add-update-to-producers
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 5a668efed0720f6cc67dd0d60259d9e3c7650b5b
Author: Nicolas Filotto <nf...@talend.com>
AuthorDate: Fri Oct 7 15:25:51 2022 +0200
CAMEL-17438: camel-kubernetes - Add replace operation to producers
---
.../docs/kubernetes-config-maps-component.adoc | 1 +
.../kubernetes-custom-resources-component.adoc | 1 +
.../docs/kubernetes-deployments-component.adoc | 1 +
.../src/main/docs/kubernetes-hpa-component.adoc | 1 +
.../src/main/docs/kubernetes-job-component.adoc | 1 +
.../main/docs/kubernetes-namespaces-component.adoc | 1 +
.../src/main/docs/kubernetes-nodes-component.adoc | 1 +
...rnetes-persistent-volumes-claims-component.adoc | 1 +
.../src/main/docs/kubernetes-pods-component.adoc | 1 +
...bernetes-replication-controllers-component.adoc | 1 +
.../docs/kubernetes-resources-quota-component.adoc | 1 +
.../main/docs/kubernetes-secrets-component.adoc | 1 +
.../kubernetes-service-accounts-component.adoc | 1 +
.../openshift-deploymentconfigs-component.adoc | 1 +
.../component/kubernetes/KubernetesOperations.java | 15 +++++++++
.../config_maps/KubernetesConfigMapsProducer.java | 33 +++++++++++++++----
.../KubernetesCustomResourcesProducer.java | 21 ++++++++++--
.../deployments/KubernetesDeploymentsProducer.java | 36 +++++++++++++++-----
.../kubernetes/hpa/KubernetesHPAProducer.java | 34 ++++++++++++++-----
.../kubernetes/job/KubernetesJobProducer.java | 32 +++++++++++++-----
.../namespaces/KubernetesNamespacesProducer.java | 22 +++++++++++--
.../kubernetes/nodes/KubernetesNodesProducer.java | 25 +++++++++++---
.../KubernetesPersistentVolumesClaimsProducer.java | 36 +++++++++++++++-----
.../kubernetes/pods/KubernetesPodsProducer.java | 30 +++++++++++++----
.../KubernetesReplicationControllersProducer.java | 36 +++++++++++++++-----
.../KubernetesResourcesQuotaProducer.java | 31 ++++++++++++++----
.../secrets/KubernetesSecretsProducer.java | 27 ++++++++++++---
.../KubernetesServiceAccountsProducer.java | 29 +++++++++++++----
.../services/KubernetesServicesProducer.java | 33 +++++++++++++++----
.../OpenshiftDeploymentConfigsProducer.java | 38 ++++++++++++++++------
.../KubernetesConfigMapsConsumerIT.java | 29 ++++++++++++++++-
.../producer/KubernetesConfigMapsProducerTest.java | 28 ++++++++++++++++
.../KubernetesCustomResourcesProducerTest.java | 28 ++++++++++++++++
.../KubernetesDeploymentsProducerTest.java | 30 +++++++++++++++++
.../producer/KubernetesHPAProducerTest.java | 31 ++++++++++++++++++
.../producer/KubernetesJobProducerTest.java | 34 +++++++++++++++++++
.../producer/KubernetesNamespacesProducerTest.java | 23 ++++++++++++-
.../producer/KubernetesNodesProducerTest.java | 23 +++++++++++++
...ernetesPersistentVolumesClaimsProducerTest.java | 30 +++++++++++++++++
.../producer/KubernetesPodsProducerTest.java | 27 +++++++++++++++
...bernetesReplicationControllersProducerTest.java | 30 +++++++++++++++++
.../KubernetesResourcesQuotaProducerTest.java | 29 +++++++++++++++++
.../producer/KubernetesSecretsProducerTest.java | 18 ++++++++++
.../KubernetesServiceAccountsProducerTest.java | 19 +++++++++++
.../producer/KubernetesServicesProducerTest.java | 29 +++++++++++++++++
.../OpenshiftDeploymentConfigsProducerTest.java | 37 +++++++++++++++++++--
46 files changed, 830 insertions(+), 107 deletions(-)
diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-config-maps-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-config-maps-component.adoc
index 0355489f600..dfe5a6cd862 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes-config-maps-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes-config-maps-component.adoc
@@ -41,6 +41,7 @@ include::partial$component-endpoint-headers.adoc[]
- listConfigMapsByLabels
- getConfigMap
- createConfigMap
+- replaceConfigMap
- deleteConfigMap
== Kubernetes ConfigMaps Producer Examples
diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-custom-resources-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-custom-resources-component.adoc
index 6c1d0341be5..22b225168c4 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes-custom-resources-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes-custom-resources-component.adoc
@@ -42,6 +42,7 @@ include::partial$component-endpoint-headers.adoc[]
- getCustomResource
- deleteCustomResource
- createCustomResource
+- replaceCustomResource
include::spring-boot:partial$starter.adoc[]
diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-deployments-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-deployments-component.adoc
index bd2cd9d5ede..9f14288262c 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes-deployments-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes-deployments-component.adoc
@@ -40,6 +40,7 @@ include::partial$component-endpoint-headers.adoc[]
- listDeploymentsByLabels
- getDeployment
- createDeployment
+- replaceDeployment
- deleteDeployment
- scaleDeployment
diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-hpa-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-hpa-component.adoc
index eb4a8a72c50..7a72504ff96 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes-hpa-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes-hpa-component.adoc
@@ -40,6 +40,7 @@ include::partial$component-endpoint-headers.adoc[]
- listHPAByLabels
- getHPA
- createHPA
+- replaceHPA
- deleteHPA
== Kubernetes HPA Producer Examples
diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-job-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-job-component.adoc
index 497631937e0..e1b5eb02303 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes-job-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes-job-component.adoc
@@ -41,6 +41,7 @@ include::partial$component-endpoint-headers.adoc[]
- listJobByLabels
- getJob
- createJob
+- replaceJob
- deleteJob
== Kubernetes Job Producer Examples
diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-namespaces-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-namespaces-component.adoc
index bf95acf029b..be43674e7bb 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes-namespaces-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes-namespaces-component.adoc
@@ -41,6 +41,7 @@ include::partial$component-endpoint-headers.adoc[]
- listNamespacesByLabels
- getNamespace
- createNamespace
+- replaceNamespace
- deleteNamespace
== Kubernetes Namespaces Producer Examples
diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-nodes-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-nodes-component.adoc
index 1f87d1e7a0e..2f9088bab5d 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes-nodes-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes-nodes-component.adoc
@@ -40,6 +40,7 @@ include::partial$component-endpoint-headers.adoc[]
- listNodesByLabels
- getNode
- createNode
+- replaceNode
- deleteNode
diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-persistent-volumes-claims-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-persistent-volumes-claims-component.adoc
index 742279f8193..05436922d2c 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes-persistent-volumes-claims-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes-persistent-volumes-claims-component.adoc
@@ -40,6 +40,7 @@ include::partial$component-endpoint-headers.adoc[]
- listPersistentVolumesClaimsByLabels
- getPersistentVolumeClaim
- createPersistentVolumeClaim
+- replacePersistentVolumeClaim
- deletePersistentVolumeClaim
== Kubernetes Persistent Volume Claims Producer Examples
diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-pods-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-pods-component.adoc
index b399b71ccb7..4b02b7556a1 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes-pods-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes-pods-component.adoc
@@ -40,6 +40,7 @@ include::partial$component-endpoint-headers.adoc[]
- listPodsByLabels
- getPod
- createPod
+- replacePod
- deletePod
== Kubernetes Pods Producer Examples
diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-replication-controllers-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-replication-controllers-component.adoc
index d686cd1ff59..971aba653fe 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes-replication-controllers-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes-replication-controllers-component.adoc
@@ -41,6 +41,7 @@ include::partial$component-endpoint-headers.adoc[]
- listReplicationControllersByLabels
- getReplicationController
- createReplicationController
+- replaceReplicationController
- deleteReplicationController
- scaleReplicationController
diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-resources-quota-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-resources-quota-component.adoc
index 0da55299cc4..f51e999a22e 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes-resources-quota-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes-resources-quota-component.adoc
@@ -40,6 +40,7 @@ include::partial$component-endpoint-headers.adoc[]
- listResourcesQuotaByLabels
- getResourcesQuota
- createResourcesQuota
+- replaceResourceQuota
- deleteResourcesQuota
== Kubernetes Resource Quota Producer Examples
diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-secrets-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-secrets-component.adoc
index 36f4e96d9b2..d87ae2735d8 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes-secrets-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes-secrets-component.adoc
@@ -40,6 +40,7 @@ include::partial$component-endpoint-headers.adoc[]
- listSecretsByLabels
- getSecret
- createSecret
+- replaceSecret
- deleteSecret
== Kubernetes Secrets Producer Examples
diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-service-accounts-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-service-accounts-component.adoc
index 4d1175c2358..e51998f05cc 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes-service-accounts-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes-service-accounts-component.adoc
@@ -40,6 +40,7 @@ include::partial$component-endpoint-headers.adoc[]
- listServiceAccountsByLabels
- getServiceAccount
- createServiceAccount
+- replaceServiceAccount
- deleteServiceAccount
== Kubernetes ServiceAccounts Produce Examples
diff --git a/components/camel-kubernetes/src/main/docs/openshift-deploymentconfigs-component.adoc b/components/camel-kubernetes/src/main/docs/openshift-deploymentconfigs-component.adoc
index 14b404ac808..a853b9f78c1 100644
--- a/components/camel-kubernetes/src/main/docs/openshift-deploymentconfigs-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/openshift-deploymentconfigs-component.adoc
@@ -40,6 +40,7 @@ include::partial$component-endpoint-headers.adoc[]
- listDeploymentsConfigsByLabels
- getDeploymentConfig
- createDeploymentConfig
+- replaceDeploymentConfig
- deleteDeploymentConfig
- scaleDeploymentConfig
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 c9b2fbecc56..91d046c3af3 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
@@ -23,6 +23,7 @@ public final class KubernetesOperations {
public static final String LIST_NAMESPACE_BY_LABELS_OPERATION = "listNamespacesByLabels";
public static final String GET_NAMESPACE_OPERATION = "getNamespace";
public static final String CREATE_NAMESPACE_OPERATION = "createNamespace";
+ public static final String REPLACE_NAMESPACE_OPERATION = "replaceNamespace";
public static final String DELETE_NAMESPACE_OPERATION = "deleteNamespace";
// Services
@@ -30,6 +31,7 @@ public final class KubernetesOperations {
public static final String LIST_SERVICES_BY_LABELS_OPERATION = "listServicesByLabels";
public static final String GET_SERVICE_OPERATION = "getService";
public static final String CREATE_SERVICE_OPERATION = "createService";
+ public static final String REPLACE_SERVICE_OPERATION = "replaceService";
public static final String DELETE_SERVICE_OPERATION = "deleteService";
// Replication Controllers
@@ -37,6 +39,7 @@ public final class KubernetesOperations {
public static final String LIST_REPLICATION_CONTROLLERS_BY_LABELS_OPERATION = "listReplicationControllersByLabels";
public static final String GET_REPLICATION_CONTROLLER_OPERATION = "getReplicationController";
public static final String CREATE_REPLICATION_CONTROLLER_OPERATION = "createReplicationController";
+ public static final String REPLACE_REPLICATION_CONTROLLER_OPERATION = "replaceReplicationController";
public static final String DELETE_REPLICATION_CONTROLLER_OPERATION = "deleteReplicationController";
public static final String SCALE_REPLICATION_CONTROLLER_OPERATION = "scaleReplicationController";
@@ -45,6 +48,7 @@ public final class KubernetesOperations {
public static final String LIST_PODS_BY_LABELS_OPERATION = "listPodsByLabels";
public static final String GET_POD_OPERATION = "getPod";
public static final String CREATE_POD_OPERATION = "createPod";
+ public static final String REPLACE_POD_OPERATION = "replacePod";
public static final String DELETE_POD_OPERATION = "deletePod";
// Persistent Volumes
@@ -57,6 +61,7 @@ public final class KubernetesOperations {
public static final String LIST_PERSISTENT_VOLUMES_CLAIMS_BY_LABELS_OPERATION = "listPersistentVolumesClaimsByLabels";
public static final String GET_PERSISTENT_VOLUME_CLAIM_OPERATION = "getPersistentVolumeClaim";
public static final String CREATE_PERSISTENT_VOLUME_CLAIM_OPERATION = "createPersistentVolumeClaim";
+ public static final String REPLACE_PERSISTENT_VOLUME_CLAIM_OPERATION = "replacePersistentVolumeClaim";
public static final String DELETE_PERSISTENT_VOLUME_CLAIM_OPERATION = "deletePersistentVolumeClaim";
// Secrets
@@ -64,6 +69,7 @@ public final class KubernetesOperations {
public static final String LIST_SECRETS_BY_LABELS_OPERATION = "listSecretsByLabels";
public static final String GET_SECRET_OPERATION = "getSecret";
public static final String CREATE_SECRET_OPERATION = "createSecret";
+ public static final String REPLACE_SECRET_OPERATION = "replaceSecret";
public static final String DELETE_SECRET_OPERATION = "deleteSecret";
// Resources quota
@@ -71,6 +77,7 @@ public final class KubernetesOperations {
public static final String LIST_RESOURCES_QUOTA_BY_LABELS_OPERATION = "listResourcesQuotaByLabels";
public static final String GET_RESOURCE_QUOTA_OPERATION = "getResourceQuota";
public static final String CREATE_RESOURCE_QUOTA_OPERATION = "createResourceQuota";
+ public static final String REPLACE_RESOURCE_QUOTA_OPERATION = "replaceResourceQuota";
public static final String DELETE_RESOURCE_QUOTA_OPERATION = "deleteResourceQuota";
// Service Accounts
@@ -78,6 +85,7 @@ public final class KubernetesOperations {
public static final String LIST_SERVICE_ACCOUNTS_BY_LABELS_OPERATION = "listServiceAccountsByLabels";
public static final String GET_SERVICE_ACCOUNT_OPERATION = "getServiceAccount";
public static final String CREATE_SERVICE_ACCOUNT_OPERATION = "createServiceAccount";
+ public static final String REPLACE_SERVICE_ACCOUNT_OPERATION = "replaceServiceAccount";
public static final String DELETE_SERVICE_ACCOUNT_OPERATION = "deleteServiceAccount";
// Nodes
@@ -85,6 +93,7 @@ public final class KubernetesOperations {
public static final String LIST_NODES_BY_LABELS_OPERATION = "listNodesByLabels";
public static final String GET_NODE_OPERATION = "getNode";
public static final String CREATE_NODE_OPERATION = "createNode";
+ public static final String REPLACE_NODE_OPERATION = "replaceNode";
public static final String DELETE_NODE_OPERATION = "deleteNode";
// HPA
@@ -92,6 +101,7 @@ public final class KubernetesOperations {
public static final String LIST_HPA_BY_LABELS_OPERATION = "listHPAByLabels";
public static final String GET_HPA_OPERATION = "getHPA";
public static final String CREATE_HPA_OPERATION = "createHPA";
+ public static final String REPLACE_HPA_OPERATION = "replaceHPA";
public static final String DELETE_HPA_OPERATION = "deleteHPA";
// Deployments
@@ -100,6 +110,7 @@ public final class KubernetesOperations {
public static final String GET_DEPLOYMENT = "getDeployment";
public static final String DELETE_DEPLOYMENT = "deleteDeployment";
public static final String CREATE_DEPLOYMENT = "createDeployment";
+ public static final String REPLACE_DEPLOYMENT = "replaceDeployment";
public static final String SCALE_DEPLOYMENT = "scaleDeployment";
// Config Maps
@@ -108,6 +119,7 @@ public final class KubernetesOperations {
public static final String GET_CONFIGMAP_OPERATION = "getConfigMap";
public static final String CREATE_CONFIGMAP_OPERATION = "createConfigMap";
public static final String DELETE_CONFIGMAP_OPERATION = "deleteConfigMap";
+ public static final String REPLACE_CONFIGMAP_OPERATION = "replaceConfigMap";
// Builds
public static final String LIST_BUILD = "listBuilds";
@@ -124,6 +136,7 @@ public final class KubernetesOperations {
public static final String LIST_JOB_BY_LABELS_OPERATION = "listJobByLabels";
public static final String GET_JOB_OPERATION = "getJob";
public static final String CREATE_JOB_OPERATION = "createJob";
+ public static final String REPLACE_JOB_OPERATION = "replaceJob";
public static final String DELETE_JOB_OPERATION = "deleteJob";
// Custom Resources
@@ -132,6 +145,7 @@ public final class KubernetesOperations {
public static final String GET_CUSTOMRESOURCE = "getCustomResource";
public static final String DELETE_CUSTOMRESOURCE = "deleteCustomResource";
public static final String CREATE_CUSTOMRESOURCE = "createCustomResource";
+ public static final String REPLACE_CUSTOMRESOURCE = "replaceCustomResource";
// Deployment Configs
public static final String LIST_DEPLOYMENT_CONFIGS = "listDeploymentConfigs";
@@ -139,6 +153,7 @@ public final class KubernetesOperations {
public static final String GET_DEPLOYMENT_CONFIG = "getDeploymentConfig";
public static final String DELETE_DEPLOYMENT_CONFIG = "deleteDeploymentConfig";
public static final String CREATE_DEPLOYMENT_CONFIG = "createDeploymentConfig";
+ public static final String REPLACE_DEPLOYMENT_CONFIG = "replaceDeploymentConfig";
public static final String SCALE_DEPLOYMENT_CONFIG = "scaleDeploymentConfig";
private KubernetesOperations() {
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/config_maps/KubernetesConfigMapsProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/config_maps/KubernetesConfigMapsProducer.java
index 24638924748..263fe6a1d4d 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/config_maps/KubernetesConfigMapsProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/config_maps/KubernetesConfigMapsProducer.java
@@ -19,11 +19,13 @@ package org.apache.camel.component.kubernetes.config_maps;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.function.Function;
import io.fabric8.kubernetes.api.model.ConfigMap;
import io.fabric8.kubernetes.api.model.ConfigMapBuilder;
import io.fabric8.kubernetes.api.model.ConfigMapList;
import io.fabric8.kubernetes.api.model.StatusDetails;
+import io.fabric8.kubernetes.client.dsl.Resource;
import org.apache.camel.Exchange;
import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
import org.apache.camel.component.kubernetes.KubernetesConstants;
@@ -71,6 +73,10 @@ public class KubernetesConfigMapsProducer extends DefaultProducer {
doCreateConfigMap(exchange);
break;
+ case KubernetesOperations.REPLACE_CONFIGMAP_OPERATION:
+ doReplaceConfigMap(exchange);
+ break;
+
case KubernetesOperations.DELETE_CONFIGMAP_OPERATION:
doDeleteConfigMap(exchange);
break;
@@ -114,28 +120,41 @@ public class KubernetesConfigMapsProducer extends DefaultProducer {
prepareOutboundMessage(exchange, configMap);
}
+ protected void doReplaceConfigMap(Exchange exchange) {
+ doCreateOrUpdateConfigMap(exchange, "Replace", Resource::replace);
+ }
+
protected void doCreateConfigMap(Exchange exchange) {
+ doCreateOrUpdateConfigMap(exchange, "Create", Resource::create);
+ }
+
+ private void doCreateOrUpdateConfigMap(
+ Exchange exchange, String operationName, Function<Resource<ConfigMap>, ConfigMap> operation) {
String cfMapName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_CONFIGMAP_NAME, String.class);
String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
HashMap<String, String> configMapData
= exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_CONFIGMAP_DATA, HashMap.class);
if (ObjectHelper.isEmpty(cfMapName)) {
- LOG.error("Create a specific configMap require specify a configMap name");
- throw new IllegalArgumentException("Create a specific configMap require specify a configMap name");
+ LOG.error("{} a specific configMap require specify a configMap name", operationName);
+ throw new IllegalArgumentException(
+ String.format("%s a specific configMap require specify a configMap name", operationName));
}
if (ObjectHelper.isEmpty(namespaceName)) {
- LOG.error("Create a specific configMap require specify a namespace name");
- throw new IllegalArgumentException("Create a specific configMap require specify a namespace name");
+ LOG.error("{} a specific configMap require specify a namespace name", operationName);
+ throw new IllegalArgumentException(
+ String.format("%s a specific configMap require specify a namespace name", operationName));
}
if (ObjectHelper.isEmpty(configMapData)) {
- LOG.error("Create a specific configMap require specify a data map");
- throw new IllegalArgumentException("Create a specific configMap require specify a data map");
+ LOG.error("{} a specific configMap require specify a data map", operationName);
+ throw new IllegalArgumentException(
+ String.format("%s a specific configMap require specify a data map", operationName));
}
Map<String, String> labels = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_CONFIGMAPS_LABELS, Map.class);
ConfigMap cfMapCreating = new ConfigMapBuilder().withNewMetadata().withName(cfMapName).withLabels(labels).endMetadata()
.withData(configMapData).build();
ConfigMap configMap
- = getEndpoint().getKubernetesClient().configMaps().inNamespace(namespaceName).resource(cfMapCreating).create();
+ = operation.apply(
+ getEndpoint().getKubernetesClient().configMaps().inNamespace(namespaceName).resource(cfMapCreating));
prepareOutboundMessage(exchange, configMap);
}
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/customresources/KubernetesCustomResourcesProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/customresources/KubernetesCustomResourcesProducer.java
index 86e331188f8..cf0d35dbfe0 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/customresources/KubernetesCustomResourcesProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/customresources/KubernetesCustomResourcesProducer.java
@@ -18,11 +18,13 @@ package org.apache.camel.component.kubernetes.customresources;
import java.util.List;
import java.util.Map;
+import java.util.function.Function;
import io.fabric8.kubernetes.api.model.GenericKubernetesResource;
import io.fabric8.kubernetes.api.model.GenericKubernetesResourceList;
import io.fabric8.kubernetes.api.model.StatusDetails;
import io.fabric8.kubernetes.client.KubernetesClientException;
+import io.fabric8.kubernetes.client.dsl.Resource;
import io.fabric8.kubernetes.client.dsl.base.CustomResourceDefinitionContext;
import io.fabric8.kubernetes.client.utils.Serialization;
import org.apache.camel.Exchange;
@@ -89,6 +91,10 @@ public class KubernetesCustomResourcesProducer extends DefaultProducer {
doCreate(exchange, namespace);
break;
+ case KubernetesOperations.REPLACE_CUSTOMRESOURCE:
+ doReplace(exchange, namespace);
+ break;
+
default:
throw new IllegalArgumentException("Unsupported operation " + operation);
}
@@ -181,15 +187,24 @@ public class KubernetesCustomResourcesProducer extends DefaultProducer {
}
+ protected void doReplace(Exchange exchange, String namespaceName) {
+ doCreateOrReplace(exchange, namespaceName, Resource::replace);
+ }
+
protected void doCreate(Exchange exchange, String namespaceName) {
+ doCreateOrReplace(exchange, namespaceName, Resource::create);
+ }
+
+ private void doCreateOrReplace(
+ Exchange exchange, String namespaceName,
+ Function<Resource<GenericKubernetesResource>, GenericKubernetesResource> operation) {
String customResourceInstance = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_CRD_INSTANCE, String.class);
GenericKubernetesResource customResource = new GenericKubernetesResource();
try {
- customResource = getEndpoint().getKubernetesClient()
+ customResource = operation.apply(getEndpoint().getKubernetesClient()
.genericKubernetesResources(getCRDContext(exchange.getIn()))
.inNamespace(namespaceName)
- .resource(Serialization.unmarshal(customResourceInstance, GenericKubernetesResource.class))
- .create();
+ .resource(Serialization.unmarshal(customResourceInstance, GenericKubernetesResource.class)));
} catch (KubernetesClientException e) {
if (e.getCode() == 409) {
LOG.info("Custom resource instance already exists", e);
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 2f37559da4a..f42792c91d5 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.List;
import java.util.Map;
+import java.util.function.Function;
import io.fabric8.kubernetes.api.model.StatusDetails;
import io.fabric8.kubernetes.api.model.apps.Deployment;
@@ -25,6 +26,7 @@ import io.fabric8.kubernetes.api.model.apps.DeploymentBuilder;
import io.fabric8.kubernetes.api.model.apps.DeploymentList;
import io.fabric8.kubernetes.api.model.apps.DeploymentSpec;
import io.fabric8.kubernetes.client.dsl.MixedOperation;
+import io.fabric8.kubernetes.client.dsl.Resource;
import io.fabric8.kubernetes.client.dsl.RollableScalableResource;
import org.apache.camel.Exchange;
import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
@@ -77,6 +79,10 @@ public class KubernetesDeploymentsProducer extends DefaultProducer {
doCreateDeployment(exchange);
break;
+ case KubernetesOperations.REPLACE_DEPLOYMENT:
+ doReplaceDeployment(exchange);
+ break;
+
case KubernetesOperations.SCALE_DEPLOYMENT:
doScaleDeployment(exchange);
break;
@@ -133,29 +139,41 @@ public class KubernetesDeploymentsProducer extends DefaultProducer {
prepareOutboundMessage(exchange, deploymentDeleted);
}
+ protected void doReplaceDeployment(Exchange exchange) {
+ doCreateOrUpdateDeployment(exchange, "Replace", Resource::replace);
+ }
+
protected void doCreateDeployment(Exchange exchange) {
+ doCreateOrUpdateDeployment(exchange, "Create", Resource::create);
+ }
+
+ private void doCreateOrUpdateDeployment(
+ Exchange exchange, String operationName, Function<Resource<Deployment>, Deployment> operation) {
String deploymentName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_DEPLOYMENT_NAME, String.class);
String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
DeploymentSpec deSpec
= exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_DEPLOYMENT_SPEC, DeploymentSpec.class);
if (ObjectHelper.isEmpty(deploymentName)) {
- LOG.error("Create a specific Deployment require specify a Deployment name");
- throw new IllegalArgumentException("Create a specific Deployment require specify a pod name");
+ LOG.error("{} a specific Deployment require specify a Deployment name", operationName);
+ throw new IllegalArgumentException(
+ String.format("%s a specific Deployment require specify a pod name", operationName));
}
if (ObjectHelper.isEmpty(namespaceName)) {
- LOG.error("Create a specific Deployment require specify a namespace name");
- throw new IllegalArgumentException("Create a specific Deployment require specify a namespace name");
+ LOG.error("{} a specific Deployment require specify a namespace name", operationName);
+ throw new IllegalArgumentException(
+ String.format("%s a specific Deployment require specify a namespace name", operationName));
}
if (ObjectHelper.isEmpty(deSpec)) {
- LOG.error("Create a specific Deployment require specify a Deployment spec bean");
- throw new IllegalArgumentException("Create a specific Deployment require specify a Deployment spec bean");
+ LOG.error("{} a specific Deployment require specify a Deployment spec bean", operationName);
+ throw new IllegalArgumentException(
+ String.format("%s a specific Deployment require specify a Deployment spec bean", operationName));
}
Map<String, String> labels = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_DEPLOYMENTS_LABELS, Map.class);
Deployment deploymentCreating = new DeploymentBuilder().withNewMetadata().withName(deploymentName).withLabels(labels)
.endMetadata().withSpec(deSpec).build();
- Deployment deployment = getEndpoint().getKubernetesClient().apps().deployments().inNamespace(namespaceName)
- .resource(deploymentCreating)
- .create();
+ Deployment deployment
+ = operation.apply(getEndpoint().getKubernetesClient().apps().deployments().inNamespace(namespaceName)
+ .resource(deploymentCreating));
prepareOutboundMessage(exchange, deployment);
}
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/hpa/KubernetesHPAProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/hpa/KubernetesHPAProducer.java
index cc1a13a31e2..3b7dfbe69ff 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/hpa/KubernetesHPAProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/hpa/KubernetesHPAProducer.java
@@ -18,12 +18,14 @@ package org.apache.camel.component.kubernetes.hpa;
import java.util.List;
import java.util.Map;
+import java.util.function.Function;
import io.fabric8.kubernetes.api.model.StatusDetails;
import io.fabric8.kubernetes.api.model.autoscaling.v1.HorizontalPodAutoscaler;
import io.fabric8.kubernetes.api.model.autoscaling.v1.HorizontalPodAutoscalerBuilder;
import io.fabric8.kubernetes.api.model.autoscaling.v1.HorizontalPodAutoscalerList;
import io.fabric8.kubernetes.api.model.autoscaling.v1.HorizontalPodAutoscalerSpec;
+import io.fabric8.kubernetes.client.dsl.Resource;
import org.apache.camel.Exchange;
import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
import org.apache.camel.component.kubernetes.KubernetesConstants;
@@ -71,6 +73,10 @@ public class KubernetesHPAProducer extends DefaultProducer {
doCreateHPA(exchange);
break;
+ case KubernetesOperations.REPLACE_HPA_OPERATION:
+ doReplaceHPA(exchange);
+ break;
+
case KubernetesOperations.DELETE_HPA_OPERATION:
doDeleteHPA(exchange);
break;
@@ -123,30 +129,40 @@ public class KubernetesHPAProducer extends DefaultProducer {
prepareOutboundMessage(exchange, hpa);
}
+ protected void doReplaceHPA(Exchange exchange) {
+ doCreateOrUpdateHPA(exchange, "Replace", Resource::replace);
+ }
+
protected void doCreateHPA(Exchange exchange) {
+ doCreateOrUpdateHPA(exchange, "Create", Resource::create);
+ }
+
+ private void doCreateOrUpdateHPA(
+ Exchange exchange, String operationName,
+ Function<Resource<HorizontalPodAutoscaler>, HorizontalPodAutoscaler> operation) {
String hpaName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_HPA_NAME, String.class);
String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
HorizontalPodAutoscalerSpec hpaSpec
= exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_HPA_SPEC, HorizontalPodAutoscalerSpec.class);
if (ObjectHelper.isEmpty(hpaName)) {
- LOG.error("Create a specific hpa require specify a hpa name");
- throw new IllegalArgumentException("Create a specific hpa require specify a hpa name");
+ LOG.error("{} a specific hpa require specify a hpa name", operationName);
+ throw new IllegalArgumentException(operationName + " a specific hpa require specify a hpa name");
}
if (ObjectHelper.isEmpty(namespaceName)) {
- LOG.error("Create a specific hpa require specify a namespace name");
- throw new IllegalArgumentException("Create a specific hpa require specify a namespace name");
+ LOG.error("{} a specific hpa require specify a namespace name", operationName);
+ throw new IllegalArgumentException(operationName + " a specific hpa require specify a namespace name");
}
if (ObjectHelper.isEmpty(hpaSpec)) {
- LOG.error("Create a specific hpa require specify a hpa spec bean");
- throw new IllegalArgumentException("Create a specific hpa require specify a hpa spec bean");
+ LOG.error("{} a specific hpa require specify a hpa spec bean", operationName);
+ throw new IllegalArgumentException(operationName + " a specific hpa require specify a hpa spec bean");
}
Map<String, String> labels = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_HPA_LABELS, Map.class);
HorizontalPodAutoscaler hpaCreating = new HorizontalPodAutoscalerBuilder().withNewMetadata().withName(hpaName)
.withLabels(labels).endMetadata().withSpec(hpaSpec).build();
HorizontalPodAutoscaler hpa
- = getEndpoint().getKubernetesClient().autoscaling().v1().horizontalPodAutoscalers().inNamespace(namespaceName)
- .resource(hpaCreating)
- .create();
+ = operation.apply(getEndpoint().getKubernetesClient().autoscaling().v1().horizontalPodAutoscalers()
+ .inNamespace(namespaceName)
+ .resource(hpaCreating));
prepareOutboundMessage(exchange, hpa);
}
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/job/KubernetesJobProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/job/KubernetesJobProducer.java
index 51ed0c99cdc..611e3dc2567 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/job/KubernetesJobProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/job/KubernetesJobProducer.java
@@ -17,12 +17,14 @@
package org.apache.camel.component.kubernetes.job;
import java.util.Map;
+import java.util.function.Function;
import io.fabric8.kubernetes.api.model.batch.v1.Job;
import io.fabric8.kubernetes.api.model.batch.v1.JobBuilder;
import io.fabric8.kubernetes.api.model.batch.v1.JobList;
import io.fabric8.kubernetes.api.model.batch.v1.JobSpec;
import io.fabric8.kubernetes.client.dsl.MixedOperation;
+import io.fabric8.kubernetes.client.dsl.Resource;
import io.fabric8.kubernetes.client.dsl.ScalableResource;
import org.apache.camel.Exchange;
import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
@@ -77,6 +79,10 @@ public class KubernetesJobProducer extends DefaultProducer {
doCreateJob(exchange);
break;
+ case KubernetesOperations.REPLACE_JOB_OPERATION:
+ doReplaceJob(exchange);
+ break;
+
case KubernetesOperations.DELETE_JOB_OPERATION:
doDeleteJob(exchange);
break;
@@ -122,27 +128,37 @@ public class KubernetesJobProducer extends DefaultProducer {
prepareOutboundMessage(exchange, job);
}
+ protected void doReplaceJob(Exchange exchange) {
+ doCreateOrUpdateJob(exchange, "Replace", Resource::replace);
+ }
+
protected void doCreateJob(Exchange exchange) {
+ doCreateOrUpdateJob(exchange, "Create", Resource::create);
+ }
+
+ private void doCreateOrUpdateJob(Exchange exchange, String operationName, Function<Resource<Job>, Job> operation) {
String jobName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_JOB_NAME, String.class);
String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
JobSpec jobSpec = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_JOB_SPEC, JobSpec.class);
if (ObjectHelper.isEmpty(jobName)) {
- LOG.error("Create a specific job require specify a job name");
- throw new IllegalArgumentException("Create a specific job require specify a job name");
+ LOG.error("{} a specific job require specify a job name", operationName);
+ throw new IllegalArgumentException(String.format("%s a specific job require specify a job name", operationName));
}
if (ObjectHelper.isEmpty(namespaceName)) {
- LOG.error("Create a specific job require specify a namespace name");
- throw new IllegalArgumentException("Create a specific job require specify a namespace name");
+ LOG.error("{} a specific job require specify a namespace name", operationName);
+ throw new IllegalArgumentException(
+ String.format("%s a specific job require specify a namespace name", operationName));
}
if (ObjectHelper.isEmpty(jobSpec)) {
- LOG.error("Create a specific job require specify a hpa spec bean");
- throw new IllegalArgumentException("Create a specific job require specify a hpa spec bean");
+ LOG.error("{} a specific job require specify a hpa spec bean", operationName);
+ throw new IllegalArgumentException(
+ String.format("%s a specific job require specify a hpa spec bean", operationName));
}
Map<String, String> labels = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_JOB_LABELS, Map.class);
Job jobCreating = new JobBuilder().withNewMetadata().withName(jobName).withLabels(labels).endMetadata()
.withSpec(jobSpec).build();
- Job job = getEndpoint().getKubernetesClient().batch().v1().jobs().inNamespace(namespaceName).resource(jobCreating)
- .create();
+ Job job = operation.apply(
+ getEndpoint().getKubernetesClient().batch().v1().jobs().inNamespace(namespaceName).resource(jobCreating));
prepareOutboundMessage(exchange, job);
}
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/namespaces/KubernetesNamespacesProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/namespaces/KubernetesNamespacesProducer.java
index 0f8428506a9..71c8ee2c270 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/namespaces/KubernetesNamespacesProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/namespaces/KubernetesNamespacesProducer.java
@@ -18,11 +18,13 @@ package org.apache.camel.component.kubernetes.namespaces;
import java.util.List;
import java.util.Map;
+import java.util.function.Function;
import io.fabric8.kubernetes.api.model.Namespace;
import io.fabric8.kubernetes.api.model.NamespaceBuilder;
import io.fabric8.kubernetes.api.model.NamespaceList;
import io.fabric8.kubernetes.api.model.StatusDetails;
+import io.fabric8.kubernetes.client.dsl.Resource;
import org.apache.camel.Exchange;
import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
import org.apache.camel.component.kubernetes.KubernetesConstants;
@@ -70,6 +72,10 @@ public class KubernetesNamespacesProducer extends DefaultProducer {
doCreateNamespace(exchange);
break;
+ case KubernetesOperations.REPLACE_NAMESPACE_OPERATION:
+ doReplaceNamespace(exchange);
+ break;
+
case KubernetesOperations.DELETE_NAMESPACE_OPERATION:
doDeleteNamespace(exchange);
break;
@@ -108,16 +114,26 @@ public class KubernetesNamespacesProducer extends DefaultProducer {
prepareOutboundMessage(exchange, namespace);
}
+ protected void doReplaceNamespace(Exchange exchange) {
+ doCreateOrUpdateNamespace(exchange, "Replace", Resource::replace);
+ }
+
protected void doCreateNamespace(Exchange exchange) {
+ doCreateOrUpdateNamespace(exchange, "Create", Resource::create);
+ }
+
+ private void doCreateOrUpdateNamespace(
+ Exchange exchange, String operationName, Function<Resource<Namespace>, Namespace> operation) {
String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
if (ObjectHelper.isEmpty(namespaceName)) {
- LOG.error("Create a specific namespace require specify a namespace name");
- throw new IllegalArgumentException("Create a specific namespace require specify a namespace name");
+ LOG.error("{} a specific namespace require specify a namespace name", operationName);
+ throw new IllegalArgumentException(
+ String.format("%s a specific namespace require specify a namespace name", operationName));
}
Map<String, String> labels = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_LABELS, Map.class);
Namespace ns
= new NamespaceBuilder().withNewMetadata().withName(namespaceName).withLabels(labels).endMetadata().build();
- Namespace namespace = getEndpoint().getKubernetesClient().namespaces().resource(ns).create();
+ Namespace namespace = operation.apply(getEndpoint().getKubernetesClient().namespaces().resource(ns));
prepareOutboundMessage(exchange, namespace);
}
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 e767af9c89e..edf44ad6309 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
@@ -18,12 +18,14 @@ package org.apache.camel.component.kubernetes.nodes;
import java.util.List;
import java.util.Map;
+import java.util.function.Function;
import io.fabric8.kubernetes.api.model.Node;
import io.fabric8.kubernetes.api.model.NodeBuilder;
import io.fabric8.kubernetes.api.model.NodeList;
import io.fabric8.kubernetes.api.model.NodeSpec;
import io.fabric8.kubernetes.api.model.StatusDetails;
+import io.fabric8.kubernetes.client.dsl.Resource;
import org.apache.camel.Exchange;
import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
import org.apache.camel.component.kubernetes.KubernetesConstants;
@@ -71,6 +73,10 @@ public class KubernetesNodesProducer extends DefaultProducer {
doCreateNode(exchange);
break;
+ case KubernetesOperations.REPLACE_NODE_OPERATION:
+ doReplaceNode(exchange);
+ break;
+
case KubernetesOperations.DELETE_NODE_OPERATION:
doDeleteNode(exchange);
break;
@@ -107,21 +113,30 @@ public class KubernetesNodesProducer extends DefaultProducer {
prepareOutboundMessage(exchange, node);
}
+ protected void doReplaceNode(Exchange exchange) {
+ doCreateOrUpdateNode(exchange, "Replace", Resource::replace);
+ }
+
protected void doCreateNode(Exchange exchange) {
+ doCreateOrUpdateNode(exchange, "Create", Resource::create);
+ }
+
+ private void doCreateOrUpdateNode(Exchange exchange, String operationName, Function<Resource<Node>, Node> operation) {
String nodeName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NODE_NAME, String.class);
NodeSpec nodeSpec = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NODE_SPEC, NodeSpec.class);
if (ObjectHelper.isEmpty(nodeName)) {
- LOG.error("Create a specific node require specify a node name");
- throw new IllegalArgumentException("Create a specific node require specify a node name");
+ LOG.error("{} a specific node require specify a node name", operationName);
+ throw new IllegalArgumentException(String.format("%s a specific node require specify a node name", operationName));
}
if (ObjectHelper.isEmpty(nodeSpec)) {
- LOG.error("Create a specific node require specify a node spec bean");
- throw new IllegalArgumentException("Create a specific node require specify a node spec bean");
+ LOG.error("{} a specific node require specify a node spec bean", operationName);
+ throw new IllegalArgumentException(
+ String.format("%s a specific node require specify a node spec bean", operationName));
}
Map<String, String> labels = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_PODS_LABELS, Map.class);
Node nodeCreating = new NodeBuilder().withNewMetadata().withName(nodeName).withLabels(labels).endMetadata()
.withSpec(nodeSpec).build();
- Node node = getEndpoint().getKubernetesClient().nodes().resource(nodeCreating).create();
+ Node node = operation.apply(getEndpoint().getKubernetesClient().nodes().resource(nodeCreating));
prepareOutboundMessage(exchange, node);
}
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/persistent_volumes_claims/KubernetesPersistentVolumesClaimsProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/persistent_volumes_claims/KubernetesPersistentVolumesClaimsProducer.java
index 0f7d286ebe7..52ee4f6ecd8 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/persistent_volumes_claims/KubernetesPersistentVolumesClaimsProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/persistent_volumes_claims/KubernetesPersistentVolumesClaimsProducer.java
@@ -18,12 +18,14 @@ package org.apache.camel.component.kubernetes.persistent_volumes_claims;
import java.util.List;
import java.util.Map;
+import java.util.function.Function;
import io.fabric8.kubernetes.api.model.PersistentVolumeClaim;
import io.fabric8.kubernetes.api.model.PersistentVolumeClaimBuilder;
import io.fabric8.kubernetes.api.model.PersistentVolumeClaimList;
import io.fabric8.kubernetes.api.model.PersistentVolumeClaimSpec;
import io.fabric8.kubernetes.api.model.StatusDetails;
+import io.fabric8.kubernetes.client.dsl.Resource;
import org.apache.camel.Exchange;
import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
import org.apache.camel.component.kubernetes.KubernetesConstants;
@@ -71,6 +73,10 @@ public class KubernetesPersistentVolumesClaimsProducer extends DefaultProducer {
doCreatePersistentVolumeClaim(exchange);
break;
+ case KubernetesOperations.REPLACE_PERSISTENT_VOLUME_CLAIM_OPERATION:
+ doReplacePersistentVolumeClaim(exchange);
+ break;
+
case KubernetesOperations.DELETE_PERSISTENT_VOLUME_CLAIM_OPERATION:
doDeletePersistentVolumeClaim(exchange);
break;
@@ -128,32 +134,46 @@ public class KubernetesPersistentVolumesClaimsProducer extends DefaultProducer {
prepareOutboundMessage(exchange, pvc);
}
+ protected void doReplacePersistentVolumeClaim(Exchange exchange) {
+ doCreateOrUpdatePersistentVolumeClaim(exchange, "Replace", Resource::replace);
+ }
+
protected void doCreatePersistentVolumeClaim(Exchange exchange) {
+ doCreateOrUpdatePersistentVolumeClaim(exchange, "Create", Resource::create);
+ }
+
+ private void doCreateOrUpdatePersistentVolumeClaim(
+ Exchange exchange, String operationName,
+ Function<Resource<PersistentVolumeClaim>, PersistentVolumeClaim> operation) {
String pvcName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_PERSISTENT_VOLUME_CLAIM_NAME, String.class);
String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
PersistentVolumeClaimSpec pvcSpec = exchange.getIn()
.getHeader(KubernetesConstants.KUBERNETES_PERSISTENT_VOLUME_CLAIM_SPEC, PersistentVolumeClaimSpec.class);
if (ObjectHelper.isEmpty(pvcName)) {
- LOG.error("Create a specific Persistent Volume Claim require specify a Persistent Volume Claim name");
+ LOG.error("{} a specific Persistent Volume Claim require specify a Persistent Volume Claim name", operationName);
throw new IllegalArgumentException(
- "Create a specific Persistent Volume Claim require specify a Persistent Volume Claim name");
+ String.format("%s a specific Persistent Volume Claim require specify a Persistent Volume Claim name",
+ operationName));
}
if (ObjectHelper.isEmpty(namespaceName)) {
- LOG.error("Create a specific Persistent Volume Claim require specify a namespace name");
- throw new IllegalArgumentException("Create a specific Persistent Volume Claim require specify a namespace name");
+ LOG.error("{} a specific Persistent Volume Claim require specify a namespace name", operationName);
+ throw new IllegalArgumentException(
+ String.format("%s a specific Persistent Volume Claim require specify a namespace name", operationName));
}
if (ObjectHelper.isEmpty(pvcSpec)) {
- LOG.error("Create a specific Persistent Volume Claim require specify a Persistent Volume Claim spec bean");
+ LOG.error("{} a specific Persistent Volume Claim require specify a Persistent Volume Claim spec bean",
+ operationName);
throw new IllegalArgumentException(
- "Create a specific Persistent Volume Claim require specify a Persistent Volume Claim spec bean");
+ String.format("%s a specific Persistent Volume Claim require specify a Persistent Volume Claim spec bean",
+ operationName));
}
Map<String, String> labels
= exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_PERSISTENT_VOLUMES_CLAIMS_LABELS, Map.class);
PersistentVolumeClaim pvcCreating = new PersistentVolumeClaimBuilder().withNewMetadata().withName(pvcName)
.withLabels(labels).endMetadata().withSpec(pvcSpec).build();
PersistentVolumeClaim pvc
- = getEndpoint().getKubernetesClient().persistentVolumeClaims().inNamespace(namespaceName).resource(pvcCreating)
- .create();
+ = operation.apply(getEndpoint().getKubernetesClient().persistentVolumeClaims().inNamespace(namespaceName)
+ .resource(pvcCreating));
prepareOutboundMessage(exchange, pvc);
}
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/pods/KubernetesPodsProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/pods/KubernetesPodsProducer.java
index 9de34cc7617..f8cc95ae2a7 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/pods/KubernetesPodsProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/pods/KubernetesPodsProducer.java
@@ -18,12 +18,14 @@ package org.apache.camel.component.kubernetes.pods;
import java.util.List;
import java.util.Map;
+import java.util.function.Function;
import io.fabric8.kubernetes.api.model.Pod;
import io.fabric8.kubernetes.api.model.PodBuilder;
import io.fabric8.kubernetes.api.model.PodList;
import io.fabric8.kubernetes.api.model.PodSpec;
import io.fabric8.kubernetes.api.model.StatusDetails;
+import io.fabric8.kubernetes.client.dsl.Resource;
import org.apache.camel.Exchange;
import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
import org.apache.camel.component.kubernetes.KubernetesConstants;
@@ -71,6 +73,10 @@ public class KubernetesPodsProducer extends DefaultProducer {
doCreatePod(exchange);
break;
+ case KubernetesOperations.REPLACE_POD_OPERATION:
+ doReplacePod(exchange);
+ break;
+
case KubernetesOperations.DELETE_POD_OPERATION:
doDeletePod(exchange);
break;
@@ -123,26 +129,36 @@ public class KubernetesPodsProducer extends DefaultProducer {
prepareOutboundMessage(exchange, pod);
}
+ protected void doReplacePod(Exchange exchange) {
+ doCreateOrUpdatePod(exchange, "Replace", Resource::replace);
+ }
+
protected void doCreatePod(Exchange exchange) {
+ doCreateOrUpdatePod(exchange, "Create", Resource::create);
+ }
+
+ private void doCreateOrUpdatePod(Exchange exchange, String operationName, Function<Resource<Pod>, Pod> operation) {
String podName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_POD_NAME, String.class);
String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
PodSpec podSpec = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_POD_SPEC, PodSpec.class);
if (ObjectHelper.isEmpty(podName)) {
- LOG.error("Create a specific pod require specify a pod name");
- throw new IllegalArgumentException("Create a specific pod require specify a pod name");
+ LOG.error("{} a specific pod require specify a pod name", operationName);
+ throw new IllegalArgumentException(String.format("%s a specific pod require specify a pod name", operationName));
}
if (ObjectHelper.isEmpty(namespaceName)) {
- LOG.error("Create a specific pod require specify a namespace name");
- throw new IllegalArgumentException("Create a specific pod require specify a namespace name");
+ LOG.error("{} a specific pod require specify a namespace name", operationName);
+ throw new IllegalArgumentException(
+ String.format("%s a specific pod require specify a namespace name", operationName));
}
if (ObjectHelper.isEmpty(podSpec)) {
- LOG.error("Create a specific pod require specify a pod spec bean");
- throw new IllegalArgumentException("Create a specific pod require specify a pod spec bean");
+ LOG.error("{} a specific pod require specify a pod spec bean", operationName);
+ throw new IllegalArgumentException(
+ String.format("%s a specific pod require specify a pod spec bean", operationName));
}
Map<String, String> labels = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_PODS_LABELS, Map.class);
Pod podCreating = new PodBuilder().withNewMetadata().withName(podName).withLabels(labels).endMetadata()
.withSpec(podSpec).build();
- Pod pod = getEndpoint().getKubernetesClient().pods().inNamespace(namespaceName).resource(podCreating).create();
+ Pod pod = operation.apply(getEndpoint().getKubernetesClient().pods().inNamespace(namespaceName).resource(podCreating));
prepareOutboundMessage(exchange, pod);
}
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/replication_controllers/KubernetesReplicationControllersProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/replication_controllers/KubernetesReplicationControllersProducer.java
index 45a9981961b..f6f839f8522 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/replication_controllers/KubernetesReplicationControllersProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/replication_controllers/KubernetesReplicationControllersProducer.java
@@ -18,6 +18,7 @@ package org.apache.camel.component.kubernetes.replication_controllers;
import java.util.List;
import java.util.Map;
+import java.util.function.Function;
import io.fabric8.kubernetes.api.model.ReplicationController;
import io.fabric8.kubernetes.api.model.ReplicationControllerBuilder;
@@ -25,6 +26,7 @@ import io.fabric8.kubernetes.api.model.ReplicationControllerList;
import io.fabric8.kubernetes.api.model.ReplicationControllerSpec;
import io.fabric8.kubernetes.api.model.StatusDetails;
import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation;
+import io.fabric8.kubernetes.client.dsl.Resource;
import io.fabric8.kubernetes.client.dsl.RollableScalableResource;
import org.apache.camel.Exchange;
import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
@@ -73,6 +75,10 @@ public class KubernetesReplicationControllersProducer extends DefaultProducer {
doCreateReplicationController(exchange);
break;
+ case KubernetesOperations.REPLACE_REPLICATION_CONTROLLER_OPERATION:
+ doReplaceReplicationController(exchange);
+ break;
+
case KubernetesOperations.DELETE_REPLICATION_CONTROLLER_OPERATION:
doDeleteReplicationController(exchange);
break;
@@ -140,31 +146,45 @@ public class KubernetesReplicationControllersProducer extends DefaultProducer {
prepareOutboundMessage(exchange, rc);
}
+ protected void doReplaceReplicationController(Exchange exchange) {
+ doCreateOrUpdateReplicationController(exchange, "Replace", Resource::replace);
+ }
+
protected void doCreateReplicationController(Exchange exchange) {
+ doCreateOrUpdateReplicationController(exchange, "Create", Resource::create);
+ }
+
+ private void doCreateOrUpdateReplicationController(
+ Exchange exchange, String operationName,
+ Function<Resource<ReplicationController>, ReplicationController> operation) {
String rcName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_REPLICATION_CONTROLLER_NAME, String.class);
String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
ReplicationControllerSpec rcSpec = exchange.getIn()
.getHeader(KubernetesConstants.KUBERNETES_REPLICATION_CONTROLLER_SPEC, ReplicationControllerSpec.class);
if (ObjectHelper.isEmpty(rcName)) {
- LOG.error("Create a specific replication controller require specify a replication controller name");
+ LOG.error("{} a specific replication controller require specify a replication controller name", operationName);
throw new IllegalArgumentException(
- "Create a specific replication controller require specify a replication controller name");
+ String.format("%s a specific replication controller require specify a replication controller name",
+ operationName));
}
if (ObjectHelper.isEmpty(namespaceName)) {
- LOG.error("Create a specific replication controller require specify a namespace name");
- throw new IllegalArgumentException("Create a specific replication controller require specify a namespace name");
+ LOG.error("{} a specific replication controller require specify a namespace name", operationName);
+ throw new IllegalArgumentException(
+ String.format("%s a specific replication controller require specify a namespace name", operationName));
}
if (ObjectHelper.isEmpty(rcSpec)) {
- LOG.error("Create a specific replication controller require specify a replication controller spec bean");
+ LOG.error("{} a specific replication controller require specify a replication controller spec bean", operationName);
throw new IllegalArgumentException(
- "Create a specific replication controller require specify a replication controller spec bean");
+ String.format("%s a specific replication controller require specify a replication controller spec bean",
+ operationName));
}
Map<String, String> labels
= exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_REPLICATION_CONTROLLERS_LABELS, Map.class);
ReplicationController rcCreating = new ReplicationControllerBuilder().withNewMetadata().withName(rcName)
.withLabels(labels).endMetadata().withSpec(rcSpec).build();
- ReplicationController rc = getEndpoint().getKubernetesClient().replicationControllers().inNamespace(namespaceName)
- .resource(rcCreating).create();
+ ReplicationController rc
+ = operation.apply(getEndpoint().getKubernetesClient().replicationControllers().inNamespace(namespaceName)
+ .resource(rcCreating));
prepareOutboundMessage(exchange, rc);
}
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/resources_quota/KubernetesResourcesQuotaProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/resources_quota/KubernetesResourcesQuotaProducer.java
index be90b4cd3e5..2318340552f 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/resources_quota/KubernetesResourcesQuotaProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/resources_quota/KubernetesResourcesQuotaProducer.java
@@ -18,6 +18,7 @@ package org.apache.camel.component.kubernetes.resources_quota;
import java.util.List;
import java.util.Map;
+import java.util.function.Function;
import io.fabric8.kubernetes.api.model.ResourceQuota;
import io.fabric8.kubernetes.api.model.ResourceQuotaBuilder;
@@ -74,6 +75,10 @@ public class KubernetesResourcesQuotaProducer extends DefaultProducer {
doCreateResourceQuota(exchange);
break;
+ case KubernetesOperations.REPLACE_RESOURCE_QUOTA_OPERATION:
+ doReplaceResourceQuota(exchange);
+ break;
+
case KubernetesOperations.DELETE_RESOURCE_QUOTA_OPERATION:
doDeleteResourceQuota(exchange);
break;
@@ -130,29 +135,41 @@ public class KubernetesResourcesQuotaProducer extends DefaultProducer {
prepareOutboundMessage(exchange, rq);
}
+ protected void doReplaceResourceQuota(Exchange exchange) {
+ doCreateOrUpdateResourceQuota(exchange, "Replace", Resource::replace);
+ }
+
protected void doCreateResourceQuota(Exchange exchange) {
+ doCreateOrUpdateResourceQuota(exchange, "Create", Resource::create);
+ }
+
+ private void doCreateOrUpdateResourceQuota(
+ Exchange exchange, String operationName, Function<Resource<ResourceQuota>, ResourceQuota> operation) {
String rqName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_RESOURCES_QUOTA_NAME, String.class);
String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
ResourceQuotaSpec rqSpec
= exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_RESOURCE_QUOTA_SPEC, ResourceQuotaSpec.class);
if (ObjectHelper.isEmpty(rqName)) {
- LOG.error("Create a specific resource quota require specify a resource quota name");
- throw new IllegalArgumentException("Create a specific resource quota require specify a resource quota name");
+ LOG.error("{} a specific resource quota require specify a resource quota name", operationName);
+ throw new IllegalArgumentException(
+ operationName + " a specific resource quota require specify a resource quota name");
}
if (ObjectHelper.isEmpty(namespaceName)) {
- LOG.error("Create a specific resource quota require specify a namespace name");
- throw new IllegalArgumentException("Create a specific resource quota require specify a namespace name");
+ LOG.error("{} a specific resource quota require specify a namespace name", operationName);
+ throw new IllegalArgumentException(operationName + " a specific resource quota require specify a namespace name");
}
if (ObjectHelper.isEmpty(rqSpec)) {
- LOG.error("Create a specific resource quota require specify a resource quota spec bean");
- throw new IllegalArgumentException("Create a specific resource quota require specify a resource quota spec bean");
+ LOG.error("{} a specific resource quota require specify a resource quota spec bean", operationName);
+ throw new IllegalArgumentException(
+ operationName + " a specific resource quota require specify a resource quota spec bean");
}
Map<String, String> labels
= exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_RESOURCES_QUOTA_LABELS, Map.class);
ResourceQuota rqCreating = new ResourceQuotaBuilder().withNewMetadata().withName(rqName).withLabels(labels)
.endMetadata().withSpec(rqSpec).build();
ResourceQuota rq
- = getEndpoint().getKubernetesClient().resourceQuotas().inNamespace(namespaceName).resource(rqCreating).create();
+ = operation.apply(
+ getEndpoint().getKubernetesClient().resourceQuotas().inNamespace(namespaceName).resource(rqCreating));
prepareOutboundMessage(exchange, rq);
}
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/secrets/KubernetesSecretsProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/secrets/KubernetesSecretsProducer.java
index 30c05103d27..003ec056451 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/secrets/KubernetesSecretsProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/secrets/KubernetesSecretsProducer.java
@@ -18,10 +18,12 @@ package org.apache.camel.component.kubernetes.secrets;
import java.util.List;
import java.util.Map;
+import java.util.function.Function;
import io.fabric8.kubernetes.api.model.Secret;
import io.fabric8.kubernetes.api.model.SecretList;
import io.fabric8.kubernetes.api.model.StatusDetails;
+import io.fabric8.kubernetes.client.dsl.Resource;
import org.apache.camel.Exchange;
import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
import org.apache.camel.component.kubernetes.KubernetesConstants;
@@ -69,6 +71,10 @@ public class KubernetesSecretsProducer extends DefaultProducer {
doCreateSecret(exchange);
break;
+ case KubernetesOperations.REPLACE_SECRET_OPERATION:
+ doReplaceSecret(exchange);
+ break;
+
case KubernetesOperations.DELETE_SECRET_OPERATION:
doDeleteSecret(exchange);
break;
@@ -121,19 +127,30 @@ public class KubernetesSecretsProducer extends DefaultProducer {
prepareOutboundMessage(exchange, secret);
}
+ protected void doReplaceSecret(Exchange exchange) {
+ doCreateOrUpdateSecret(exchange, "Replace", Resource::replace);
+ }
+
protected void doCreateSecret(Exchange exchange) {
+ doCreateOrUpdateSecret(exchange, "Create", Resource::create);
+ }
+
+ private void doCreateOrUpdateSecret(Exchange exchange, String operationName, Function<Resource<Secret>, Secret> operation) {
String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
Secret secretToCreate = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_SECRET, Secret.class);
if (ObjectHelper.isEmpty(namespaceName)) {
- LOG.error("Create a specific secret require specify a namespace name");
- throw new IllegalArgumentException("Create a specific secret require specify a namespace name");
+ LOG.error("{} a specific secret require specify a namespace name", operationName);
+ throw new IllegalArgumentException(
+ String.format("%s a specific secret require specify a namespace name", operationName));
}
if (ObjectHelper.isEmpty(secretToCreate)) {
- LOG.error("Create a specific secret require specify a secret bean");
- throw new IllegalArgumentException("Create a specific secret require specify a secret bean");
+ LOG.error("{} a specific secret require specify a secret bean", operationName);
+ throw new IllegalArgumentException(
+ String.format("%s a specific secret require specify a secret bean", operationName));
}
Secret secret
- = getEndpoint().getKubernetesClient().secrets().inNamespace(namespaceName).resource(secretToCreate).create();
+ = operation.apply(
+ getEndpoint().getKubernetesClient().secrets().inNamespace(namespaceName).resource(secretToCreate));
prepareOutboundMessage(exchange, secret);
}
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/service_accounts/KubernetesServiceAccountsProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/service_accounts/KubernetesServiceAccountsProducer.java
index 95125bca63f..1fffa9d0627 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/service_accounts/KubernetesServiceAccountsProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/service_accounts/KubernetesServiceAccountsProducer.java
@@ -18,10 +18,12 @@ package org.apache.camel.component.kubernetes.service_accounts;
import java.util.List;
import java.util.Map;
+import java.util.function.Function;
import io.fabric8.kubernetes.api.model.ServiceAccount;
import io.fabric8.kubernetes.api.model.ServiceAccountList;
import io.fabric8.kubernetes.api.model.StatusDetails;
+import io.fabric8.kubernetes.client.dsl.Resource;
import org.apache.camel.Exchange;
import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
import org.apache.camel.component.kubernetes.KubernetesConstants;
@@ -69,6 +71,10 @@ public class KubernetesServiceAccountsProducer extends DefaultProducer {
doCreateServiceAccount(exchange);
break;
+ case KubernetesOperations.REPLACE_SERVICE_ACCOUNT_OPERATION:
+ doReplaceServiceAccount(exchange);
+ break;
+
case KubernetesOperations.DELETE_SERVICE_ACCOUNT_OPERATION:
doDeleteServiceAccount(exchange);
break;
@@ -124,20 +130,31 @@ public class KubernetesServiceAccountsProducer extends DefaultProducer {
prepareOutboundMessage(exchange, sa);
}
+ protected void doReplaceServiceAccount(Exchange exchange) {
+ doCreateOrUpdateServiceAccount(exchange, "Replace", Resource::replace);
+ }
+
protected void doCreateServiceAccount(Exchange exchange) {
+ doCreateOrUpdateServiceAccount(exchange, "Create", Resource::create);
+ }
+
+ private void doCreateOrUpdateServiceAccount(
+ Exchange exchange, String operationName, Function<Resource<ServiceAccount>, ServiceAccount> operation) {
String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
ServiceAccount saToCreate
= exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_SERVICE_ACCOUNT, ServiceAccount.class);
if (ObjectHelper.isEmpty(namespaceName)) {
- LOG.error("Create a specific Service Account require specify a namespace name");
- throw new IllegalArgumentException("Create a specific Service Account require specify a namespace name");
+ LOG.error("{} a specific Service Account require specify a namespace name", operationName);
+ throw new IllegalArgumentException(
+ String.format("%s a specific Service Account require specify a namespace name", operationName));
}
if (ObjectHelper.isEmpty(saToCreate)) {
- LOG.error("Create a specific Service Account require specify a Service Account bean");
- throw new IllegalArgumentException("Create a specific Service Account require specify a Service Account bean");
+ LOG.error("{} a specific Service Account require specify a Service Account bean", operationName);
+ throw new IllegalArgumentException(
+ String.format("%s a specific Service Account require specify a Service Account bean", operationName));
}
- ServiceAccount sa = getEndpoint().getKubernetesClient().serviceAccounts().inNamespace(namespaceName)
- .resource(saToCreate).create();
+ ServiceAccount sa = operation.apply(getEndpoint().getKubernetesClient().serviceAccounts().inNamespace(namespaceName)
+ .resource(saToCreate));
prepareOutboundMessage(exchange, sa);
}
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/services/KubernetesServicesProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/services/KubernetesServicesProducer.java
index a97e6946fd1..2383e5c9014 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/services/KubernetesServicesProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/services/KubernetesServicesProducer.java
@@ -18,12 +18,14 @@ package org.apache.camel.component.kubernetes.services;
import java.util.List;
import java.util.Map;
+import java.util.function.Function;
import io.fabric8.kubernetes.api.model.Service;
import io.fabric8.kubernetes.api.model.ServiceBuilder;
import io.fabric8.kubernetes.api.model.ServiceList;
import io.fabric8.kubernetes.api.model.ServiceSpec;
import io.fabric8.kubernetes.api.model.StatusDetails;
+import io.fabric8.kubernetes.client.dsl.Resource;
import org.apache.camel.Exchange;
import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
import org.apache.camel.component.kubernetes.KubernetesConstants;
@@ -71,6 +73,10 @@ public class KubernetesServicesProducer extends DefaultProducer {
doCreateService(exchange);
break;
+ case KubernetesOperations.REPLACE_SERVICE_OPERATION:
+ doReplaceService(exchange);
+ break;
+
case KubernetesOperations.DELETE_SERVICE_OPERATION:
doDeleteService(exchange);
break;
@@ -130,27 +136,40 @@ public class KubernetesServicesProducer extends DefaultProducer {
prepareOutboundMessage(exchange, service);
}
+ protected void doReplaceService(Exchange exchange) {
+ doCreateOrUpdateService(exchange, "Replace", Resource::replace);
+ }
+
protected void doCreateService(Exchange exchange) {
+ doCreateOrUpdateService(exchange, "Create", Resource::create);
+ }
+
+ private void doCreateOrUpdateService(
+ Exchange exchange, String operationName, Function<Resource<Service>, Service> operation) {
String serviceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_SERVICE_NAME, String.class);
String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
ServiceSpec serviceSpec = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_SERVICE_SPEC, ServiceSpec.class);
if (ObjectHelper.isEmpty(serviceName)) {
- LOG.error("Create a specific service require specify a service name");
- throw new IllegalArgumentException("Create a specific service require specify a service name");
+ LOG.error("{} a specific service require specify a service name", operationName);
+ throw new IllegalArgumentException(
+ String.format("%s a specific service require specify a service name", operationName));
}
if (ObjectHelper.isEmpty(namespaceName)) {
- LOG.error("Create a specific service require specify a namespace name");
- throw new IllegalArgumentException("Create a specific service require specify a namespace name");
+ LOG.error("{} a specific service require specify a namespace name", operationName);
+ throw new IllegalArgumentException(
+ String.format("%s a specific service require specify a namespace name", operationName));
}
if (ObjectHelper.isEmpty(serviceSpec)) {
- LOG.error("Create a specific service require specify a service spec bean");
- throw new IllegalArgumentException("Create a specific service require specify a service spec bean");
+ LOG.error("{} a specific service require specify a service spec bean", operationName);
+ throw new IllegalArgumentException(
+ String.format("%s a specific service require specify a service spec bean", operationName));
}
Map<String, String> labels = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_SERVICE_LABELS, Map.class);
Service serviceCreating = new ServiceBuilder().withNewMetadata().withName(serviceName).withLabels(labels).endMetadata()
.withSpec(serviceSpec).build();
Service service
- = getEndpoint().getKubernetesClient().services().inNamespace(namespaceName).resource(serviceCreating).create();
+ = operation.apply(
+ getEndpoint().getKubernetesClient().services().inNamespace(namespaceName).resource(serviceCreating));
prepareOutboundMessage(exchange, service);
}
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/openshift/deploymentconfigs/OpenshiftDeploymentConfigsProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/openshift/deploymentconfigs/OpenshiftDeploymentConfigsProducer.java
index 9fdad01b7f7..d49b245002f 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/openshift/deploymentconfigs/OpenshiftDeploymentConfigsProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/openshift/deploymentconfigs/OpenshiftDeploymentConfigsProducer.java
@@ -18,8 +18,10 @@ package org.apache.camel.component.openshift.deploymentconfigs;
import java.util.List;
import java.util.Map;
+import java.util.function.Function;
import io.fabric8.kubernetes.api.model.StatusDetails;
+import io.fabric8.kubernetes.client.dsl.Resource;
import io.fabric8.openshift.api.model.DeploymentConfig;
import io.fabric8.openshift.api.model.DeploymentConfigBuilder;
import io.fabric8.openshift.api.model.DeploymentConfigList;
@@ -76,6 +78,10 @@ public class OpenshiftDeploymentConfigsProducer extends DefaultProducer {
doCreateDeployment(exchange);
break;
+ case KubernetesOperations.REPLACE_DEPLOYMENT_CONFIG:
+ doReplaceDeployment(exchange);
+ break;
+
case KubernetesOperations.SCALE_DEPLOYMENT_CONFIG:
doScaleDeploymentConfig(exchange);
break;
@@ -133,31 +139,43 @@ public class OpenshiftDeploymentConfigsProducer extends DefaultProducer {
prepareOutboundMessage(exchange, deploymentConfigDeleted);
}
+ protected void doReplaceDeployment(Exchange exchange) {
+ doCreateOrUpdateDeployment(exchange, "Replace", Resource::replace);
+ }
+
protected void doCreateDeployment(Exchange exchange) {
+ doCreateOrUpdateDeployment(exchange, "Create", Resource::create);
+ }
+
+ private void doCreateOrUpdateDeployment(
+ Exchange exchange, String operationName, Function<Resource<DeploymentConfig>, DeploymentConfig> operation) {
String deploymentName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_DEPLOYMENT_NAME, String.class);
String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
DeploymentConfigSpec dcSpec
= exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_DEPLOYMENT_CONFIG_SPEC, DeploymentConfigSpec.class);
if (ObjectHelper.isEmpty(deploymentName)) {
- LOG.error("Create a specific Deployment Config require specify a Deployment name");
- throw new IllegalArgumentException("Create a specific Deployment Config require specify a pod name");
+ LOG.error("{} a specific Deployment Config require specify a Deployment name", operationName);
+ throw new IllegalArgumentException(
+ String.format("%s a specific Deployment Config require specify a pod name", operationName));
}
if (ObjectHelper.isEmpty(namespaceName)) {
- LOG.error("Create a specific Deployment Config require specify a namespace name");
- throw new IllegalArgumentException("Create a specific Deployment Config require specify a namespace name");
+ LOG.error("{} a specific Deployment Config require specify a namespace name", operationName);
+ throw new IllegalArgumentException(
+ String.format("%s a specific Deployment Config require specify a namespace name", operationName));
}
if (ObjectHelper.isEmpty(dcSpec)) {
- LOG.error("Create a specific Deployment Config require specify a Deployment Config spec bean");
+ LOG.error("{} a specific Deployment Config require specify a Deployment Config spec bean", operationName);
throw new IllegalArgumentException(
- "Create a specific Deployment Config require specify a Deployment Config spec bean");
+ String.format("%s a specific Deployment Config require specify a Deployment Config spec bean",
+ operationName));
}
Map<String, String> labels = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_DEPLOYMENTS_LABELS, Map.class);
DeploymentConfig deploymentCreating = new DeploymentConfigBuilder().withNewMetadata().withName(deploymentName)
.withLabels(labels).endMetadata().withSpec(dcSpec).build();
- DeploymentConfig deploymentConfig = getEndpoint().getKubernetesClient().adapt(OpenShiftClient.class).deploymentConfigs()
- .inNamespace(namespaceName)
- .resource(deploymentCreating)
- .create();
+ DeploymentConfig deploymentConfig
+ = operation.apply(getEndpoint().getKubernetesClient().adapt(OpenShiftClient.class).deploymentConfigs()
+ .inNamespace(namespaceName)
+ .resource(deploymentCreating));
prepareOutboundMessage(exchange, deploymentConfig);
}
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesConfigMapsConsumerIT.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesConfigMapsConsumerIT.java
index c5f4e7803e5..c16c2d99301 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesConfigMapsConsumerIT.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesConfigMapsConsumerIT.java
@@ -38,6 +38,7 @@ import org.junit.jupiter.api.condition.EnabledIfSystemProperty;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
+import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -105,8 +106,31 @@ public class KubernetesConfigMapsConsumerIT extends KubernetesTestSupport {
assertNotNull(message.getBody());
}
- @ParameterizedTest
+ @Test
@Order(3)
+ void replaceConfigMap() {
+ configureMock();
+
+ Map<String, String> configMapData = Map.of("test1", "test1");
+ Exchange ex = template.request("direct:replaceConfigmap", exchange -> {
+ exchange.getIn().removeHeader(KubernetesConstants.KUBERNETES_CONFIGMAPS_LABELS);
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "default");
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CONFIGMAP_NAME, "test1");
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CONFIGMAP_DATA, configMapData);
+ });
+
+ Message message = ex.getMessage();
+
+ assertNotNull(message);
+ ConfigMap result = ex.getMessage().getBody(ConfigMap.class);
+
+ assertEquals("default", result.getMetadata().getNamespace());
+ assertEquals("test1", result.getMetadata().getName());
+ assertEquals(configMapData, result.getData());
+ }
+
+ @ParameterizedTest
+ @Order(4)
@ValueSource(strings = { "test", "test1" })
void deleteConfigMaps(String configMapName) {
Exchange ex = template.request("direct:deleteConfigmap", exchange -> {
@@ -132,6 +156,9 @@ public class KubernetesConfigMapsConsumerIT extends KubernetesTestSupport {
from("direct:createConfigmap")
.toF("kubernetes-config-maps://%s?oauthToken=%s&operation=createConfigMap", host,
authToken);
+ from("direct:replaceConfigmap")
+ .toF("kubernetes-config-maps://%s?oauthToken=%s&operation=replaceConfigMap", host,
+ authToken);
from("direct:deleteConfigmap")
.toF("kubernetes-config-maps://%s?oauthToken=%s&operation=deleteConfigMap", host,
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesConfigMapsProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesConfigMapsProducerTest.java
index 2327dae6dd3..d18e510328b 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesConfigMapsProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesConfigMapsProducerTest.java
@@ -131,6 +131,32 @@ public class KubernetesConfigMapsProducerTest extends KubernetesTestSupport {
assertEquals(labels, result.getMetadata().getLabels());
}
+ @Test
+ void replaceConfigMap() {
+ Map<String, String> labels = Map.of("my.label.key", "my.label.value");
+ Map<String, String> data = Map.of("my.data.key", "my.data.value");
+ ConfigMap cm1 = new ConfigMapBuilder().withNewMetadata().withName("cm1").withNamespace("test").withLabels(labels).and()
+ .withData(data).build();
+ server.expect().get().withPath("/api/v1/namespaces/test/configmaps/cm1")
+ .andReturn(200,
+ new ConfigMapBuilder().withNewMetadata().withName("cm1").withNamespace("test").endMetadata().build())
+ .once();
+ server.expect().put().withPath("/api/v1/namespaces/test/configmaps/cm1").andReturn(200, cm1).once();
+
+ Exchange ex = template.request("direct:replaceConfigMap", exchange -> {
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "test");
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CONFIGMAPS_LABELS, labels);
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CONFIGMAP_NAME, "cm1");
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CONFIGMAP_DATA, data);
+ });
+
+ ConfigMap result = ex.getMessage().getBody(ConfigMap.class);
+
+ assertEquals("test", result.getMetadata().getNamespace());
+ assertEquals("cm1", result.getMetadata().getName());
+ assertEquals(labels, result.getMetadata().getLabels());
+ }
+
@Test
void deleteConfigMap() {
ConfigMap cm1 = new ConfigMapBuilder().withNewMetadata().withName("cm1").withNamespace("test").and().build();
@@ -159,6 +185,8 @@ public class KubernetesConfigMapsProducerTest extends KubernetesTestSupport {
.to("kubernetes-config-maps:///?kubernetesClient=#kubernetesClient&operation=getConfigMap");
from("direct:createConfigMap")
.to("kubernetes-config-maps:///?kubernetesClient=#kubernetesClient&operation=createConfigMap");
+ from("direct:replaceConfigMap")
+ .to("kubernetes-config-maps:///?kubernetesClient=#kubernetesClient&operation=replaceConfigMap");
from("direct:deleteConfigMap")
.to("kubernetes-config-maps:///?kubernetesClient=#kubernetesClient&operation=deleteConfigMap");
}
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesCustomResourcesProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesCustomResourcesProducerTest.java
index 1b1b2d59750..22d54a9ddd4 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesCustomResourcesProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesCustomResourcesProducerTest.java
@@ -99,6 +99,32 @@ public class KubernetesCustomResourcesProducerTest extends KubernetesTestSupport
assertNotNull(ex.getMessage().getBody());
}
+ @Test
+ @Order(0)
+ void replaceTest() {
+ server.expect().get().withPath("/apis/sources.knative.dev/v1alpha1/namespaces/testnamespace/githubsources/samplecr")
+ .andReturn(200, githubSourceString).once();
+ server.expect().put().withPath("/apis/sources.knative.dev/v1alpha1/namespaces/testnamespace/githubsources/samplecr")
+ .andReturn(200, githubSourceString).once();
+
+ Exchange ex = template.request("direct:replaceCustomResource", exchange -> {
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CRD_INSTANCE_NAME, "samplecr");
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "testnamespace");
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CRD_NAME, "githubsources.sources.knative.dev");
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CRD_GROUP, "sources.knative.dev");
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CRD_SCOPE, "Namespaced");
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CRD_VERSION, "v1alpha1");
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CRD_PLURAL, "githubsources");
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CRD_INSTANCE, githubSourceString);
+ });
+
+ assertFalse(ex.isFailed());
+ assertNull(ex.getException());
+
+ assertNotNull(ex.getMessage());
+ assertNotNull(ex.getMessage().getBody());
+ }
+
@Test
@Order(2)
void listTest() throws Exception {
@@ -204,6 +230,8 @@ public class KubernetesCustomResourcesProducerTest extends KubernetesTestSupport
"kubernetes-custom-resources:///?kubernetesClient=#kubernetesClient&operation=deleteCustomResource");
from("direct:createCustomResource").toF(
"kubernetes-custom-resources:///?kubernetesClient=#kubernetesClient&operation=createCustomResource");
+ from("direct:replaceCustomResource").toF(
+ "kubernetes-custom-resources:///?kubernetesClient=#kubernetesClient&operation=replaceCustomResource");
}
};
}
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 b6ba664ad6b..32354ca1462 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
@@ -102,6 +102,34 @@ public class KubernetesDeploymentsProducerTest extends KubernetesTestSupport {
assertEquals(13, result.getSpec().getReplicas());
}
+ @Test
+ void replaceDeployment() {
+ Map<String, String> labels = Map.of("my.label.key", "my.label.value");
+ DeploymentSpec spec = new DeploymentSpecBuilder().withReplicas(13).build();
+ Deployment de1
+ = new DeploymentBuilder().withNewMetadata().withName("de1").withNamespace("test").withLabels(labels).and()
+ .withSpec(spec).build();
+ server.expect().get().withPath("/apis/apps/v1/namespaces/test/deployments/de1")
+ .andReturn(200,
+ new DeploymentBuilder().withNewMetadata().withName("de1").withNamespace("test").endMetadata().build())
+ .once();
+ server.expect().put().withPath("/apis/apps/v1/namespaces/test/deployments/de1").andReturn(200, de1).once();
+
+ Exchange ex = template.request("direct:replaceDeployment", exchange -> {
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "test");
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_DEPLOYMENTS_LABELS, labels);
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_DEPLOYMENT_NAME, "de1");
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_DEPLOYMENT_SPEC, spec);
+ });
+
+ Deployment result = ex.getMessage().getBody(Deployment.class);
+
+ assertEquals("test", result.getMetadata().getNamespace());
+ assertEquals("de1", result.getMetadata().getName());
+ assertEquals(labels, result.getMetadata().getLabels());
+ assertEquals(13, result.getSpec().getReplicas());
+ }
+
@Test
void deleteDeployment() {
Deployment de1 = new DeploymentBuilder().withNewMetadata().withNamespace("test").withName("de1")
@@ -162,6 +190,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:replaceDeployment")
+ .toF("kubernetes-deployments:///?kubernetesClient=#kubernetesClient&operation=replaceDeployment");
from("direct:scaleDeployment")
.toF("kubernetes-deployments:///?kubernetesClient=#kubernetesClient&operation=scaleDeployment");
}
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesHPAProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesHPAProducerTest.java
index ad381a809c8..01a4c3d5155 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesHPAProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesHPAProducerTest.java
@@ -126,6 +126,36 @@ public class KubernetesHPAProducerTest extends KubernetesTestSupport {
assertEquals(13, result.getSpec().getMinReplicas());
}
+ @Test
+ void replaceHPATest() {
+ Map<String, String> labels = Map.of("my.label.key", "my.label.value");
+ HorizontalPodAutoscalerSpec spec = new HorizontalPodAutoscalerSpecBuilder().withMinReplicas(13).build();
+ HorizontalPodAutoscaler hpa1 = new HorizontalPodAutoscalerBuilder().withNewMetadata().withName("hpa1")
+ .withNamespace("test").withLabels(labels).and()
+ .withSpec(spec).build();
+ server.expect().get().withPath("/apis/autoscaling/v1/namespaces/test/horizontalpodautoscalers/hpa1")
+ .andReturn(200, new HorizontalPodAutoscalerBuilder().withNewMetadata().withName("hpa1")
+ .withNamespace("test").endMetadata().build())
+ .once();
+ server.expect().put().withPath("/apis/autoscaling/v1/namespaces/test/horizontalpodautoscalers/hpa1")
+ .andReturn(200, hpa1)
+ .once();
+
+ Exchange ex = template.request("direct:replaceHPA", exchange -> {
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "test");
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_HPA_LABELS, labels);
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_HPA_NAME, "hpa1");
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_HPA_SPEC, spec);
+ });
+
+ HorizontalPodAutoscaler result = ex.getMessage().getBody(HorizontalPodAutoscaler.class);
+
+ assertEquals("test", result.getMetadata().getNamespace());
+ assertEquals("hpa1", result.getMetadata().getName());
+ assertEquals(labels, result.getMetadata().getLabels());
+ assertEquals(13, result.getSpec().getMinReplicas());
+ }
+
@Test
void deleteHPATest() {
HorizontalPodAutoscaler hpa1
@@ -153,6 +183,7 @@ public class KubernetesHPAProducerTest extends KubernetesTestSupport {
.to("kubernetes-hpa:///?kubernetesClient=#kubernetesClient&operation=listHPAByLabels");
from("direct:getHPA").to("kubernetes-hpa:///?kubernetesClient=#kubernetesClient&operation=getHPA");
from("direct:createHPA").to("kubernetes-hpa:///?kubernetesClient=#kubernetesClient&operation=createHPA");
+ from("direct:replaceHPA").to("kubernetes-hpa:///?kubernetesClient=#kubernetesClient&operation=replaceHPA");
from("direct:deleteHPA").to("kubernetes-hpa:///?kubernetesClient=#kubernetesClient&operation=deleteHPA");
}
};
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesJobProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesJobProducerTest.java
index 3e0b0ab134d..52696df1e0b 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesJobProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesJobProducerTest.java
@@ -20,6 +20,9 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import io.fabric8.kubernetes.api.model.LabelSelector;
+import io.fabric8.kubernetes.api.model.ObjectMeta;
+import io.fabric8.kubernetes.api.model.PodTemplateSpecBuilder;
import io.fabric8.kubernetes.api.model.batch.v1.Job;
import io.fabric8.kubernetes.api.model.batch.v1.JobBuilder;
import io.fabric8.kubernetes.api.model.batch.v1.JobListBuilder;
@@ -114,6 +117,36 @@ public class KubernetesJobProducerTest extends KubernetesTestSupport {
assertEquals(13, result.getSpec().getBackoffLimit());
}
+ @Test
+ void replaceJobTest() {
+ Map<String, String> labels = Map.of("my.label.key", "my.label.value");
+ JobSpec spec = new JobSpecBuilder().withBackoffLimit(13).withSelector(new LabelSelector())
+ .withTemplate(new PodTemplateSpecBuilder().build()).build();
+ Job j1 = new JobBuilder().withNewMetadata().withName("j1").withNamespace("test").withLabels(labels).and()
+ .withSpec(spec).build();
+ server.expect().get().withPath("/apis/batch/v1/namespaces/test/jobs/j1")
+ .andReturn(200, new JobBuilder().withNewMetadata().withName("j1").withNamespace("test").endMetadata()
+ .withSpec(new JobSpecBuilder()
+ .withTemplate(new PodTemplateSpecBuilder().withMetadata(new ObjectMeta()).build()).build())
+ .build())
+ .times(2);
+ server.expect().put().withPath("/apis/batch/v1/namespaces/test/jobs/j1").andReturn(200, j1).once();
+
+ Exchange ex = template.request("direct:replace", exchange -> {
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "test");
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_JOB_LABELS, labels);
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_JOB_NAME, "j1");
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_JOB_SPEC, spec);
+ });
+
+ Job result = ex.getMessage().getBody(Job.class);
+
+ assertEquals("test", result.getMetadata().getNamespace());
+ assertEquals("j1", result.getMetadata().getName());
+ assertEquals(labels, result.getMetadata().getLabels());
+ assertEquals(13, result.getSpec().getBackoffLimit());
+ }
+
@Test
void deleteJobTest() {
Job j1 = new JobBuilder().withNewMetadata().withName("j1").withNamespace("test").and().build();
@@ -139,6 +172,7 @@ public class KubernetesJobProducerTest extends KubernetesTestSupport {
from("direct:listByLabels").to("kubernetes-job:foo?operation=listJobByLabels");
from("direct:get").to("kubernetes-job:foo?operation=getJob");
from("direct:create").to("kubernetes-job:foo?operation=createJob");
+ from("direct:replace").to("kubernetes-job:foo?operation=replaceJob");
from("direct:delete").to("kubernetes-job:foo?operation=deleteJob");
}
};
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesNamespacesProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesNamespacesProducerTest.java
index 247e3c7f8eb..2b99a42a27d 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesNamespacesProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesNamespacesProducerTest.java
@@ -79,7 +79,26 @@ public class KubernetesNamespacesProducerTest extends KubernetesTestSupport {
server.expect().post().withPath("/api/v1/namespaces").andReturn(200, ns1).once();
Exchange ex = template.request("direct:createNamespace", exchange -> {
- exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "test");
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "ns1");
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_LABELS, labels);
+ });
+
+ Namespace result = ex.getMessage().getBody(Namespace.class);
+
+ assertEquals("ns1", result.getMetadata().getName());
+ assertEquals(labels, result.getMetadata().getLabels());
+ }
+
+ @Test
+ void replaceNamespace() {
+ Map<String, String> labels = Map.of("my.label.key", "my.label.value");
+ Namespace ns1 = new NamespaceBuilder().withNewMetadata().withName("ns1").withLabels(labels).endMetadata().build();
+ server.expect().get().withPath("/api/v1/namespaces/ns1")
+ .andReturn(200, new NamespaceBuilder().withNewMetadata().withName("ns1").endMetadata().build()).once();
+ server.expect().put().withPath("/api/v1/namespaces/ns1").andReturn(200, ns1).once();
+
+ Exchange ex = template.request("direct:replaceNamespace", exchange -> {
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "ns1");
exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_LABELS, labels);
});
@@ -111,6 +130,8 @@ public class KubernetesNamespacesProducerTest extends KubernetesTestSupport {
from("direct:getNs").to("kubernetes-namespaces:///?kubernetesClient=#kubernetesClient&operation=getNamespace");
from("direct:createNamespace")
.to("kubernetes-namespaces:///?kubernetesClient=#kubernetesClient&operation=createNamespace");
+ from("direct:replaceNamespace")
+ .to("kubernetes-namespaces:///?kubernetesClient=#kubernetesClient&operation=replaceNamespace");
from("direct:deleteNamespace")
.to("kubernetes-namespaces:///?kubernetesClient=#kubernetesClient&operation=deleteNamespace");
}
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 32de775f6b2..576fd3b1181 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
@@ -95,6 +95,28 @@ public class KubernetesNodesProducerTest extends KubernetesTestSupport {
assertEquals("test", result.getMetadata().getName());
}
+ @Test
+ void replaceNodeTest() {
+ ObjectMeta meta = new ObjectMeta();
+ meta.setName("test");
+ server.expect().get().withPath("/api/v1/nodes/test").andReturn(200, new NodeBuilder().build()).once();
+ server.expect().put().withPath("/api/v1/nodes/test").andReturn(200, new NodeBuilder().withMetadata(meta).build())
+ .once();
+ Exchange ex = template.request("direct:replaceNode", exchange -> {
+ Map<String, String> labels = new HashMap<>();
+ labels.put("key1", "value1");
+ labels.put("key2", "value2");
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NODES_LABELS, labels);
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NODE_NAME, "test");
+ NodeSpec spec = new NodeSpecBuilder().build();
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NODE_SPEC, spec);
+ });
+
+ Node result = ex.getMessage().getBody(Node.class);
+
+ assertEquals("test", result.getMetadata().getName());
+ }
+
@Test
void deleteNode() {
Node node1 = new NodeBuilder().withNewMetadata().withName("node1").withNamespace("test").and().build();
@@ -117,6 +139,7 @@ public class KubernetesNodesProducerTest extends KubernetesTestSupport {
from("direct:listByLabels")
.toF("kubernetes-nodes:///?kubernetesClient=#kubernetesClient&operation=listNodesByLabels");
from("direct:createNode").toF("kubernetes-nodes:///?kubernetesClient=#kubernetesClient&operation=createNode");
+ from("direct:replaceNode").toF("kubernetes-nodes:///?kubernetesClient=#kubernetesClient&operation=replaceNode");
from("direct:deleteNode").toF("kubernetes-nodes:///?kubernetesClient=#kubernetesClient&operation=deleteNode");
}
};
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesPersistentVolumesClaimsProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesPersistentVolumesClaimsProducerTest.java
index 00ded9191b3..ab2314c5d24 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesPersistentVolumesClaimsProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesPersistentVolumesClaimsProducerTest.java
@@ -106,6 +106,34 @@ public class KubernetesPersistentVolumesClaimsProducerTest extends KubernetesTes
assertEquals("SomeVolumeName", result.getSpec().getVolumeName());
}
+ @Test
+ void replacePersistentVolumeClaim() {
+ Map<String, String> labels = Map.of("my.label.key", "my.label.value");
+ PersistentVolumeClaimSpec spec = new PersistentVolumeClaimSpecBuilder().withVolumeName("SomeVolumeName").build();
+ PersistentVolumeClaim vc1 = new PersistentVolumeClaimBuilder().withNewMetadata().withName("vc1").withNamespace("test")
+ .withLabels(labels).and()
+ .withSpec(spec).build();
+ server.expect().get().withPath("/api/v1/namespaces/test/persistentvolumeclaims/vc1")
+ .andReturn(200, new PersistentVolumeClaimBuilder().withNewMetadata().withName("vc1").withNamespace("test")
+ .endMetadata().build())
+ .once();
+ server.expect().put().withPath("/api/v1/namespaces/test/persistentvolumeclaims/vc1").andReturn(200, vc1).once();
+
+ Exchange ex = template.request("direct:replace", exchange -> {
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "test");
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_PERSISTENT_VOLUMES_CLAIMS_LABELS, labels);
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_PERSISTENT_VOLUME_CLAIM_NAME, "vc1");
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_PERSISTENT_VOLUME_CLAIM_SPEC, spec);
+ });
+
+ PersistentVolumeClaim result = ex.getMessage().getBody(PersistentVolumeClaim.class);
+
+ assertEquals("test", result.getMetadata().getNamespace());
+ assertEquals("vc1", result.getMetadata().getName());
+ assertEquals(labels, result.getMetadata().getLabels());
+ assertEquals("SomeVolumeName", result.getSpec().getVolumeName());
+ }
+
@Test
void deletePersistentVolumeClaim() {
ObjectMeta meta = new ObjectMeta();
@@ -133,6 +161,8 @@ public class KubernetesPersistentVolumesClaimsProducerTest extends KubernetesTes
"kubernetes-persistent-volumes-claims:///?kubernetesClient=#kubernetesClient&operation=listPersistentVolumesClaimsByLabels");
from("direct:create").to(
"kubernetes-persistent-volumes-claims:///?kubernetesClient=#kubernetesClient&operation=createPersistentVolumeClaim");
+ from("direct:replace").to(
+ "kubernetes-persistent-volumes-claims:///?kubernetesClient=#kubernetesClient&operation=replacePersistentVolumeClaim");
from("direct:delete").to(
"kubernetes-persistent-volumes-claims:///?kubernetesClient=#kubernetesClient&operation=deletePersistentVolumeClaim");
}
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesPodsProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesPodsProducerTest.java
index 2533aaf7aa6..bfb957f3e8b 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesPodsProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesPodsProducerTest.java
@@ -122,6 +122,32 @@ public class KubernetesPodsProducerTest extends KubernetesTestSupport {
assertEquals("SomeHostname", result.getSpec().getHostname());
}
+ @Test
+ void replacePod() {
+ Map<String, String> labels = Map.of("my.label.key", "my.label.value");
+ PodSpec spec = new PodSpecBuilder().withHostname("SomeHostname").build();
+ Pod pod1 = new PodBuilder().withNewMetadata().withName("pod1").withNamespace("test").withLabels(labels).and()
+ .withSpec(spec).build();
+ server.expect().get().withPath("/api/v1/namespaces/test/pods/pod1")
+ .andReturn(200, new PodBuilder().withNewMetadata().withName("pod1").withNamespace("test").endMetadata().build())
+ .once();
+ server.expect().put().withPath("/api/v1/namespaces/test/pods/pod1").andReturn(200, pod1).once();
+
+ Exchange ex = template.request("direct:replacePod", exchange -> {
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "test");
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_PODS_LABELS, labels);
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_POD_NAME, "pod1");
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_POD_SPEC, spec);
+ });
+
+ Pod result = ex.getMessage().getBody(Pod.class);
+
+ assertEquals("test", result.getMetadata().getNamespace());
+ assertEquals("pod1", result.getMetadata().getName());
+ assertEquals(labels, result.getMetadata().getLabels());
+ assertEquals("SomeHostname", result.getSpec().getHostname());
+ }
+
@Test
void deletePod() {
Pod pod1 = new PodBuilder().withNewMetadata().withName("pod1").withNamespace("test").and().build();
@@ -147,6 +173,7 @@ public class KubernetesPodsProducerTest extends KubernetesTestSupport {
.to("kubernetes-pods:///?kubernetesClient=#kubernetesClient&operation=listPodsByLabels");
from("direct:getPod").to("kubernetes-pods:///?kubernetesClient=#kubernetesClient&operation=getPod");
from("direct:createPod").to("kubernetes-pods:///?kubernetesClient=#kubernetesClient&operation=createPod");
+ from("direct:replacePod").to("kubernetes-pods:///?kubernetesClient=#kubernetesClient&operation=replacePod");
from("direct:deletePod").to("kubernetes-pods:///?kubernetesClient=#kubernetesClient&operation=deletePod");
}
};
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 0061fcaf449..c3538678b59 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
@@ -122,6 +122,34 @@ public class KubernetesReplicationControllersProducerTest extends KubernetesTest
assertEquals(13, result.getSpec().getReplicas());
}
+ @Test
+ void replaceReplicationController() {
+ Map<String, String> labels = Map.of("my.label.key", "my.label.value");
+ ReplicationControllerSpec spec = new ReplicationControllerSpecBuilder().withReplicas(13).build();
+ ReplicationController rc1 = new ReplicationControllerBuilder().withNewMetadata().withName("rc1").withNamespace("test")
+ .withLabels(labels).and()
+ .withSpec(spec).build();
+ server.expect().get().withPath("/api/v1/namespaces/test/replicationcontrollers/rc1")
+ .andReturn(200, new ReplicationControllerBuilder().withNewMetadata().withName("rc1").withNamespace("test")
+ .endMetadata().build())
+ .once();
+ server.expect().put().withPath("/api/v1/namespaces/test/replicationcontrollers/rc1").andReturn(200, rc1).once();
+
+ Exchange ex = template.request("direct:replaceReplicationController", exchange -> {
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "test");
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_REPLICATION_CONTROLLERS_LABELS, labels);
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_REPLICATION_CONTROLLER_NAME, "rc1");
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_REPLICATION_CONTROLLER_SPEC, spec);
+ });
+
+ ReplicationController result = ex.getMessage().getBody(ReplicationController.class);
+
+ assertEquals("test", result.getMetadata().getNamespace());
+ assertEquals("rc1", result.getMetadata().getName());
+ assertEquals(labels, result.getMetadata().getLabels());
+ assertEquals(13, result.getSpec().getReplicas());
+ }
+
@Test
void deleteReplicationController() {
server.expect().withPath("/api/v1/namespaces/test/replicationcontrollers/repl1")
@@ -184,6 +212,8 @@ public class KubernetesReplicationControllersProducerTest extends KubernetesTest
"kubernetes-replication-controllers:///?kubernetesClient=#kubernetesClient&operation=scaleReplicationController");
from("direct:createReplicationController").to(
"kubernetes-replication-controllers:///?kubernetesClient=#kubernetesClient&operation=createReplicationController");
+ from("direct:replaceReplicationController").to(
+ "kubernetes-replication-controllers:///?kubernetesClient=#kubernetesClient&operation=replaceReplicationController");
from("direct:deleteReplicationController").to(
"kubernetes-replication-controllers:///?kubernetesClient=#kubernetesClient&operation=deleteReplicationController");
}
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesResourcesQuotaProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesResourcesQuotaProducerTest.java
index 4a0514169db..9834c295c9f 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesResourcesQuotaProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesResourcesQuotaProducerTest.java
@@ -83,6 +83,33 @@ public class KubernetesResourcesQuotaProducerTest extends KubernetesTestSupport
assertEquals(List.of("SomeScope"), result.getSpec().getScopes());
}
+ @Test
+ void replaceResourceQuota() {
+ Map<String, String> labels = Map.of("my.label.key", "my.label.value");
+ ResourceQuotaSpec spec = new ResourceQuotaSpecBuilder().withScopes("SomeScope").build();
+ ResourceQuota rq1
+ = new ResourceQuotaBuilder().withNewMetadata().withName("rq1").withNamespace("test").withLabels(labels).and()
+ .withSpec(spec).build();
+ server.expect().get().withPath("/api/v1/namespaces/test/resourcequotas/rq1").andReturn(200,
+ new ResourceQuotaBuilder().withNewMetadata().withName("rq1").withNamespace("test").endMetadata().build())
+ .once();
+ server.expect().put().withPath("/api/v1/namespaces/test/resourcequotas/rq1").andReturn(200, rq1).once();
+
+ Exchange ex = template.request("direct:replace", exchange -> {
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "test");
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_RESOURCES_QUOTA_LABELS, labels);
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_RESOURCES_QUOTA_NAME, "rq1");
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_RESOURCE_QUOTA_SPEC, spec);
+ });
+
+ ResourceQuota result = ex.getMessage().getBody(ResourceQuota.class);
+
+ assertEquals("test", result.getMetadata().getNamespace());
+ assertEquals("rq1", result.getMetadata().getName());
+ assertEquals(labels, result.getMetadata().getLabels());
+ assertEquals(List.of("SomeScope"), result.getSpec().getScopes());
+ }
+
@Test
void deleteResourceQuota() {
ResourceQuota rq1 = new ResourceQuotaBuilder().withNewMetadata().withName("rq1").withNamespace("test").and().build();
@@ -107,6 +134,8 @@ public class KubernetesResourcesQuotaProducerTest extends KubernetesTestSupport
.to("kubernetes-resources-quota:///?kubernetesClient=#kubernetesClient&operation=listResourcesQuota");
from("direct:create")
.to("kubernetes-resources-quota:///?kubernetesClient=#kubernetesClient&operation=createResourceQuota");
+ from("direct:replace")
+ .to("kubernetes-resources-quota:///?kubernetesClient=#kubernetesClient&operation=replaceResourceQuota");
from("direct:delete")
.to("kubernetes-resources-quota:///?kubernetesClient=#kubernetesClient&operation=deleteResourceQuota");
}
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesSecretsProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesSecretsProducerTest.java
index f83c45cd87d..f2257bfae5c 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesSecretsProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesSecretsProducerTest.java
@@ -107,6 +107,23 @@ public class KubernetesSecretsProducerTest extends KubernetesTestSupport {
assertEquals("sc1", result.getMetadata().getName());
}
+ @Test
+ void replaceSecret() {
+ Secret sc1 = new SecretBuilder().withNewMetadata().withName("sc1").withNamespace("test").and().build();
+ server.expect().get().withPath("/api/v1/namespaces/test/secrets/sc1").andReturn(200, sc1).once();
+ server.expect().put().withPath("/api/v1/namespaces/test/secrets/sc1").andReturn(200, sc1).once();
+
+ Exchange ex = template.request("direct:replace", exchange -> {
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "test");
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_SECRET, sc1);
+ });
+
+ Secret result = ex.getMessage().getBody(Secret.class);
+
+ assertEquals("test", result.getMetadata().getNamespace());
+ assertEquals("sc1", result.getMetadata().getName());
+ }
+
@Test
void deleteSecret() {
Secret sc1 = new SecretBuilder().withNewMetadata().withName("sc1").withNamespace("test").and().build();
@@ -132,6 +149,7 @@ public class KubernetesSecretsProducerTest extends KubernetesTestSupport {
.to("kubernetes-secrets:///?kubernetesClient=#kubernetesClient&operation=listSecretsByLabels");
from("direct:get").to("kubernetes-secrets:///?kubernetesClient=#kubernetesClient&operation=getSecret");
from("direct:create").to("kubernetes-secrets:///?kubernetesClient=#kubernetesClient&operation=createSecret");
+ from("direct:replace").to("kubernetes-secrets:///?kubernetesClient=#kubernetesClient&operation=replaceSecret");
from("direct:delete").to("kubernetes-secrets:///?kubernetesClient=#kubernetesClient&operation=deleteSecret");
}
};
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesServiceAccountsProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesServiceAccountsProducerTest.java
index 833a72cfca5..96e3880677a 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesServiceAccountsProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesServiceAccountsProducerTest.java
@@ -93,6 +93,23 @@ public class KubernetesServiceAccountsProducerTest extends KubernetesTestSupport
assertEquals("sa1", result.getMetadata().getName());
}
+ @Test
+ void replaceServiceAccount() {
+ ServiceAccount sa1 = new ServiceAccountBuilder().withNewMetadata().withName("sa1").withNamespace("test").and().build();
+ server.expect().get().withPath("/api/v1/namespaces/test/serviceaccounts/sa1").andReturn(200, sa1).once();
+ server.expect().put().withPath("/api/v1/namespaces/test/serviceaccounts/sa1").andReturn(200, sa1).once();
+
+ Exchange ex = template.request("direct:replace", exchange -> {
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "test");
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_SERVICE_ACCOUNT, sa1);
+ });
+
+ ServiceAccount result = ex.getMessage().getBody(ServiceAccount.class);
+
+ assertEquals("test", result.getMetadata().getNamespace());
+ assertEquals("sa1", result.getMetadata().getName());
+ }
+
@Test
void deleteServiceAccount() {
ServiceAccount sa1 = new ServiceAccountBuilder().withNewMetadata().withName("sa1").withNamespace("test").and().build();
@@ -119,6 +136,8 @@ public class KubernetesServiceAccountsProducerTest extends KubernetesTestSupport
"kubernetes-service-accounts:///?kubernetesClient=#kubernetesClient&operation=listServiceAccountsByLabels");
from("direct:create").to(
"kubernetes-service-accounts:///?kubernetesClient=#kubernetesClient&operation=createServiceAccount");
+ from("direct:replace").to(
+ "kubernetes-service-accounts:///?kubernetesClient=#kubernetesClient&operation=replaceServiceAccount");
from("direct:delete").to(
"kubernetes-service-accounts:///?kubernetesClient=#kubernetesClient&operation=deleteServiceAccount");
}
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesServicesProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesServicesProducerTest.java
index 9c981ccb341..e6753286747 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesServicesProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesServicesProducerTest.java
@@ -115,6 +115,33 @@ public class KubernetesServicesProducerTest extends KubernetesTestSupport {
assertEquals("SomeClusterIp", result.getSpec().getClusterIP());
}
+ @Test
+ void replaceService() {
+ Map<String, String> labels = Map.of("my.label.key", "my.label.value");
+ ServiceSpec spec = new ServiceSpecBuilder().withExternalName("SomeExternalName").build();
+ Service se1 = new ServiceBuilder().withNewMetadata().withName("se1").withNamespace("test").withLabels(labels).and()
+ .withSpec(spec).build();
+ server.expect().get().withPath("/api/v1/namespaces/test/services/se1")
+ .andReturn(200, new ServiceBuilder().withNewMetadata().withName("se1").withNamespace("test").and()
+ .withSpec(new ServiceSpecBuilder().withClusterIP("SomeClusterIp").build()).build())
+ .times(2);
+ server.expect().put().withPath("/api/v1/namespaces/test/services/se1").andReturn(200, se1).once();
+
+ Exchange ex = template.request("direct:replaceService", exchange -> {
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "test");
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_SERVICE_LABELS, labels);
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_SERVICE_NAME, "se1");
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_SERVICE_SPEC, spec);
+ });
+
+ Service result = ex.getMessage().getBody(Service.class);
+
+ assertEquals("test", result.getMetadata().getNamespace());
+ assertEquals("se1", result.getMetadata().getName());
+ assertEquals(labels, result.getMetadata().getLabels());
+ assertEquals("SomeExternalName", result.getSpec().getExternalName());
+ }
+
@Test
void deleteService() {
Service se1 = new ServiceBuilder().withNewMetadata().withName("se1").withNamespace("test").and().build();
@@ -143,6 +170,8 @@ public class KubernetesServicesProducerTest extends KubernetesTestSupport {
.to("kubernetes-services:///?kubernetesClient=#kubernetesClient&operation=getService");
from("direct:createService")
.to("kubernetes-services:///?kubernetesClient=#kubernetesClient&operation=createService");
+ from("direct:replaceService")
+ .to("kubernetes-services:///?kubernetesClient=#kubernetesClient&operation=replaceService");
from("direct:deleteService")
.to("kubernetes-services:///?kubernetesClient=#kubernetesClient&operation=deleteService");
}
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/openshift/producer/OpenshiftDeploymentConfigsProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/openshift/producer/OpenshiftDeploymentConfigsProducerTest.java
index 1c39736a182..dc0ac67024b 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/openshift/producer/OpenshiftDeploymentConfigsProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/openshift/producer/OpenshiftDeploymentConfigsProducerTest.java
@@ -83,9 +83,10 @@ public class OpenshiftDeploymentConfigsProducerTest extends KubernetesTestSuppor
Map<String, String> labels = Map.of("my.label.key", "my.label.value");
DeploymentConfigSpec spec = new DeploymentConfigSpecBuilder().withReplicas(13).build();
DeploymentConfig de1
- = new DeploymentConfigBuilder().withNewMetadata().withName("de1").withNamespace("test").withLabels(labels).and()
- .withSpec(spec).build();
- server.expect().post().withPath("/apis/apps.openshift.io/v1/namespaces/test/deploymentconfigs").andReturn(200, de1).once();
+ = new DeploymentConfigBuilder().withNewMetadata().withName("de1").withNamespace("test").withLabels(labels).and()
+ .withSpec(spec).build();
+ server.expect().post().withPath("/apis/apps.openshift.io/v1/namespaces/test/deploymentconfigs").andReturn(200, de1)
+ .once();
Exchange ex = template.request("direct:create", exchange -> {
exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "test");
@@ -102,6 +103,34 @@ public class OpenshiftDeploymentConfigsProducerTest extends KubernetesTestSuppor
assertEquals(13, result.getSpec().getReplicas());
}
+ @Test
+ void replaceDeploymentConfig() {
+ Map<String, String> labels = Map.of("my.label.key", "my.label.value");
+ DeploymentConfigSpec spec = new DeploymentConfigSpecBuilder().withReplicas(13).build();
+ DeploymentConfig de1
+ = new DeploymentConfigBuilder().withNewMetadata().withName("de1").withNamespace("test").withLabels(labels).and()
+ .withSpec(spec).build();
+ server.expect().get().withPath("/apis/apps.openshift.io/v1/namespaces/test/deploymentconfigs/de1").andReturn(200,
+ new DeploymentConfigBuilder().withNewMetadata().withName("de1").withNamespace("test").endMetadata().build())
+ .once();
+ server.expect().put().withPath("/apis/apps.openshift.io/v1/namespaces/test/deploymentconfigs/de1").andReturn(200, de1)
+ .once();
+
+ Exchange ex = template.request("direct:replace", exchange -> {
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "test");
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_DEPLOYMENTS_LABELS, labels);
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_DEPLOYMENT_NAME, "de1");
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_DEPLOYMENT_CONFIG_SPEC, spec);
+ });
+
+ DeploymentConfig result = ex.getMessage().getBody(DeploymentConfig.class);
+
+ assertEquals("test", result.getMetadata().getNamespace());
+ assertEquals("de1", result.getMetadata().getName());
+ assertEquals(labels, result.getMetadata().getLabels());
+ assertEquals(13, result.getSpec().getReplicas());
+ }
+
@Test
void deleteDeploymentConfig() {
DeploymentConfig de1 = new DeploymentConfigBuilder().withNewMetadata().withNamespace("test").withName("dc1")
@@ -162,6 +191,8 @@ public class OpenshiftDeploymentConfigsProducerTest extends KubernetesTestSuppor
.toF("openshift-deploymentconfigs:///?kubernetesClient=#kubernetesClient&operation=listDeploymentConfigsByLabels");
from("direct:create")
.toF("openshift-deploymentconfigs:///?kubernetesClient=#kubernetesClient&operation=createDeploymentConfig");
+ from("direct:replace")
+ .toF("openshift-deploymentconfigs:///?kubernetesClient=#kubernetesClient&operation=replaceDeploymentConfig");
from("direct:delete")
.toF("openshift-deploymentconfigs:///?kubernetesClient=#kubernetesClient&operation=deleteDeploymentConfig");
from("direct:scale")