This is an automated email from the ASF dual-hosted git repository.

squakez pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-k.git

commit 966f6ccfa94b95ff2efb275c921e9c049438fede
Author: Keerthan <[email protected]>
AuthorDate: Mon Sep 28 19:11:26 2026 +0530

    Fix #5935: Use applyToCrNames in ArkMQ address spec and e2e setup
---
 e2e/arkmq/setup/queue.yaml                         |  3 +-
 pkg/apis/duck/arkmq/v1beta1/duck_types.go          |  8 +-
 .../duck/arkmq/v1beta1/zz_generated.deepcopy.go    |  7 +-
 pkg/util/bindings/arkmq.go                         |  7 +-
 pkg/util/bindings/arkmq_test.go                    | 89 ++++++++++++++++++++--
 5 files changed, 100 insertions(+), 14 deletions(-)

diff --git a/e2e/arkmq/setup/queue.yaml b/e2e/arkmq/setup/queue.yaml
index 1c7852235..0a0b48190 100644
--- a/e2e/arkmq/setup/queue.yaml
+++ b/e2e/arkmq/setup/queue.yaml
@@ -23,4 +23,5 @@ spec:
   addressName: my-queue
   queueName: my-queue
   routingType: anycast
-  applyTo: my-broker
+  applyToCrNames:
+  - my-broker
diff --git a/pkg/apis/duck/arkmq/v1beta1/duck_types.go 
b/pkg/apis/duck/arkmq/v1beta1/duck_types.go
index c8ac3fa8a..e7e979f4e 100644
--- a/pkg/apis/duck/arkmq/v1beta1/duck_types.go
+++ b/pkg/apis/duck/arkmq/v1beta1/duck_types.go
@@ -43,10 +43,10 @@ type ActiveMQArtemisAddress struct {
 
 // ActiveMQArtemisAddressSpec is the duck of an ActiveMQArtemisAddress spec.
 type ActiveMQArtemisAddressSpec struct {
-       AddressName string `json:"addressName,omitempty"`
-       QueueName   string `json:"queueName,omitempty"`
-       RoutingType string `json:"routingType,omitempty"`
-       ApplyTo     string `json:"applyTo,omitempty"`
+       AddressName    string   `json:"addressName,omitempty"`
+       QueueName      string   `json:"queueName,omitempty"`
+       RoutingType    string   `json:"routingType,omitempty"`
+       ApplyToCrNames []string `json:"applyToCrNames,omitempty"`
 }
 
 // +kubebuilder:object:root=true
diff --git a/pkg/apis/duck/arkmq/v1beta1/zz_generated.deepcopy.go 
b/pkg/apis/duck/arkmq/v1beta1/zz_generated.deepcopy.go
index 5003285b0..4c21dfce8 100644
--- a/pkg/apis/duck/arkmq/v1beta1/zz_generated.deepcopy.go
+++ b/pkg/apis/duck/arkmq/v1beta1/zz_generated.deepcopy.go
@@ -40,7 +40,7 @@ func (in *ActiveMQArtemisAddress) DeepCopyInto(out 
*ActiveMQArtemisAddress) {
        *out = *in
        out.TypeMeta = in.TypeMeta
        in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-       out.Spec = in.Spec
+       in.Spec.DeepCopyInto(&out.Spec)
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, 
creating a new ActiveMQArtemisAddress.
@@ -96,6 +96,11 @@ func (in *ActiveMQArtemisAddressList) DeepCopyObject() 
runtime.Object {
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, 
writing into out. in must be non-nil.
 func (in *ActiveMQArtemisAddressSpec) DeepCopyInto(out 
*ActiveMQArtemisAddressSpec) {
        *out = *in
+       if in.ApplyToCrNames != nil {
+               in, out := &in.ApplyToCrNames, &out.ApplyToCrNames
+               *out = make([]string, len(*in))
+               copy(*out, *in)
+       }
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, 
creating a new ActiveMQArtemisAddressSpec.
diff --git a/pkg/util/bindings/arkmq.go b/pkg/util/bindings/arkmq.go
index ff5188b23..0ecce5a0b 100644
--- a/pkg/util/bindings/arkmq.go
+++ b/pkg/util/bindings/arkmq.go
@@ -209,7 +209,10 @@ func normalizeBrokerURL(url string) string {
 }
 
 func (a ArkMQBindingProvider) lookupBrokerURL(ctx BindingContext, address 
*arkmqv1beta1.ActiveMQArtemisAddress, endpoint camelv1.Endpoint) (string, 
error) {
-       clusterName := address.Spec.ApplyTo
+       clusterName := ""
+       if len(address.Spec.ApplyToCrNames) > 0 && 
address.Spec.ApplyToCrNames[0] != "" && address.Spec.ApplyToCrNames[0] != "*" {
+               clusterName = address.Spec.ApplyToCrNames[0]
+       }
        if clusterName == "" && address.Labels != nil {
                clusterName = address.Labels[arkmqv1beta1.ArkMQBrokerLabel]
        }
@@ -241,7 +244,7 @@ func (a ArkMQBindingProvider) fallbackBrokerName(ctx 
BindingContext, namespace,
                return "", fmt.Errorf("no ActiveMQArtemis broker found in 
namespace %s for address %s", namespace, addressName)
        }
        if len(brokers.Items) > 1 {
-               return "", fmt.Errorf("multiple ActiveMQArtemis brokers found 
in namespace %s (%d found); specify %q label or applyTo on address %s",
+               return "", fmt.Errorf("multiple ActiveMQArtemis brokers found 
in namespace %s (%d found); specify %q label or applyToCrNames on address %s",
                        namespace, len(brokers.Items), 
arkmqv1beta1.ArkMQBrokerLabel, addressName)
        }
 
diff --git a/pkg/util/bindings/arkmq_test.go b/pkg/util/bindings/arkmq_test.go
index 7b5976842..d24929b2f 100644
--- a/pkg/util/bindings/arkmq_test.go
+++ b/pkg/util/bindings/arkmq_test.go
@@ -93,8 +93,8 @@ func TestArkMQLookupAddress(t *testing.T) {
                        Name:      "myaddress",
                },
                Spec: arkmqv1beta1.ActiveMQArtemisAddressSpec{
-                       QueueName: "resolved-queue",
-                       ApplyTo:   "mybroker",
+                       QueueName:      "resolved-queue",
+                       ApplyToCrNames: []string{"mybroker"},
                },
        }
 
@@ -170,9 +170,9 @@ func TestArkMQMulticastSupported(t *testing.T) {
                        Name:      "mytopic",
                },
                Spec: arkmqv1beta1.ActiveMQArtemisAddressSpec{
-                       AddressName: "my-multicast-topic",
-                       RoutingType: "multicast",
-                       ApplyTo:     "mybroker",
+                       AddressName:    "my-multicast-topic",
+                       RoutingType:    "multicast",
+                       ApplyToCrNames: []string{"mybroker"},
                },
        }
 
@@ -536,7 +536,7 @@ func TestArkMQBrokerFallback(t *testing.T) {
                },
                Spec: arkmqv1beta1.ActiveMQArtemisAddressSpec{
                        QueueName: "my-fallback-queue",
-                       // No applyTo and no labels!
+                       // No applyToCrNames and no labels!
                },
        }
 
@@ -669,3 +669,80 @@ func TestArkMQPassThrough(t *testing.T) {
        require.NoError(t, err)
        assert.Nil(t, binding)
 }
+
+func TestArkMQApplyToCrNamesWildcardFallback(t *testing.T) {
+       ctx, cancel := context.WithCancel(context.Background())
+       defer cancel()
+
+       broker := &arkmqv1beta1.ActiveMQArtemis{
+               ObjectMeta: metav1.ObjectMeta{
+                       Namespace: "test",
+                       Name:      "only-broker",
+               },
+               Status: arkmqv1beta1.ActiveMQArtemisStatus{
+                       PortStatus: []arkmqv1beta1.ActiveMQArtemisPortStatus{
+                               {
+                                       Name: "core",
+                                       Port: 61616,
+                               },
+                       },
+               },
+       }
+
+       address := &arkmqv1beta1.ActiveMQArtemisAddress{
+               ObjectMeta: metav1.ObjectMeta{
+                       Namespace: "test",
+                       Name:      "wildcard-address",
+               },
+               Spec: arkmqv1beta1.ActiveMQArtemisAddressSpec{
+                       QueueName:      "my-wildcard-queue",
+                       ApplyToCrNames: []string{"*"},
+               },
+       }
+
+       svc := &corev1.Service{
+               ObjectMeta: metav1.ObjectMeta{
+                       Namespace: "test",
+                       Name:      "only-broker-hdls-svc",
+               },
+               Spec: corev1.ServiceSpec{
+                       Ports: []corev1.ServicePort{
+                               {
+                                       Name: "core",
+                                       Port: 61616,
+                               },
+                       },
+               },
+       }
+
+       client, err := internal.NewFakeClient(broker, address, svc)
+       require.NoError(t, err)
+
+       bindingContext := BindingContext{
+               Ctx:       ctx,
+               Client:    client,
+               Namespace: "test",
+               Profile:   camelv1.TraitProfileKubernetes,
+       }
+
+       endpoint := camelv1.Endpoint{
+               Ref: &corev1.ObjectReference{
+                       Kind:       "ActiveMQArtemisAddress",
+                       Name:       "wildcard-address",
+                       APIVersion: "broker.amq.io/v1beta1",
+               },
+       }
+
+       provider := ArkMQBindingProvider{}
+
+       binding, err := provider.Translate(bindingContext, EndpointContext{
+               Type: camelv1.EndpointTypeSink,
+       }, endpoint)
+       require.NoError(t, err)
+       assert.NotNil(t, binding)
+       assert.Equal(t, "amqp:queue:my-wildcard-queue", binding.URI)
+       assert.Equal(t, map[string]string{
+               "quarkus.qpid-jms.url":            
"amqp://only-broker-hdls-svc.test.svc:61616",
+               "camel.component.amqp.broker-url": 
"amqp://only-broker-hdls-svc.test.svc:61616",
+       }, binding.ApplicationProperties)
+}

Reply via email to