This is an automated email from the ASF dual-hosted git repository.
acosentino pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new bbfc9057f35 CAMEL-21107 - Camel-Kubernetes: Add ability to add
annotation to create resources operation - Secrets (#15377)
bbfc9057f35 is described below
commit bbfc9057f35b35d149a5daf13efe70112d41ee87
Author: Andrea Cosentino <[email protected]>
AuthorDate: Fri Aug 30 12:20:28 2024 +0200
CAMEL-21107 - Camel-Kubernetes: Add ability to add annotation to create
resources operation - Secrets (#15377)
* CAMEL-21107 - Camel-Kubernetes: Add ability to add annotation to create
resources operation - Secrets
Signed-off-by: Andrea Cosentino <[email protected]>
* CAMEL-21107 - Camel-Kubernetes: Add ability to add annotation to create
resources operation - Secrets
Signed-off-by: Andrea Cosentino <[email protected]>
---------
Signed-off-by: Andrea Cosentino <[email protected]>
---
.../catalog/components/kubernetes-secrets.json | 3 ++-
.../kubernetes/secrets/kubernetes-secrets.json | 3 ++-
.../component/kubernetes/KubernetesConstants.java | 3 +++
.../secrets/KubernetesSecretsProducer.java | 6 ++++++
.../producer/KubernetesSecretsProducerTest.java | 25 ++++++++++++++++++++++
.../KubernetesSecretsEndpointBuilderFactory.java | 12 +++++++++++
6 files changed, 50 insertions(+), 2 deletions(-)
diff --git
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/kubernetes-secrets.json
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/kubernetes-secrets.json
index ea82a5dd4e7..52933b1ace2 100644
---
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/kubernetes-secrets.json
+++
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/kubernetes-secrets.json
@@ -32,7 +32,8 @@
"CamelKubernetesNamespaceName": { "index": 1, "kind": "header",
"displayName": "", "group": "producer", "label": "producer", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The namespace name", "constantName":
"org.apache.camel.component.kubernetes.KubernetesConstants#KUBERNETES_NAMESPACE_NAME"
},
"CamelKubernetesSecretsLabels": { "index": 2, "kind": "header",
"displayName": "", "group": "producer", "label": "producer", "required": false,
"javaType": "Map<String, String>", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "description": "The secret labels",
"constantName":
"org.apache.camel.component.kubernetes.KubernetesConstants#KUBERNETES_SECRETS_LABELS"
},
"CamelKubernetesSecretName": { "index": 3, "kind": "header",
"displayName": "", "group": "producer", "label": "producer", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The secret name", "constantName":
"org.apache.camel.component.kubernetes.KubernetesConstants#KUBERNETES_SECRET_NAME"
},
- "CamelKubernetesSecret": { "index": 4, "kind": "header", "displayName":
"", "group": "producer", "label": "producer", "required": false, "javaType":
"io.fabric8.kubernetes.api.model.Secret", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "description": "A
secret object", "constantName":
"org.apache.camel.component.kubernetes.KubernetesConstants#KUBERNETES_SECRET" }
+ "CamelKubernetesSecret": { "index": 4, "kind": "header", "displayName":
"", "group": "producer", "label": "producer", "required": false, "javaType":
"io.fabric8.kubernetes.api.model.Secret", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "description": "A
secret object", "constantName":
"org.apache.camel.component.kubernetes.KubernetesConstants#KUBERNETES_SECRET" },
+ "CamelKubernetesSecretsAnnotations": { "index": 5, "kind": "header",
"displayName": "", "group": "producer", "label": "producer", "required": false,
"javaType": "Map<String, String>", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "description": "The secret annotations",
"constantName":
"org.apache.camel.component.kubernetes.KubernetesConstants#KUBERNETES_SECRETS_ANNOTATIONS"
}
},
"properties": {
"masterUrl": { "index": 0, "kind": "path", "displayName": "Master Url",
"group": "producer", "label": "", "required": true, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.kubernetes.KubernetesConfiguration",
"configurationField": "configuration", "description": "URL to a remote
Kubernetes API server. This should only be used when your Camel application
[...]
diff --git
a/components/camel-kubernetes/src/generated/resources/META-INF/org/apache/camel/component/kubernetes/secrets/kubernetes-secrets.json
b/components/camel-kubernetes/src/generated/resources/META-INF/org/apache/camel/component/kubernetes/secrets/kubernetes-secrets.json
index ea82a5dd4e7..52933b1ace2 100644
---
a/components/camel-kubernetes/src/generated/resources/META-INF/org/apache/camel/component/kubernetes/secrets/kubernetes-secrets.json
+++
b/components/camel-kubernetes/src/generated/resources/META-INF/org/apache/camel/component/kubernetes/secrets/kubernetes-secrets.json
@@ -32,7 +32,8 @@
"CamelKubernetesNamespaceName": { "index": 1, "kind": "header",
"displayName": "", "group": "producer", "label": "producer", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The namespace name", "constantName":
"org.apache.camel.component.kubernetes.KubernetesConstants#KUBERNETES_NAMESPACE_NAME"
},
"CamelKubernetesSecretsLabels": { "index": 2, "kind": "header",
"displayName": "", "group": "producer", "label": "producer", "required": false,
"javaType": "Map<String, String>", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "description": "The secret labels",
"constantName":
"org.apache.camel.component.kubernetes.KubernetesConstants#KUBERNETES_SECRETS_LABELS"
},
"CamelKubernetesSecretName": { "index": 3, "kind": "header",
"displayName": "", "group": "producer", "label": "producer", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The secret name", "constantName":
"org.apache.camel.component.kubernetes.KubernetesConstants#KUBERNETES_SECRET_NAME"
},
- "CamelKubernetesSecret": { "index": 4, "kind": "header", "displayName":
"", "group": "producer", "label": "producer", "required": false, "javaType":
"io.fabric8.kubernetes.api.model.Secret", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "description": "A
secret object", "constantName":
"org.apache.camel.component.kubernetes.KubernetesConstants#KUBERNETES_SECRET" }
+ "CamelKubernetesSecret": { "index": 4, "kind": "header", "displayName":
"", "group": "producer", "label": "producer", "required": false, "javaType":
"io.fabric8.kubernetes.api.model.Secret", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "description": "A
secret object", "constantName":
"org.apache.camel.component.kubernetes.KubernetesConstants#KUBERNETES_SECRET" },
+ "CamelKubernetesSecretsAnnotations": { "index": 5, "kind": "header",
"displayName": "", "group": "producer", "label": "producer", "required": false,
"javaType": "Map<String, String>", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "description": "The secret annotations",
"constantName":
"org.apache.camel.component.kubernetes.KubernetesConstants#KUBERNETES_SECRETS_ANNOTATIONS"
}
},
"properties": {
"masterUrl": { "index": 0, "kind": "path", "displayName": "Master Url",
"group": "producer", "label": "", "required": true, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.kubernetes.KubernetesConfiguration",
"configurationField": "configuration", "description": "URL to a remote
Kubernetes API server. This should only be used when your Camel application
[...]
diff --git
a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/KubernetesConstants.java
b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/KubernetesConstants.java
index dad4a517e7b..45726956f0c 100644
---
a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/KubernetesConstants.java
+++
b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/KubernetesConstants.java
@@ -135,6 +135,9 @@ public final class KubernetesConstants {
@Metadata(label = "producer", description = "A secret object", javaType =
"io.fabric8.kubernetes.api.model.Secret",
applicableFor = SCHEME_SECRETS)
public static final String KUBERNETES_SECRET = "CamelKubernetesSecret";
+ @Metadata(label = "producer", description = "The secret annotations",
javaType = "Map<String, String>",
+ applicableFor = SCHEME_SECRETS)
+ public static final String KUBERNETES_SECRETS_ANNOTATIONS =
"CamelKubernetesSecretsAnnotations";
@Metadata(label = "producer", description = "The resource quota labels",
javaType = "Map<String, String>",
applicableFor = SCHEME_RESOURCES_QUOTA)
public static final String KUBERNETES_RESOURCES_QUOTA_LABELS =
"CamelKubernetesResourcesQuotaLabels";
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 f811d4dd174..9328ebd8b1b 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
@@ -16,6 +16,7 @@
*/
package org.apache.camel.component.kubernetes.secrets;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
@@ -138,6 +139,8 @@ public class KubernetesSecretsProducer extends
DefaultProducer {
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);
+ HashMap<String, String> secretAnnotations
+ =
exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_SECRETS_ANNOTATIONS,
HashMap.class);
if (ObjectHelper.isEmpty(namespaceName)) {
LOG.error("{} a specific secret require specify a namespace name",
operationName);
throw new IllegalArgumentException(
@@ -148,6 +151,9 @@ public class KubernetesSecretsProducer extends
DefaultProducer {
throw new IllegalArgumentException(
String.format("%s a specific secret require specify a
secret bean", operationName));
}
+ if (ObjectHelper.isNotEmpty(secretAnnotations)) {
+ secretToCreate.getMetadata().setAnnotations(secretAnnotations);
+ }
Secret secret
= operation.apply(
getEndpoint().getKubernetesClient().secrets().inNamespace(namespaceName).resource(secretToCreate));
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 d175f855054..a8afce45a87 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,29 @@ public class KubernetesSecretsProducerTest extends
KubernetesTestSupport {
assertEquals("sc1", result.getMetadata().getName());
}
+ @Test
+ void createSecretWithAnnotations() {
+ HashMap<String, String> annotations = new HashMap<>();
+ annotations.put("environment", "prod");
+ annotations.put("version", "v3");
+
+ Secret sc1 = new
SecretBuilder().withNewMetadata().withName("sc1").withNamespace("test").withAnnotations(annotations)
+ .and().build();
+
server.expect().post().withPath("/api/v1/namespaces/test/secrets").andReturn(200,
sc1).once();
+
+ Exchange ex = template.request("direct:createWithAnnotations",
exchange -> {
+
exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME,
"test");
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_SECRET,
sc1);
+
exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_SECRETS_ANNOTATIONS,
annotations);
+ });
+
+ Secret result = ex.getMessage().getBody(Secret.class);
+
+ assertEquals("test", result.getMetadata().getNamespace());
+ assertEquals("sc1", result.getMetadata().getName());
+ assertEquals(annotations, result.getMetadata().getAnnotations());
+ }
+
@Test
void updateSecret() {
Secret sc1 = new
SecretBuilder().withNewMetadata().withName("sc1").withNamespace("test").and().build();
@@ -149,6 +172,8 @@ 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:createWithAnnotations")
+
.to("kubernetes-secrets:///?kubernetesClient=#kubernetesClient&operation=createSecret");
from("direct:update").to("kubernetes-secrets:///?kubernetesClient=#kubernetesClient&operation=updateSecret");
from("direct:delete").to("kubernetes-secrets:///?kubernetesClient=#kubernetesClient&operation=deleteSecret");
}
diff --git
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/KubernetesSecretsEndpointBuilderFactory.java
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/KubernetesSecretsEndpointBuilderFactory.java
index 556ddf48040..2b45a1f5932 100644
---
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/KubernetesSecretsEndpointBuilderFactory.java
+++
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/KubernetesSecretsEndpointBuilderFactory.java
@@ -571,6 +571,18 @@ public interface KubernetesSecretsEndpointBuilderFactory {
public String kubernetesSecret() {
return "CamelKubernetesSecret";
}
+ /**
+ * The secret annotations.
+ *
+ * The option is a: {@code Map<String, String>} type.
+ *
+ * Group: producer
+ *
+ * @return the name of the header {@code KubernetesSecretsAnnotations}.
+ */
+ public String kubernetesSecretsAnnotations() {
+ return "CamelKubernetesSecretsAnnotations";
+ }
}
static KubernetesSecretsEndpointBuilder endpointBuilder(String
componentName, String path) {
class KubernetesSecretsEndpointBuilderImpl extends
AbstractEndpointBuilder implements KubernetesSecretsEndpointBuilder,
AdvancedKubernetesSecretsEndpointBuilder {