From 527f5906d42bc0445b9ea735dd08554098e2aabc Mon Sep 17 00:00:00 2001 From: Jorge Turrado Ferrero Date: Mon, 10 Oct 2022 13:13:43 +0200 Subject: [PATCH] fix: Respect optional parameter inside envs for ScaledJobs (#3694) Signed-off-by: Jorge Turrado --- CHANGELOG.md | 2 +- pkg/scaling/resolver/scale_resolvers.go | 6 ++ pkg/scaling/resolver/scale_resolvers_test.go | 72 ++++++++++++++++++++ 3 files changed, 79 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f9c90c122c4..a625867c99e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -40,7 +40,7 @@ To learn more about our roadmap, we recommend reading [this document](ROADMAP.md ### Fixes -- TODO ([#XXX](https://github.com/kedacore/keda/issue/XXX)) +- **General:** Respect optional parameter inside envs for ScaledJobs ([#3568](https://github.com/kedacore/keda/issues/3568)) ### Deprecations diff --git a/pkg/scaling/resolver/scale_resolvers.go b/pkg/scaling/resolver/scale_resolvers.go index d420b944a79..1b47227cad1 100644 --- a/pkg/scaling/resolver/scale_resolvers.go +++ b/pkg/scaling/resolver/scale_resolvers.go @@ -332,6 +332,9 @@ func resolveEnv(ctx context.Context, client client.Client, logger logr.Logger, c // env is a secret selector value, err = resolveSecretValue(ctx, client, envVar.ValueFrom.SecretKeyRef, envVar.ValueFrom.SecretKeyRef.Key, namespace) if err != nil { + if envVar.ValueFrom.SecretKeyRef.Optional != nil && *envVar.ValueFrom.SecretKeyRef.Optional { + continue + } return nil, fmt.Errorf("error resolving secret name %s for env %s in namespace %s", envVar.ValueFrom.SecretKeyRef, envVar.Name, @@ -341,6 +344,9 @@ func resolveEnv(ctx context.Context, client client.Client, logger logr.Logger, c // env is a configMap selector value, err = resolveConfigValue(ctx, client, envVar.ValueFrom.ConfigMapKeyRef, envVar.ValueFrom.ConfigMapKeyRef.Key, namespace) if err != nil { + if envVar.ValueFrom.ConfigMapKeyRef.Optional != nil && *envVar.ValueFrom.ConfigMapKeyRef.Optional { + continue + } return nil, fmt.Errorf("error resolving config %s for env %s in namespace %s", envVar.ValueFrom.ConfigMapKeyRef, envVar.Name, diff --git a/pkg/scaling/resolver/scale_resolvers_test.go b/pkg/scaling/resolver/scale_resolvers_test.go index e4a109b6bdb..6f5f9d53a77 100644 --- a/pkg/scaling/resolver/scale_resolvers_test.go +++ b/pkg/scaling/resolver/scale_resolvers_test.go @@ -143,6 +143,78 @@ var testMetadatas = []testMetadata{ }}, }, }, + { + isError: false, + comment: "configmap does not exist, but it is marked as an optional, there should not be an error", + container: &corev1.Container{ + Env: []corev1.EnvVar{{ + Name: "test", + ValueFrom: &corev1.EnvVarSource{ + ConfigMapKeyRef: &corev1.ConfigMapKeySelector{ + LocalObjectReference: corev1.LocalObjectReference{ + Name: "do-not-exist-and-optional-explicitly", + }, + Key: "test", + Optional: &trueValue, + }, + }, + }}, + }, + }, + { + isError: false, + comment: "secret does not exist, but it is marked as an optional, there should not be an error", + container: &corev1.Container{ + Env: []corev1.EnvVar{{ + Name: "test", + ValueFrom: &corev1.EnvVarSource{ + SecretKeyRef: &corev1.SecretKeySelector{ + LocalObjectReference: corev1.LocalObjectReference{ + Name: "do-not-exist-and-optional-explicitly", + }, + Key: "test", + Optional: &trueValue, + }, + }, + }}, + }, + }, + { + isError: true, + comment: "configmap does not exist, and it is not marked as an optional, there should be an error", + container: &corev1.Container{ + Env: []corev1.EnvVar{{ + Name: "test", + ValueFrom: &corev1.EnvVarSource{ + ConfigMapKeyRef: &corev1.ConfigMapKeySelector{ + LocalObjectReference: corev1.LocalObjectReference{ + Name: "do-not-exist-and-not-optional", + }, + Key: "test", + Optional: &falseValue, + }, + }, + }}, + }, + }, + { + isError: true, + comment: "secret does not exist, and it is not marked as an optional, there should be an error", + container: &corev1.Container{ + Env: []corev1.EnvVar{{ + Name: "test", + ValueFrom: &corev1.EnvVarSource{ + SecretKeyRef: &corev1.SecretKeySelector{ + LocalObjectReference: corev1.LocalObjectReference{ + Name: "do-not-exist-and-not-optional", + }, + Key: "test", + Optional: &falseValue, + }, + }, + }}, + }, + }, } func TestResolveNonExistingConfigMapsOrSecretsEnv(t *testing.T) {