wojciechgrazawskiahnl opened a new issue, #6738: URL: https://github.com/apache/camel-k/issues/6738
## What happened The `keda` trait cannot emit a trigger-level `metricType`. Its trigger model (`KedaTrigger`) only carries `type`, `metadata` and `secrets`, and the trait copies only `Type` and `Metadata` into the generated `ScaledObject`. As a result the trait cannot produce a valid **cpu** or **memory** `ScaledObject` on **KEDA v2.18+**. KEDA v2.18 removed the CPU/memory scaler's `metadata.type` field and now requires the metric type to be given as a **trigger-level `metricType`**, with **no default** (an empty `metricType` is rejected). See the KEDA CPU scaler docs: https://keda.sh/docs/2.18/scalers/cpu/ Because the only way to express the metric type through the trait is `metadata.type` (which the trait passes through verbatim), the generated `ScaledObject` is rejected by KEDA v2.18 at reconcile time. ## How to reproduce Deploy an Integration with a CPU trigger via the keda trait on a cluster running KEDA v2.18+: ```yaml traits: container: requestCPU: 200m # a request is required for a Utilization metric limitCPU: 500m keda: enabled: true minReplicaCount: 1 maxReplicaCount: 3 triggers: - type: cpu metadata: type: Utilization # only way to express metric type via the trait value: "70" ``` The resulting `ScaledObject` never becomes `Ready`: ``` Status: Conditions: Type: Ready Status: False Reason: ScaledObjectCheckFailed Message: failed to ensure HPA is correctly created for ScaledObject: error parsing cpu metadata: scaler cpu info: The 'type' setting is DEPRECATED and is removed in v2.18 - Use 'metricType' instead. ``` ## Root cause **Trait trigger model** — `pkg/apis/camel/v1/trait/keda.go` (`main`): ```go type KedaTrigger struct { // The autoscaler type. Type string `json:"type,omitempty" property:"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. Secrets []*KedaSecret `json:"secrets,omitempty" property:"secrets"` } ``` No `metricType`. **Trait apply** — `pkg/trait/keda.go`, `populateTriggers()` (`main`): ```go scaleTrigger := v1alpha1.ScaleTriggers{ Type: trigger.Type, Metadata: trigger.Metadata, } ``` Only `Type` and `Metadata` are copied. **Camel K's own KEDA duck type** — `pkg/apis/duck/keda/v1alpha1/duck_types.go` (`main`) — also omits the field, so even if the trait set it the generated object could not serialize it: ```go type ScaleTriggers struct { Type string `json:"type"` // +optional Name string `json:"name,omitempty"` Metadata map[string]string `json:"metadata"` // +optional AuthenticationRef *ScaledObjectAuthRef `json:"authenticationRef,omitempty"` // +optional FallbackReplicas *int32 `json:"fallback,omitempty"` } ``` ## Expected behaviour The keda trait should allow a per-trigger `metricType`, e.g.: ```yaml keda: triggers: - type: cpu metricType: Utilization metadata: value: "70" ``` and emit it as the trigger-level `spec.triggers[].metricType` of the generated `ScaledObject`: ```yaml spec: triggers: - type: cpu metricType: Utilization metadata: value: "70" ``` ## Affected versions Present in all versions through `main` (checked 2.5.1, 2.6.0, 2.7.0, 2.8.0, and `main`; the trait moved from `addons/keda/keda.go` to `pkg/trait/keda.go` between 2.5.x and 2.6.x but the data model is unchanged). Impact is limited to KEDA v2.18+ and to scalers that now require a trigger-level `metricType` (cpu, memory); other scalers (kafka, cron, prometheus, …) are unaffected because they don't use `metadata.type`. ## Environment - Camel K: 2.5.1 (verified the gap also exists through `main`) - KEDA: v2.18+ -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
