in addons/keda/keda.go [153:269]
func (t *kedaTrait) addScalingResources(e *trait.Environment) error {
if len(t.Triggers) == 0 {
return nil
}
obj := kedav1alpha1.NewScaledObject(e.Integration.Namespace, e.Integration.Name)
obj.Spec.ScaleTargetRef = t.getTopControllerReference(e)
if t.PollingInterval != nil {
obj.Spec.PollingInterval = t.PollingInterval
}
if t.CooldownPeriod != nil {
obj.Spec.CooldownPeriod = t.CooldownPeriod
}
if t.IdleReplicaCount != nil {
obj.Spec.IdleReplicaCount = t.IdleReplicaCount
}
if t.MinReplicaCount != nil {
obj.Spec.MinReplicaCount = t.MinReplicaCount
}
if t.MaxReplicaCount != nil {
obj.Spec.MaxReplicaCount = t.MaxReplicaCount
}
for idx, trigger := range t.Triggers {
meta := make(map[string]string)
for k, v := range trigger.Metadata {
meta[k] = 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
secret := v1.Secret{
TypeMeta: metav1.TypeMeta{
Kind: "Secret",
APIVersion: v1.SchemeGroupVersion.String(),
},
ObjectMeta: metav1.ObjectMeta{
Namespace: e.Integration.Namespace,
Name: extConfigName,
},
StringData: trigger.authentication,
}
e.Resources.Add(&secret)
// Link the secret using a TriggerAuthentication
triggerAuth := kedav1alpha1.TriggerAuthentication{
TypeMeta: metav1.TypeMeta{
Kind: "TriggerAuthentication",
APIVersion: kedav1alpha1.SchemeGroupVersion.String(),
},
ObjectMeta: metav1.ObjectMeta{
Namespace: e.Integration.Namespace,
Name: extConfigName,
},
}
for _, k := range util.SortedStringMapKeys(trigger.authentication) {
triggerAuth.Spec.SecretTargetRef = append(triggerAuth.Spec.SecretTargetRef, kedav1alpha1.AuthSecretTargetRef{
Parameter: k,
Name: extConfigName,
Key: k,
})
}
e.Resources.Add(&triggerAuth)
authenticationRef = &kedav1alpha1.ScaledObjectAuthRef{
Name: extConfigName,
}
} else if trigger.AuthenticationSecret != "" {
s := v1.Secret{}
key := ctrl.ObjectKey{
Namespace: e.Integration.Namespace,
Name: trigger.AuthenticationSecret,
}
if err := e.Client.Get(e.Ctx, key, &s); err != nil {
return fmt.Errorf("could not load secret named %q in namespace %q: %w", trigger.AuthenticationSecret, e.Integration.Namespace, err)
}
// 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{
Type: trigger.Type,
Metadata: meta,
AuthenticationRef: authenticationRef,
}
obj.Spec.Triggers = append(obj.Spec.Triggers, st)
}
e.Resources.Add(&obj)
return nil
}