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


The following commit(s) were added to refs/heads/main by this push:
     new 2dd450478 feat(trait): Add metricType support to the KEDA trait 
triggers
2dd450478 is described below

commit 2dd450478bc3be72f6639d281c3ca959709383e9
Author: Wojciech_Grazawski <[email protected]>
AuthorDate: Wed Aug 5 09:53:01 2026 +0200

    feat(trait): Add metricType support to the KEDA trait triggers
    
    Add an optional trigger-level `metricType` field to the KEDA trait
    (`Utilization`, `AverageValue` or `Value`), mapping to KEDA's
    ScaleTriggers.metricType. Required by the cpu/memory scalers in KEDA
    v2.18+ where the deprecated metadata.type was removed.
    
    Regenerated CRDs, Helm CRDs and API docs.
    
    Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
---
 docs/modules/ROOT/partials/apis/camel-k-crds.adoc  |  8 +++
 helm/camel-k/crds/camel-k-crds.yaml                | 72 ++++++++++++++++++++++
 pkg/apis/camel/v1/trait/keda.go                    |  5 ++
 pkg/apis/duck/keda/v1alpha1/duck_types.go          |  6 +-
 .../camel.apache.org_integrationplatforms.yaml     | 18 ++++++
 .../camel.apache.org_integrationprofiles.yaml      | 18 ++++++
 .../crd/bases/camel.apache.org_integrations.yaml   | 18 ++++++
 .../config/crd/bases/camel.apache.org_pipes.yaml   | 18 ++++++
 pkg/trait/keda.go                                  |  5 +-
 pkg/trait/keda_test.go                             | 29 +++++++++
 10 files changed, 193 insertions(+), 4 deletions(-)

diff --git a/docs/modules/ROOT/partials/apis/camel-k-crds.adoc 
b/docs/modules/ROOT/partials/apis/camel-k-crds.adoc
index 22f3ae244..ac08ea3c1 100644
--- a/docs/modules/ROOT/partials/apis/camel-k-crds.adoc
+++ b/docs/modules/ROOT/partials/apis/camel-k-crds.adoc
@@ -8362,6 +8362,14 @@ string
 
 The autoscaler type.
 
+|`metricType` +
+string
+|
+*(Optional)*
+
+The metric type for this trigger, mapping to KEDA's trigger-level `metricType`
+(`Utilization`, `AverageValue` or `Value`).
+
 |`metadata` +
 map[string]string
 |
diff --git a/helm/camel-k/crds/camel-k-crds.yaml 
b/helm/camel-k/crds/camel-k-crds.yaml
index 9328938d3..6930c372c 100644
--- a/helm/camel-k/crds/camel-k-crds.yaml
+++ b/helm/camel-k/crds/camel-k-crds.yaml
@@ -5015,6 +5015,15 @@ spec:
                               description: The trigger metadata (see Keda 
documentation
                                 to learn how to fill for each type).
                               type: object
+                            metricType:
+                              description: |-
+                                The metric type for this trigger, mapping to 
KEDA's trigger-level `metricType`
+                                (`Utilization`, `AverageValue` or `Value`).
+                              enum:
+                              - Utilization
+                              - AverageValue
+                              - Value
+                              type: string
                             secrets:
                               description: The secrets mapping to use. Keda 
allows
                                 the possibility to use values coming from 
different
@@ -7559,6 +7568,15 @@ spec:
                               description: The trigger metadata (see Keda 
documentation
                                 to learn how to fill for each type).
                               type: object
+                            metricType:
+                              description: |-
+                                The metric type for this trigger, mapping to 
KEDA's trigger-level `metricType`
+                                (`Utilization`, `AverageValue` or `Value`).
+                              enum:
+                              - Utilization
+                              - AverageValue
+                              - Value
+                              type: string
                             secrets:
                               description: The secrets mapping to use. Keda 
allows
                                 the possibility to use values coming from 
different
@@ -9997,6 +10015,15 @@ spec:
                               description: The trigger metadata (see Keda 
documentation
                                 to learn how to fill for each type).
                               type: object
+                            metricType:
+                              description: |-
+                                The metric type for this trigger, mapping to 
KEDA's trigger-level `metricType`
+                                (`Utilization`, `AverageValue` or `Value`).
+                              enum:
+                              - Utilization
+                              - AverageValue
+                              - Value
+                              type: string
                             secrets:
                               description: The secrets mapping to use. Keda 
allows
                                 the possibility to use values coming from 
different
@@ -12421,6 +12448,15 @@ spec:
                               description: The trigger metadata (see Keda 
documentation
                                 to learn how to fill for each type).
                               type: object
