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) +}
