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

pcongiusti 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 2f595d154 feat(catalog): support placeholders
2f595d154 is described below

commit 2f595d15473acf90d984189d4d7598795239e3b1
Author: Pasquale Congiusti <[email protected]>
AuthorDate: Fri Mar 22 08:51:39 2024 +0100

    feat(catalog): support placeholders
    
    Ref https://github.com/apache/camel-k-runtime/pull/1192
---
 docs/modules/ROOT/partials/apis/camel-k-crds.adoc  | 35 +++++++++++-
 helm/camel-k/crds/crd-build.yaml                   | 64 ++++++++++++++++++----
 helm/camel-k/crds/crd-camel-catalog.yaml           | 30 ++++++++--
 pkg/apis/camel/v1/common_types.go                  | 12 +++-
 pkg/apis/camel/v1/integrationkit_types_support.go  | 11 ++++
 pkg/apis/camel/v1/zz_generated.deepcopy.go         | 27 ++++++---
 .../applyconfiguration/camel/v1/camelproperty.go   | 49 +++++++++++++++++
 .../applyconfiguration/camel/v1/capability.go      | 38 ++++++-------
 pkg/client/camel/applyconfiguration/utils.go       |  2 +
 .../config/crd/bases/camel.apache.org_builds.yaml  | 64 ++++++++++++++++++----
 .../crd/bases/camel.apache.org_camelcatalogs.yaml  | 30 ++++++++--
 pkg/trait/trait_types.go                           | 17 ++++++
 pkg/trait/trait_types_test.go                      | 10 ++++
 13 files changed, 320 insertions(+), 69 deletions(-)

diff --git a/docs/modules/ROOT/partials/apis/camel-k-crds.adoc 
b/docs/modules/ROOT/partials/apis/camel-k-crds.adoc
index f1cc0545e..edb8c1408 100644
--- a/docs/modules/ROOT/partials/apis/camel-k-crds.adoc
+++ b/docs/modules/ROOT/partials/apis/camel-k-crds.adoc
@@ -1322,6 +1322,37 @@ map[string]string
 the metadata of the loader
 
 