+                            metricType:
+                              description: |-
+                                The metric type for this trigger, mapping to 
KEDA's trigger-level `metricType`
+                                (`Utilization`, `AverageValue` or `Value`).
+                              enum:
+                              - Utilization
+                              - AverageValue
+                              - Value
+                              type: string
                             secrets:
                               description: The secrets mapping to use. Keda 
allows
                                 the possibility to use values coming from 
different
@@ -21707,6 +21743,15 @@ spec:
                               description: The trigger metadata (see Keda 
documentation
                                 to learn how to fill for each type).
                               type: object
+                            metricType:
+                              description: |-
+                                The metric type for this trigger, mapping to 
KEDA's trigger-level `metricType`
+                                (`Utilization`, `AverageValue` or `Value`).
+                              enum:
+                              - Utilization
+                              - AverageValue
+                              - Value
+                              type: string
                             secrets:
                               description: The secrets mapping to use. Keda 
allows
                                 the possibility to use values coming from 
different
@@ -24092,6 +24137,15 @@ spec:
                               description: The trigger metadata (see Keda 
documentation
                                 to learn how to fill for each type).
                               type: object
+                            metricType:
+                              description: |-
+                                The metric type for this trigger, mapping to 
KEDA's trigger-level `metricType`
+                                (`Utilization`, `AverageValue` or `Value`).
+                              enum:
+                              - Utilization
+                              - AverageValue
+                              - Value
+                              type: string
                             secrets:
                               description: The secrets mapping to use. Keda 
allows
                                 the possibility to use values coming from 
different
@@ -34744,6 +34798,15 @@ spec:
                                   description: The trigger metadata (see Keda 
documentation
                                     to learn how to fill for each type).
                                   type: object
+                                metricType:
+                                  description: |-
+                                    The metric type for this trigger, mapping 
to KEDA's trigger-level `metricType`
+                                    (`Utilization`, `AverageValue` or `Value`).
+                                  enum:
+                                  - Utilization
+                                  - AverageValue
+                                  - Value
+                                  type: string
                                 secrets:
                                   description: The secrets mapping to use. 
Keda allows
                                     the possibility to use values coming from 
different
@@ -37048,6 +37111,15 @@ spec:
                               description: The trigger metadata (see Keda 
documentation
                                 to learn how to fill for each type).
                               type: object
+                            metricType:
+                              description: |-
+                                The metric type for this trigger, mapping to 
KEDA's trigger-level `metricType`
+                                (`Utilization`, `AverageValue` or `Value`).
+                              enum:
+                              - Utilization
+                              - AverageValue
+                              - Value
+                              type: string
                             secrets:
                               description: The secrets mapping to use. Keda 
allows
                                 the possibility to use values coming from 
