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

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

commit 1239743ea126e3898d0a77e74f89f41022b7bfe9
Author: nicolaferraro <ni.ferr...@gmail.com>
AuthorDate: Mon Dec 20 12:01:07 2021 +0100

    Fix #1107: add optional authentication secret
---
 addons/keda/keda.go | 51 ++++++++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 46 insertions(+), 5 deletions(-)

diff --git a/addons/keda/keda.go b/addons/keda/keda.go
index 4911a76..3637153 100644
--- a/addons/keda/keda.go
+++ b/addons/keda/keda.go
@@ -93,14 +93,16 @@ type kedaTrait struct {
        MaxReplicaCount *int32 `property:"max-replica-count" 
json:"maxReplicaCount,omitempty"`
        // Definition of triggers according to the KEDA format. Each trigger 
must contain `type` field corresponding
        // to the name of a KEDA autoscaler and a key/value map named 
`metadata` containing specific trigger options.
+       // An optional `authentication-secret` can be declared per trigger and 
the operator will link each entry of
+       // the secret to a KEDA authentication parameter.
        Triggers []kedaTrigger `property:"triggers" json:"triggers,omitempty"`
 }
 
 type kedaTrigger struct {
-       Type     string            `property:"type" json:"type,omitempty"`
-       Metadata map[string]string `property:"metadata" 
json:"metadata,omitempty"`
-
-       authentication map[string]string
+       Type                 string            `property:"type" 
json:"type,omitempty"`
+       Metadata             map[string]string `property:"metadata" 
json:"metadata,omitempty"`
+       AuthenticationSecret string            
`property:"authentication-secret" json:"authenticationSecret,omitempty"`
+       authentication       map[string]string
 }
 
 // NewKedaTrait --.
@@ -177,9 +179,12 @@ func (t *kedaTrait) addScalingResources(e 
*trait.Environment) error {
                        meta[kk] = v
                }
                var authenticationRef *kedav1alpha1.ScaledObjectAuthRef
+               if len(trigger.authentication) > 0 && 
trigger.AuthenticationSecret != "" {
+                       return errors.New("an authentication secret cannot be 
provided for auto-configured triggers")
+               }
+               extConfigName := fmt.Sprintf("%s-keda-%d", e.Integration.Name, 
idx)
                if len(trigger.authentication) > 0 {
                        // Save all authentication config in a secret
-                       extConfigName := fmt.Sprintf("%s-keda-%d", 
e.Integration.Name, idx)
                        secret := v1.Secret{
                                TypeMeta: metav1.TypeMeta{
                                        Kind:       "Secret",
@@ -215,6 +220,42 @@ func (t *kedaTrait) addScalingResources(e 
*trait.Environment) error {
                        authenticationRef = &kedav1alpha1.ScaledObjectAuthRef{
                                Name: extConfigName,
                        }
+               } else if trigger.AuthenticationSecret != "" {
+                       s := v1.Secret{}
+                       key := client.ObjectKey{
+                               Namespace: e.Integration.Namespace,
+                               Name:      trigger.AuthenticationSecret,
+                       }
+                       if err := e.Client.Get(e.Ctx, key, &s); err != nil {
+                               return errors.Wrapf(err, "could not load secret 
named %q in namespace %q", trigger.AuthenticationSecret, 
e.Integration.Namespace)
+                       }
+                       // Fill a TriggerAuthentication from the secret
+                       triggerAuth := kedav1alpha1.TriggerAuthentication{
+                               TypeMeta: metav1.TypeMeta{
+                                       Kind:       "TriggerAuthentication",
+                                       APIVersion: 
kedav1alpha1.SchemeGroupVersion.String(),
+                               },
+                               ObjectMeta: metav1.ObjectMeta{
+                                       Namespace: e.Integration.Namespace,
+                                       Name:      extConfigName,
+                               },
+                       }
+                       sortedKeys := make([]string, 0, len(s.Data))
+                       for k := range s.Data {
+                               sortedKeys = append(sortedKeys, k)
+                       }
+                       sort.Strings(sortedKeys)
+                       for _, k := range sortedKeys {
+                               triggerAuth.Spec.SecretTargetRef = 
append(triggerAuth.Spec.SecretTargetRef, kedav1alpha1.AuthSecretTargetRef{
+                                       Parameter: k,
+                                       Name:      s.Name,
+                                       Key:       k,
+                               })
+                       }
+                       e.Resources.Add(&triggerAuth)
+                       authenticationRef = &kedav1alpha1.ScaledObjectAuthRef{
+                               Name: extConfigName,
+                       }
                }
 
                st := kedav1alpha1.ScaleTriggers{

Reply via email to