This is an automated email from the ASF dual-hosted git repository. gfournier pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel.git
commit 0f386e98d186e6618ed8e41a814ea1bfda77a007 Author: Gaelle Fournier <gaelle.fournier.w...@gmail.com> AuthorDate: Wed Oct 2 16:27:13 2024 +0200 CAMEL-21295: Add Knative Trigger filter to camel-jbang-kubernetes plugin --- .../kubernetes/traits/knative/KnativeTrait.java | 41 ++++++++++++---------- .../commands/kubernetes/traits/model/Knative.java | 12 +++---- .../kubernetes/KubernetesExportKnativeTest.java | 5 ++- 3 files changed, 32 insertions(+), 26 deletions(-) diff --git a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/traits/knative/KnativeTrait.java b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/traits/knative/KnativeTrait.java index 929d649ce09..3935597dc9e 100644 --- a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/traits/knative/KnativeTrait.java +++ b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/traits/knative/KnativeTrait.java @@ -38,6 +38,7 @@ import io.fabric8.knative.internal.pkg.apis.duck.v1.KReferenceBuilder; import io.fabric8.knative.internal.pkg.tracker.ReferenceBuilder; import io.fabric8.knative.messaging.v1.SubscriptionBuilder; import io.fabric8.knative.sources.v1.SinkBindingBuilder; +import org.apache.camel.RuntimeCamelException; import org.apache.camel.dsl.jbang.core.commands.kubernetes.KubernetesHelper; import org.apache.camel.dsl.jbang.core.commands.kubernetes.support.SourceMetadata; import org.apache.camel.dsl.jbang.core.commands.kubernetes.traits.ServiceTrait; @@ -119,7 +120,7 @@ public class KnativeTrait extends KnativeBaseTrait { Knative knativeTrait = Optional.ofNullable(traitConfig.getKnative()).orElseGet(Knative::new); configureChannels(knativeTrait, context); - configureEndpoints(knativeTrait, context); + configureEndpoints(knativeTrait); configureEvents(knativeTrait, context); if (knativeTrait.getSinkBinding() != null && knativeTrait.getSinkBinding()) { @@ -145,7 +146,7 @@ public class KnativeTrait extends KnativeBaseTrait { private void configureChannels(Knative knativeTrait, TraitContext context) { for (String uri : knativeTrait.getChannelSources()) { - createSubscription(toKnativeUri(KnativeResourceType.CHANNEL, uri), knativeTrait, context); + createSubscription(toKnativeUri(KnativeResourceType.CHANNEL, uri), context); } for (String uri : knativeTrait.getChannelSinks()) { @@ -161,7 +162,7 @@ public class KnativeTrait extends KnativeBaseTrait { } } - private void configureEndpoints(Knative knativeTrait, TraitContext context) { + private void configureEndpoints(Knative knativeTrait) { for (String uri : knativeTrait.getEndpointSources()) { String endpointName = extractKnativeResource(uri); addKnativeResourceConfiguration(new KnativeResourceConfiguration( @@ -207,7 +208,7 @@ public class KnativeTrait extends KnativeBaseTrait { } } - private void createSubscription(String uri, Knative knativeTrait, TraitContext context) { + private void createSubscription(String uri, TraitContext context) { String channelName = extractKnativeResource(uri); String subscriptionName = createSubscriptionName(context.getName(), channelName); @@ -286,21 +287,23 @@ public class KnativeTrait extends KnativeBaseTrait { private Map<String, String> getFilterAttributes(Knative knativeTrait, String eventType) { Map<String, String> filterAttributes = new HashMap<>(); - filterAttributes.put("type", eventType); - - // TODO: use this as soon as new Camel K CRD model has been released - // for (String filterExpression : knativeTrait.getFilters()) { - // String[] keyValue = filterExpression.split("=", 2); - // if (keyValue.length != 2) { - // throw new RuntimeCamelException("Invalid Knative trigger filter expression: %s".formatted(filterExpression)); - // } - // filterAttributes.put(keyValue[0].trim(), keyValue[1].trim()); - // } - // - // if (!filterAttributes.containsKey("type") && Optional.ofNullable(knativeTrait.getFilterEventType()).orElse(true) && ObjectHelper.isNotEmpty(eventType)) { - // // Apply default trigger filter attribute for the event type - // filterAttributes.put("type", eventType); - // } + + if (knativeTrait.getFilters() != null) { + for (String filterExpression : knativeTrait.getFilters()) { + String[] keyValue = filterExpression.split("=", 2); + if (keyValue.length != 2) { + throw new RuntimeCamelException( + "Invalid Knative trigger filter expression: %s".formatted(filterExpression)); + } + filterAttributes.put(keyValue[0].trim(), keyValue[1].trim()); + } + } + + if (!filterAttributes.containsKey("type") && Optional.ofNullable(knativeTrait.getFilterEventType()).orElse(true) + && ObjectHelper.isNotEmpty(eventType)) { + // Apply default trigger filter attribute for the event type + filterAttributes.put("type", eventType); + } return filterAttributes; } diff --git a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/traits/model/Knative.java b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/traits/model/Knative.java index 3410f64b3be..71ec3cc806f 100644 --- a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/traits/model/Knative.java +++ b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/traits/model/Knative.java @@ -28,7 +28,7 @@ import com.fasterxml.jackson.annotation.Nulls; @JsonInclude(JsonInclude.Include.NON_NULL) @JsonPropertyOrder({ - "auto", "channelSinks", "channelSources", "config", "enabled", "endpointSinks", "endpointSources", + "auto", "channelSinks", "channelSources", "configuration", "enabled", "endpointSinks", "endpointSources", "eventSinks", "eventSources", "filterEventType", "filterSourceChannels", "filters", "namespaceLabel", "sinkBinding" }) public class Knative { @JsonProperty("auto") @@ -50,7 +50,7 @@ public class Knative { @JsonPropertyDescription("Can be used to inject a Knative complete configuration in JSON format.") @JsonSetter( nulls = Nulls.SKIP) - private String config; + private String configuration; @JsonProperty("enabled") @JsonPropertyDescription("Can be used to enable or disable a trait. All traits share this common property.") @JsonSetter( @@ -129,12 +129,12 @@ public class Knative { this.channelSources = channelSources; } - public String getConfig() { - return this.config; + public String getConfiguration() { + return this.configuration; } - public void setConfig(String config) { - this.config = config; + public void setConfiguration(String configuration) { + this.configuration = configuration; } public Boolean getEnabled() { diff --git a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExportKnativeTest.java b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExportKnativeTest.java index e06ac35976a..36282cf07b4 100644 --- a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExportKnativeTest.java +++ b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExportKnativeTest.java @@ -92,6 +92,8 @@ public class KubernetesExportKnativeTest extends KubernetesExportBaseTest { public void shouldAddKnativeTrigger(RuntimeType rt) throws Exception { KubernetesExport command = createCommand(new String[] { "classpath:knative-event-source.yaml" }, "--image-group=camel-test", "--runtime=" + rt.runtime()); + command.traits = new String[] { + "knative.filters=source=my-source" }; command.doCall(); Assertions.assertTrue(hasService(rt)); @@ -102,8 +104,9 @@ public class KubernetesExportKnativeTest extends KubernetesExportBaseTest { Assertions.assertEquals("my-broker-knative-event-source-camel-event", trigger.getMetadata().getName()); Assertions.assertEquals("my-broker", trigger.getSpec().getBroker()); - Assertions.assertEquals(1, trigger.getSpec().getFilter().getAttributes().size()); + Assertions.assertEquals(2, trigger.getSpec().getFilter().getAttributes().size()); Assertions.assertEquals("camel-event", trigger.getSpec().getFilter().getAttributes().get("type")); + Assertions.assertEquals("my-source", trigger.getSpec().getFilter().getAttributes().get("source")); Assertions.assertEquals("knative-event-source", trigger.getSpec().getSubscriber().getRef().getName()); Assertions.assertEquals("Service", trigger.getSpec().getSubscriber().getRef().getKind()); Assertions.assertEquals("v1", trigger.getSpec().getSubscriber().getRef().getApiVersion());