+|===
+
+[#_camel_apache_org_v1_CamelProperty]
+=== CamelProperty
+
+*Appears on:*
+
+* <<#_camel_apache_org_v1_Capability, Capability>>
+
+CamelProperty represents a Camel property that may end up in an 
application.properties file.
+
+[cols="2,2a",options="header"]
+|===
+|Field
+|Description
+
+|`key` +
+string
+|
+
+
+
+
+|`value` +
+string
+|
+
+
+
+
+
 |===
 
 [#_camel_apache_org_v1_CamelScheme]
@@ -1423,14 +1454,14 @@ which are specified in the runtime catalog.
 List of required Maven dependencies
 
 |`runtimeProperties` +
-map[string]string
+*xref:#_camel_apache_org_v1_CamelProperty[[\]CamelProperty]*
 |
 
 
 Set of required Camel runtime properties
 
 |`buildTimeProperties` +
-map[string]string
+*xref:#_camel_apache_org_v1_CamelProperty[[\]CamelProperty]*
 |
 
 
diff --git a/helm/camel-k/crds/crd-build.yaml b/helm/camel-k/crds/crd-build.yaml
index 9ccd0da7a..31635f79d 100644
--- a/helm/camel-k/crds/crd-build.yaml
+++ b/helm/camel-k/crds/crd-build.yaml
@@ -660,11 +660,21 @@ spec:
                                   properties which are specified in the 
runtime catalog.
                                 properties:
                                   buildTimeProperties:
-                                    additionalProperties:
-                                      type: string
                                     description: Set of required Camel build 
time
                                       properties
-                                    type: object
+                                    items:
+                                      description: CamelProperty represents a 
Camel
+                                        property that may end up in an 
application.properties
+                                        file.
+                                      properties:
+                                        key:
+                                          type: string
+                                        value:
+                                          type: string
+                                      required:
+                                      - key
+                                      type: object
+                                    type: array
                                   dependencies:
                                     description: List of required Maven 
dependencies
                                     items:
@@ -697,10 +707,20 @@ spec:
                                     description: Set of generic metadata
                                     type: object
                                   runtimeProperties:
-                                    additionalProperties:
-                                      type: string
                                     description: Set of required Camel runtime 
properties
-                                    type: object
+                                    items:
+                                      description: CamelProperty represents a 
Camel
+                                        property that may end up in an 
application.properties
+                                        file.
+                                      properties:
+                                        key:
+                                          type: string
+                                        value:
+                                          type: string
+                                      required:
+                                      - key
+                                      type: object
+                                    type: array
                                 type: object
                               description: features offered by this runtime
                               type: object
@@ -1514,11 +1534,21 @@ spec:
                                   properties which are specified in the 
runtime catalog.
                                 properties:
                                   buildTimeProperties:
-                                    additionalProperties:
-                                      type: string
                                     description: Set of required Camel build 
time
                                       properties
-                                    type: object
+                                    items:
+                                      description: CamelProperty represents a 
Camel
+                                        property that may end up in an 
application.properties
+                                        file.
+                                      properties:
+                                        key:
+                                          type: string
+                                        value:
+                                          type: string
+                                      required:
+                                      - key
+                                      type: object
+                                    type: array
                                   dependencies:
                                     description: List of required Maven 
dependencies
                                     items:
@@ -1551,10 +1581,20 @@ spec:
                                     description: Set of generic metadata
                                     type: object
                                   runtimeProperties:
-                                    additionalProperties:
-                                      type: string
                                     description: Set of required Camel runtime 
properties
-                                    type: object
+                                    items:
+                                      description: CamelProperty represents a 
Camel
+                                        property that may end up in an 
application.properties
+                                        file.
+                                      properties:
+                                        key:
+                                          type: string
+                                        value:
+                                          type: string
+                                      required:
+                                      - key
+                                      type: object
+                                    type: array
                                 type: object
                               description: features offered by this runtime
                               type: object
diff --git a/helm/camel-k/crds/crd-camel-catalog.yaml 
b/helm/camel-k/crds/crd-camel-catalog.yaml
index 99458fd96..e76c6bb59 100644
--- a/helm/camel-k/crds/crd-camel-catalog.yaml
+++ b/helm/camel-k/crds/crd-camel-catalog.yaml
@@ -376,10 +376,19 @@ spec:
                         are specified in the runtime catalog.
                       properties:
                         buildTimeProperties:
-                          additionalProperties:
-                            type: string
                           description: Set of required Camel build time 
properties
-                          type: object
+                          items:
+                            description: CamelProperty represents a Camel 
property
+                              that may end up in an application.properties 
file.
+                            properties:
+                              key:
+                                type: string
+                              value:
+                                type: string
+                            required:
+                            - key
+                            type: object
+                          type: array
                         dependencies:
                           description: List of required Maven dependencies
                           items:
@@ -412,10 +421,19 @@ spec:
                           description: Set of generic metadata
                           type: object
                         runtimeProperties:
-                          additionalProperties:
-                            type: string
                           description: Set of required Camel runtime properties
-                          type: object
+                          items:
+                            description: CamelProperty represents a Camel 
property
+                              that may end up in an application.properties 
file.
+                            properties:
+                              key:
+                                type: string
+                              value:
+                                type: string
+                            required:
+                            - key
+                            type: object
+                          type: array
                       type: object
                     description: features offered by this runtime
                     type: object
diff --git a/pkg/apis/camel/v1/common_types.go 
b/pkg/apis/camel/v1/common_types.go
index f441ec918..d5af69100 100644
--- a/pkg/apis/camel/v1/common_types.go
+++ b/pkg/apis/camel/v1/common_types.go
@@ -350,11 +350,17 @@ type Capability struct {
        // List of required Maven dependencies
        Dependencies []MavenArtifact `json:"dependencies,omitempty" 
yaml:"dependencies,omitempty"`
        // Set of required Camel runtime properties
-       RuntimeProperties map[string]string `json:"runtimeProperties,omitempty" 
yaml:"runtimeProperties,omitempty"`
+       RuntimeProperties []CamelProperty `json:"runtimeProperties,omitempty" 
yaml:"runtimeProperties,omitempty"`
        // Set of required Camel build time properties
-       BuildTimeProperties map[string]string 
`json:"buildTimeProperties,omitempty" yaml:"buildTimeProperties,omitempty"`
+       BuildTimeProperties []CamelProperty 
`json:"buildTimeProperties,omitempty" yaml:"buildTimeProperties,omitempty"`
        // Set of generic metadata
-       Metadata map[string]string `json:"metadata,omitempty" 
yaml:"Metadata,omitempty"`
+       Metadata map[string]string `json:"metadata,omitempty" 
yaml:"metadata,omitempty"`
+}
+
+// CamelProperty represents a Camel property that may end up in an 
application.properties file.
+type CamelProperty struct {
+       Key   string `json:"key" yaml:"key"`
+       Value string `json:"value,omitempty" yaml:"value,omitempty"`
 }
 
 const (
diff --git a/pkg/apis/camel/v1/integrationkit_types_support.go 
b/pkg/apis/camel/v1/integrationkit_types_support.go
index 6bcde2c03..c1c8d2a5f 100644
--- a/pkg/apis/camel/v1/integrationkit_types_support.go
+++ b/pkg/apis/camel/v1/integrationkit_types_support.go
@@ -106,6 +106,17 @@ func (in *IntegrationKit) IsExternal() bool {
        return in.Labels[IntegrationKitTypeLabel] == IntegrationKitTypeExternal
 }
 
+// HasCapability returns true if the Kit is enabled with such a capability.
+func (in *IntegrationKit) HasCapability(capability string) bool {
+       for _, cap := range in.Spec.Capabilities {
+               if cap == capability {
+                       return true
+               }
+       }
+
+       return false
+}
+
 // GetCondition returns the condition with the provided type.
 func (in *IntegrationKitStatus) GetCondition(condType 
IntegrationKitConditionType) *IntegrationKitCondition {
        for i := range in.Conditions {
diff --git a/pkg/apis/camel/v1/zz_generated.deepcopy.go 
b/pkg/apis/camel/v1/zz_generated.deepcopy.go
index 9113c57df..8d1e9dc13 100644
--- a/pkg/apis/camel/v1/zz_generated.deepcopy.go
+++ b/pkg/apis/camel/v1/zz_generated.deepcopy.go
@@ -568,6 +568,21 @@ func (in *CamelLoader) DeepCopy() *CamelLoader {
        return out
 }
 
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, 
writing into out. in must be non-nil.
+func (in *CamelProperty) DeepCopyInto(out *CamelProperty) {
+       *out = *in
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, 
creating a new CamelProperty.
+func (in *CamelProperty) DeepCopy() *CamelProperty {
+       if in == nil {
+               return nil
+       }
+       out := new(CamelProperty)
+       in.DeepCopyInto(out)
+       return out
+}
+
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, 
writing into out. in must be non-nil.
 func (in *CamelScheme) DeepCopyInto(out *CamelScheme) {
        *out = *in
@@ -617,17 +632,13 @@ func (in *Capability) DeepCopyInto(out *Capability) {
        }
        if in.RuntimeProperties != nil {
                in, out := &in.RuntimeProperties, &out.RuntimeProperties
-               *out = make(map[string]string, len(*in))
-               for key, val := range *in {
-                       (*out)[key] = val
-               }
+               *out = make([]CamelProperty, len(*in))
+               copy(*out, *in)
        }
        if in.BuildTimeProperties != nil {
                in, out := &in.BuildTimeProperties, &out.BuildTimeProperties
-               *out = make(map[string]string, len(*in))
-               for key, val := range *in {
-                       (*out)[key] = val
-               }
+               *out = make([]CamelProperty, len(*in))
+               copy(*out, *in)
        }
        if in.Metadata != nil {
                in, out := &in.Metadata, &out.Metadata
diff --git a/pkg/client/camel/applyconfiguration/camel/v1/camelproperty.go 
b/pkg/client/camel/applyconfiguration/camel/v1/camelproperty.go
new file mode 100644
index 000000000..a93d9ab6c
--- /dev/null
+++ b/pkg/client/camel/applyconfiguration/camel/v1/camelproperty.go
@@ -0,0 +1,49 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+// Code generated by applyconfiguration-gen. DO NOT EDIT.
+
+package v1
+
+// CamelPropertyApplyConfiguration represents an declarative configuration of 
the CamelProperty type for use
+// with apply.
+type CamelPropertyApplyConfiguration struct {
+       Key   *string `json:"key,omitempty"`
+       Value *string `json:"value,omitempty"`
+}
+
+// CamelPropertyApplyConfiguration constructs an declarative configuration of 
the CamelProperty type for use with
+// apply.
+func CamelProperty() *CamelPropertyApplyConfiguration {
+       return &CamelPropertyApplyConfiguration{}
+}
+
+// WithKey sets the Key field in the declarative configuration to the given 
value
+// and returns the receiver, so that objects can be built by chaining "With" 
function invocations.
+// If called multiple times, the Key field is set to the value of the last 
call.
+func (b *CamelPropertyApplyConfiguration) WithKey(value string) 
*CamelPropertyApplyConfiguration {
+       b.Key = &value
+       return b
+}
+
+// WithValue sets the Value field in the declarative configuration to the 
given value
+// and returns the receiver, so that objects can be built by chaining "With" 
function invocations.
+// If called multiple times, the Value field is set to the value of the last 
call.
+func (b *CamelPropertyApplyConfiguration) WithValue(value string) 
*CamelPropertyApplyConfiguration {
+       b.Value = &value
+       return b
+}
diff --git a/pkg/client/camel/applyconfiguration/camel/v1/capability.go 
b/pkg/client/camel/applyconfiguration/camel/v1/capability.go
index d6d3073b2..28b155f38 100644
--- a/pkg/client/camel/applyconfiguration/camel/v1/capability.go
+++ b/pkg/client/camel/applyconfiguration/camel/v1/capability.go
@@ -23,8 +23,8 @@ package v1
 // with apply.
 type CapabilityApplyConfiguration struct {
        Dependencies        []MavenArtifactApplyConfiguration 
`json:"dependencies,omitempty"`
-       RuntimeProperties   map[string]string                 
`json:"runtimeProperties,omitempty"`
-       BuildTimeProperties map[string]string                 
`json:"buildTimeProperties,omitempty"`
+       RuntimeProperties   []CamelPropertyApplyConfiguration 
`json:"runtimeProperties,omitempty"`
+       BuildTimeProperties []CamelPropertyApplyConfiguration 
`json:"buildTimeProperties,omitempty"`
        Metadata            map[string]string                 
`json:"metadata,omitempty"`
 }
 
@@ -47,30 +47,28 @@ func (b *CapabilityApplyConfiguration) 
WithDependencies(values ...*MavenArtifact
        return b
 }
 
-// WithRuntimeProperties puts the entries into the RuntimeProperties field in 
the declarative configuration
+// WithRuntimeProperties adds the given value to the RuntimeProperties field 
in the declarative configuration
 // and returns the receiver, so that objects can be build by chaining "With" 
function invocations.
-// If called multiple times, the entries provided by each call will be put on 
the RuntimeProperties field,
-// overwriting an existing map entries in RuntimeProperties field with the 
same key.
-func (b *CapabilityApplyConfiguration) WithRuntimeProperties(entries 
map[string]string) *CapabilityApplyConfiguration {
-       if b.RuntimeProperties == nil && len(entries) > 0 {
-               b.RuntimeProperties = make(map[string]string, len(entries))
-       }
-       for k, v := range entries {
-               b.RuntimeProperties[k] = v
+// If called multiple times, values provided by each call will be appended to 
the RuntimeProperties field.
+func (b *CapabilityApplyConfiguration) WithRuntimeProperties(values 
...*CamelPropertyApplyConfiguration) *CapabilityApplyConfiguration {
+       for i := range values {
+               if values[i] == nil {
+                       panic("nil value passed to WithRuntimeProperties")
+               }
+               b.RuntimeProperties = append(b.RuntimeProperties, *values[i])
        }
        return b
 }
 
-// WithBuildTimeProperties puts the entries into the BuildTimeProperties field 
in the declarative configuration
+// WithBuildTimeProperties adds the given value to the BuildTimeProperties 
field in the declarative configuration
 // and returns the receiver, so that objects can be build by chaining "With" 
function invocations.
-// If called multiple times, the entries provided by each call will be put on 
the BuildTimeProperties field,
-// overwriting an existing map entries in BuildTimeProperties field with the 
same key.
-func (b *CapabilityApplyConfiguration) WithBuildTimeProperties(entries 
map[string]string) *CapabilityApplyConfiguration {
-       if b.BuildTimeProperties == nil && len(entries) > 0 {
-               b.BuildTimeProperties = make(map[string]string, len(entries))
-       }
-       for k, v := range entries {
-               b.BuildTimeProperties[k] = v
+// If called multiple times, values provided by each call will be appended to 
the BuildTimeProperties field.
+func (b *CapabilityApplyConfiguration) WithBuildTimeProperties(values 
...*CamelPropertyApplyConfiguration) *CapabilityApplyConfiguration {
+       for i := range values {
+               if values[i] == nil {
+                       panic("nil value passed to WithBuildTimeProperties")
+               }
+               b.BuildTimeProperties = append(b.BuildTimeProperties, 
*values[i])
        }
        return b
 }
diff --git a/pkg/client/camel/applyconfiguration/utils.go 
b/pkg/client/camel/applyconfiguration/utils.go
index 737a3d5eb..6632cd823 100644
--- a/pkg/client/camel/applyconfiguration/utils.go
+++ b/pkg/client/camel/applyconfiguration/utils.go
@@ -68,6 +68,8 @@ func ForKind(kind schema.GroupVersionKind) interface{} {
                return &camelv1.CamelCatalogStatusApplyConfiguration{}
        case v1.SchemeGroupVersion.WithKind("CamelLoader"):
                return &camelv1.CamelLoaderApplyConfiguration{}
+       case v1.SchemeGroupVersion.WithKind("CamelProperty"):
+               return &camelv1.CamelPropertyApplyConfiguration{}
        case v1.SchemeGroupVersion.WithKind("CamelScheme"):
                return &camelv1.CamelSchemeApplyConfiguration{}
        case v1.SchemeGroupVersion.WithKind("CamelSchemeScope"):
diff --git a/pkg/resources/config/crd/bases/camel.apache.org_builds.yaml 
b/pkg/resources/config/crd/bases/camel.apache.org_builds.yaml
index 9ccd0da7a..31635f79d 100644
--- a/pkg/resources/config/crd/bases/camel.apache.org_builds.yaml
+++ b/pkg/resources/config/crd/bases/camel.apache.org_builds.yaml
@@ -660,11 +660,21 @@ spec:
                                   properties which are specified in the 
runtime catalog.
                                 properties:
                                   buildTimeProperties:
-                                    additionalProperties:
-                                      type: string
                                     description: Set of required Camel build 
time
                                       properties
-                                    type: object
+                                    items:
+                                      description: CamelProperty represents a 
Camel
+                                        property that may end up in an 
application.properties
+                                        file.
+                                      properties:
+                                        key:
+                                          type: string
+                                        value:
+                                          type: string
+                                      required:
+                                      - key
+                                      type: object
+                                    type: array
                                   dependencies:
                                     description: List of required Maven 
dependencies
                                     items:
@@ -697,10 +707,20 @@ spec:
                                     description: Set of generic metadata
                                     type: object
                                   runtimeProperties:
-                                    additionalProperties:
-                                      type: string
                                     description: Set of required Camel runtime 
properties
-                                    type: object
+                                    items:
+                                      description: CamelProperty represents a 
Camel
+                                        property that may end up in an 
application.properties
+                                        file.
+                                      properties:
+                                        key:
+                                          type: string
+                                        value:
+                                          type: string
+                                      required:
+                                      - key
+                                      type: object
+                                    type: array
                                 type: object
                               description: features offered by this runtime
                               type: object
@@ -1514,11 +1534,21 @@ spec:
                                   properties which are specified in the 
runtime catalog.
                                 properties:
                                   buildTimeProperties:
-                                    additionalProperties:
-                                      type: string
                                     description: Set of required Camel build 
time
                                       properties
-                                    type: object
+                                    items:
+                                      description: CamelProperty represents a 
Camel
+                                        property that may end up in an 
application.properties
+                                        file.
+                                      properties:
+                                        key:
+                                          type: string
+                                        value:
+                                          type: string
+                                      required:
+                                      - key
+                                      type: object
+                                    type: array
                                   dependencies:
                                     description: List of required Maven 
dependencies
                                     items:
@@ -1551,10 +1581,20 @@ spec:
                                     description: Set of generic metadata
                                     type: object
                                   runtimeProperties:
-                                    additionalProperties:
-                                      type: string
                                     description: Set of required Camel runtime 
properties
-                                    type: object
+                                    items:
+                                      description: CamelProperty represents a 
Camel
+                                        property that may end up in an 
application.properties
+                                        file.
+                                      properties:
+                                        key:
+                                          type: string
+                                        value:
+                                          type: string
+                                      required:
+                                      - key
+                                      type: object
+                                    type: array
                                 type: object
                               description: features offered by this runtime
                               type: object
diff --git a/pkg/resources/config/crd/bases/camel.apache.org_camelcatalogs.yaml 
b/pkg/resources/config/crd/bases/camel.apache.org_camelcatalogs.yaml
index 99458fd96..e76c6bb59 100644
--- a/pkg/resources/config/crd/bases/camel.apache.org_camelcatalogs.yaml
+++ b/pkg/resources/config/crd/bases/camel.apache.org_camelcatalogs.yaml
@@ -376,10 +376,19 @@ spec:
                         are specified in the runtime catalog.
                       properties:
                         buildTimeProperties:
-                          additionalProperties:
-                            type: string
                           description: Set of required Camel build time 
properties
-                          type: object
+                          items:
+                            description: CamelProperty represents a Camel 
property
+                              that may end up in an application.properties 
file.
+                            properties:
+                              key:
+                                type: string
+                              value:
+                                type: string
+                            required:
+                            - key
+                            type: object
+                          type: array
                         dependencies:
                           description: List of required Maven dependencies
                           items:
@@ -412,10 +421,19 @@ spec:
                           description: Set of generic metadata
                           type: object
                         runtimeProperties:
-                          additionalProperties:
-                            type: string
                           description: Set of required Camel runtime properties
-                          type: object
+                          items:
+                            description: CamelProperty represents a Camel 
property
+                              that may end up in an application.properties 
file.
+                            properties:
+                              key:
+                                type: string
+                              value:
+                                type: string
+                            required:
+                            - key
+                            type: object
+                          type: array
                       type: object
                     description: features offered by this runtime
                     type: object
diff --git a/pkg/trait/trait_types.go b/pkg/trait/trait_types.go
index 85d152e47..46690b28b 100644
--- a/pkg/trait/trait_types.go
+++ b/pkg/trait/trait_types.go
@@ -22,6 +22,7 @@ import (
        "fmt"
        "path"
        "path/filepath"
+       "regexp"
        "sort"
        "strings"
 
@@ -51,6 +52,8 @@ const (
        sourceCompressionAnnotation = "camel.apache.org/source.compression"
 )
 
+var capabilityDynamicProperty = regexp.MustCompile(`(\$\{([^}]*)\})`)
+
 // Identifiable represent an identifiable type.
 type Identifiable interface {
        ID() ID
@@ -727,3 +730,17 @@ func (e *Environment) getIntegrationContainerPort() 
*corev1.ContainerPort {
 
        return nil
 }
+
+// CapabilityPropertyKey returns the key or expand any variable provided in 
it. vars variable contain the
+// possible dynamic values to use.
+func CapabilityPropertyKey(camelPropertyKey string, vars map[string]string) 
string {
+       if capabilityDynamicProperty.MatchString(camelPropertyKey) && vars != 
nil {
+               match := 
capabilityDynamicProperty.FindStringSubmatch(camelPropertyKey)
+               if len(match) < 2 {
+                       // Should not happen, but fallback to the key not 
expanded instead of panic if it comes to happen
+                       return camelPropertyKey
+               }
+               return strings.ReplaceAll(camelPropertyKey, match[1], 
vars[match[2]])
+       }
+       return camelPropertyKey
+}
diff --git a/pkg/trait/trait_types_test.go b/pkg/trait/trait_types_test.go
index 75f5384f9..978487b74 100644
--- a/pkg/trait/trait_types_test.go
+++ b/pkg/trait/trait_types_test.go
@@ -154,3 +154,13 @@ func TestVolumeWithKeyOnly(t *testing.T) {
        assert.Equal(t, "SomeKey", items[0].Key)
        assert.Equal(t, "SomeKey", items[0].Path)
 }
+
+func TestCapabilityPropertyKey(t *testing.T) {
+       camelPropertyKeyStatic := 
CapabilityPropertyKey("quarkus.camel.cluster.kubernetes.resource-name", nil)
+       assert.Equal(t, "quarkus.camel.cluster.kubernetes.resource-name", 
camelPropertyKeyStatic)
+       vars := map[string]string{
+               "camel.k.master.labelKey": "org.apache.camel/integration",
+       }
+       camelPropertyKeyDynamic := 
CapabilityPropertyKey(`quarkus.camel.cluster.kubernetes.labels."${camel.k.master.labelKey}"`,
 vars)
+       assert.Equal(t, 
`quarkus.camel.cluster.kubernetes.labels."org.apache.camel/integration"`, 
camelPropertyKeyDynamic)
+}

Reply via email to