different
diff --git a/pkg/apis/camel/v1/trait/keda.go b/pkg/apis/camel/v1/trait/keda.go
index b20b6a974..a56bdf69b 100644
--- a/pkg/apis/camel/v1/trait/keda.go
+++ b/pkg/apis/camel/v1/trait/keda.go
@@ -51,6 +51,11 @@ type KedaTrait struct {
 type KedaTrigger struct {
        // The autoscaler type.
        Type string `json:"type,omitempty" property:"type"`
+       // The metric type for this trigger, mapping to KEDA's trigger-level 
`metricType`
+       // (`Utilization`, `AverageValue` or `Value`).
+       // +kubebuilder:validation:Enum=Utilization;AverageValue;Value
+       // +optional
+       MetricType string `json:"metricType,omitempty" property:"metric-type"`
        // The trigger metadata (see Keda documentation to learn how to fill 
for each type).
        Metadata map[string]string `json:"metadata,omitempty" 
property:"metadata"`
        // The secrets mapping to use. Keda allows the possibility to use 
values coming from different secrets.
diff --git a/pkg/apis/duck/keda/v1alpha1/duck_types.go 
b/pkg/apis/duck/keda/v1alpha1/duck_types.go
index 112e700df..e281578a5 100644
--- a/pkg/apis/duck/keda/v1alpha1/duck_types.go
+++ b/pkg/apis/duck/keda/v1alpha1/duck_types.go
@@ -56,8 +56,10 @@ type ScaledObjectSpec struct {
 type ScaleTriggers struct {
        Type string `json:"type"`
        // +optional
-       Name     string            `json:"name,omitempty"`
-       Metadata map[string]string `json:"metadata"`
+       Name string `json:"name,omitempty"`
+       // +optional
+       MetricType string            `json:"metricType,omitempty"`
+       Metadata   map[string]string `json:"metadata"`
        // +optional
        AuthenticationRef *ScaledObjectAuthRef 
`json:"authenticationRef,omitempty"`
        // +optional
diff --git 
a/pkg/resources/config/crd/bases/camel.apache.org_integrationplatforms.yaml 
b/pkg/resources/config/crd/bases/camel.apache.org_integrationplatforms.yaml
index f1b0c2b26..791c2ec55 100644
--- a/pkg/resources/config/crd/bases/camel.apache.org_integrationplatforms.yaml
+++ b/pkg/resources/config/crd/bases/camel.apache.org_integrationplatforms.yaml
@@ -1709,6 +1709,15 @@ spec:
                               description: The trigger metadata (see Keda 
documentation
                                 to learn how to fill for each type).
                               type: object
+                            metricType:
+                              description: |-
+                                The metric type for this trigger, mapping to 
KEDA's trigger-level `metricType`
+                                (`Utilization`, `AverageValue` or `Value`).
+                              enum:
+                              - Utilization
+                              - AverageValue
+                              - Value
+                              type: string
                             secrets:
                               description: The secrets mapping to use. Keda 
allows
                                 the possibility to use values coming from 
different
@@ -4253,6 +4262,15 @@ spec:
                               description: The trigger metadata (see Keda 
documentation
                                 to learn how to fill for each type).
                               type: object
+                            metricType:
+                              description: |-
+                                The metric type for this trigger, mapping to 
KEDA's trigger-level `metricType`
+                                (`Utilization`, `AverageValue` or `Value`).
+                              enum:
+                              - Utilization
+                              - AverageValue
+                              - Value
+                              type: string
                             secrets:
                               description: The secrets mapping to use. Keda 
allows
                                 the possibility to use values coming from 
different
diff --git 
a/pkg/resources/config/crd/bases/camel.apache.org_integrationprofiles.yaml 
b/pkg/resources/config/crd/bases/camel.apache.org_integrationprofiles.yaml
index 80852a2e7..6925e9bfa 100644
--- a/pkg/resources/config/crd/bases/camel.apache.org_integrationprofiles.yaml
+++ b/pkg/resources/config/crd/bases/camel.apache.org_integrationprofiles.yaml
@@ -1567,6 +1567,15 @@ spec:
                               description: The trigger metadata (see Keda 
documentation
                                 to learn how to fill for each type).
                               type: object
+                            metricType:
+                              description: |-
+                                The metric type for this trigger, mapping to 
KEDA's trigger-level `metricType`
+                                (`Utilization`, `AverageValue` or `Value`).
+                              enum:
+                              - Utilization
+                              - AverageValue
+                              - Value
+                              type: string
                             secrets:
                               description: The secrets mapping to use. Keda 
allows
                                 the possibility to use values coming from 
different
@@ -3991,6 +4000,15 @@ spec:
                               description: The trigger metadata (see Keda 
documentation
                                 to learn how to fill for each type).
                               type: object
+                            metricType:
+                              description: |-
+                                The metric type for this trigger, mapping to 
KEDA's trigger-level `metricType`
+                                (`Utilization`, `AverageValue` or `Value`).
+                              enum:
+                              - Utilization
+                              - AverageValue
+                              - Value
+                              type: string
                             secrets:
                               description: The secrets mapping to use. Keda 
allows
                                 the possibility to use values coming from 
different
diff --git a/pkg/resources/config/crd/bases/camel.apache.org_integrations.yaml 
b/pkg/resources/config/crd/bases/camel.apache.org_integrations.yaml
index 710abc0dc..123984795 100644
--- a/pkg/resources/config/crd/bases/camel.apache.org_integrations.yaml
+++ b/pkg/resources/config/crd/bases/camel.apache.org_integrations.yaml
@@ -8418,6 +8418,15 @@ spec:
                               description: The trigger metadata (see Keda 
documentation
                                 to learn how to fill for each type).
                               type: object
+                            metricType:
+                              description: |-
+                                The metric type for this trigger, mapping to 
KEDA's trigger-level `metricType`
+                                (`Utilization`, `AverageValue` or `Value`).
+                              enum:
+                              - Utilization
+                              - AverageValue
+                              - Value
+                              type: string
                             secrets:
                               description: The secrets mapping to use. Keda 
allows
                                 the possibility to use values coming from 
different
@@ -10803,6 +10812,15 @@ spec:
                               description: The trigger metadata (see Keda 
documentation
                                 to learn how to fill for each type).
                               type: object
+                            metricType:
+                              description: |-
+                                The metric type for this trigger, mapping to 
KEDA's trigger-level `metricType`
+                                (`Utilization`, `AverageValue` or `Value`).
+                              enum:
+                              - Utilization
+                              - AverageValue
+                              - Value
+                              type: string
                             secrets:
                               description: The secrets mapping to use. Keda 
allows
                                 the possibility to use values coming from 
different
diff --git a/pkg/resources/config/crd/bases/camel.apache.org_pipes.yaml 
b/pkg/resources/config/crd/bases/camel.apache.org_pipes.yaml
index 56e9c3e4e..4a9c4e2ed 100644
--- a/pkg/resources/config/crd/bases/camel.apache.org_pipes.yaml
+++ b/pkg/resources/config/crd/bases/camel.apache.org_pipes.yaml
@@ -8476,6 +8476,15 @@ spec:
                                   description: The trigger metadata (see Keda 
documentation
                                     to learn how to fill for each type).
                                   type: object
+                                metricType:
+                                  description: |-
+                                    The metric type for this trigger, mapping 
to KEDA's trigger-level `metricType`
+                                    (`Utilization`, `AverageValue` or `Value`).
+                                  enum:
+                                  - Utilization
+                                  - AverageValue
+                                  - Value
+                                  type: string
                                 secrets:
                                   description: The secrets mapping to use. 
Keda allows
                                     the possibility to use values coming from 
different
@@ -10780,6 +10789,15 @@ spec:
                               description: The trigger metadata (see Keda 
documentation
                                 to learn how to fill for each type).
                               type: object
+                            metricType:
+                              description: |-
+                                The metric type for this trigger, mapping to 
KEDA's trigger-level `metricType`
+                                (`Utilization`, `AverageValue` or `Value`).
+                              enum:
+                              - Utilization
+                              - AverageValue
+                              - Value
+                              type: string
                             secrets:
                               description: The secrets mapping to use. Keda 
allows
                                 the possibility to use values coming from 
different
diff --git a/pkg/trait/keda.go b/pkg/trait/keda.go
index 66074e4b8..36ee9c621 100644
--- a/pkg/trait/keda.go
+++ b/pkg/trait/keda.go
@@ -97,8 +97,9 @@ func (t *kedaTrait) populateTriggers(itName, itNamespace 
string) ([]v1alpha1.Sca
        triggers := make([]v1alpha1.ScaleTriggers, 0, len(t.Triggers))
        for _, trigger := range t.Triggers {
                scaleTrigger := v1alpha1.ScaleTriggers{
-                       Type:     trigger.Type,
-                       Metadata: trigger.Metadata,
+                       Type:       trigger.Type,
+                       MetricType: trigger.MetricType,
+                       Metadata:   trigger.Metadata,
                }
                if trigger.Secrets != nil {
                        triggerAuth := populateTriggerAuth(trigger.Secrets, 
itName, itNamespace, trigger.Type)
diff --git a/pkg/trait/keda_test.go b/pkg/trait/keda_test.go
index 6ba20a8d4..606c315b8 100644
--- a/pkg/trait/keda_test.go
+++ b/pkg/trait/keda_test.go
@@ -57,6 +57,35 @@ func TestKeda(t *testing.T) {
        assert.Equal(t, "10", 
scaledObject.Spec.Triggers[0].Metadata["lagThreshold"])
 }
 
+func TestKedaMetricType(t *testing.T) {
+       environment := nominalEnv(t)
+       // A cpu trigger with a trigger-level metricType: KEDA v2.18+ requires 
this for
+       // the cpu/memory scalers (the deprecated metadata.type was removed).
+       environment.Integration.Spec.Traits.Keda.Triggers = 
[]traitv1.KedaTrigger{
+               {
+                       Type:       "cpu",
+                       MetricType: "Utilization",
+                       Metadata: map[string]string{
+                               "value": "70",
+                       },
+               },
+       }
+       traitCatalog := environment.Catalog
+
+       _, _, err := traitCatalog.apply(&environment)
+
+       require.NoError(t, err)
+       assert.NotEmpty(t, environment.ExecutedTraits)
+       assert.NotNil(t, environment.GetTrait("keda"))
+
+       scaledObject := getKedaScaledObject(environment.Resources)
+       require.NotNil(t, scaledObject)
+       require.Len(t, scaledObject.Spec.Triggers, 1)
+       assert.Equal(t, "cpu", scaledObject.Spec.Triggers[0].Type)
+       assert.Equal(t, "Utilization", scaledObject.Spec.Triggers[0].MetricType)
+       assert.Equal(t, "70", scaledObject.Spec.Triggers[0].Metadata["value"])
+}
+
 func TestKedaAutoDiscovery(t *testing.T) {
        tests := []struct {
                name           string

Reply via email to