From 64825edf9fa70b2c6e868bada307e88161c6726d Mon Sep 17 00:00:00 2001 From: Ang Gao Date: Thu, 24 Sep 2020 17:52:55 +0100 Subject: [PATCH 1/2] Avoid exception when CRD doesn't follow Pod spec shape Signed-off-by: Ang Gao --- pkg/scaling/scale_handler.go | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/pkg/scaling/scale_handler.go b/pkg/scaling/scale_handler.go index 051f6359532..491c1860cea 100644 --- a/pkg/scaling/scale_handler.go +++ b/pkg/scaling/scale_handler.go @@ -296,15 +296,21 @@ func min(x, y int64) int64 { func (h *scaleHandler) buildScalers(withTriggers *kedav1alpha1.WithTriggers, podTemplateSpec *corev1.PodTemplateSpec, containerName string) ([]scalers.Scaler, error) { logger := h.logger.WithValues("type", withTriggers.Kind, "namespace", withTriggers.Namespace, "name", withTriggers.Name) var scalersRes []scalers.Scaler - - resolvedEnv, err := resolver.ResolveContainerEnv(h.client, logger, &podTemplateSpec.Spec, containerName, withTriggers.Namespace) - if err != nil { - return scalersRes, fmt.Errorf("error resolving secrets for ScaleTarget: %s", err) + var err error + resolvedEnv := make(map[string]string) + if podTemplateSpec != nil { + resolvedEnv, err = resolver.ResolveContainerEnv(h.client, logger, &podTemplateSpec.Spec, containerName, withTriggers.Namespace) + if err != nil { + return scalersRes, fmt.Errorf("error resolving secrets for ScaleTarget: %s", err) + } } for i, trigger := range withTriggers.Spec.Triggers { - authParams, podIdentity := resolver.ResolveAuthRef(h.client, logger, trigger.AuthenticationRef, &podTemplateSpec.Spec, withTriggers.Namespace) - + var authParams map[string]string + var podIdentity string + if podTemplateSpec != nil { + authParams, podIdentity = resolver.ResolveAuthRef(h.client, logger, trigger.AuthenticationRef, &podTemplateSpec.Spec, withTriggers.Namespace) + } if podIdentity == kedav1alpha1.PodIdentityProviderAwsEKS { serviceAccountName := podTemplateSpec.Spec.ServiceAccountName serviceAccount := &corev1.ServiceAccount{} @@ -348,7 +354,8 @@ func (h *scaleHandler) getPods(scalableObject interface{}) (*corev1.PodTemplateS if withPods.Spec.Template.Spec.Containers == nil { h.logger.Info("There aren't any containers in the ScaleTarget", "resource", obj.Status.ScaleTargetGVKR.GVKString(), "name", obj.Spec.ScaleTargetRef.Name) - return nil, "", fmt.Errorf("no containers found") + h.logger.Info("You may not be able to use all scaler types") + return nil, "", nil } podTemplateSpec := corev1.PodTemplateSpec{ From cc2f92a7ea84db56fd9ff99388f7f0dc5d2904e1 Mon Sep 17 00:00:00 2001 From: Ang Gao Date: Fri, 25 Sep 2020 12:47:44 +0100 Subject: [PATCH 2/2] fix log msg and update ResolveAuthRef Signed-off-by: Ang Gao --- pkg/scaling/resolver/scale_resolvers.go | 4 ++++ pkg/scaling/scale_handler.go | 9 ++------- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/pkg/scaling/resolver/scale_resolvers.go b/pkg/scaling/resolver/scale_resolvers.go index a9828c0d763..8469636b38f 100644 --- a/pkg/scaling/resolver/scale_resolvers.go +++ b/pkg/scaling/resolver/scale_resolvers.go @@ -58,6 +58,10 @@ func ResolveAuthRef(client client.Client, logger logr.Logger, triggerAuthRef *ke } if triggerAuth.Spec.Env != nil { for _, e := range triggerAuth.Spec.Env { + if podSpec == nil { + result[e.Parameter] = "" + continue + } env, err := ResolveContainerEnv(client, logger, podSpec, e.ContainerName, namespace) if err != nil { result[e.Parameter] = "" diff --git a/pkg/scaling/scale_handler.go b/pkg/scaling/scale_handler.go index 491c1860cea..328d9bd5e67 100644 --- a/pkg/scaling/scale_handler.go +++ b/pkg/scaling/scale_handler.go @@ -306,11 +306,7 @@ func (h *scaleHandler) buildScalers(withTriggers *kedav1alpha1.WithTriggers, pod } for i, trigger := range withTriggers.Spec.Triggers { - var authParams map[string]string - var podIdentity string - if podTemplateSpec != nil { - authParams, podIdentity = resolver.ResolveAuthRef(h.client, logger, trigger.AuthenticationRef, &podTemplateSpec.Spec, withTriggers.Namespace) - } + authParams, podIdentity := resolver.ResolveAuthRef(h.client, logger, trigger.AuthenticationRef, &podTemplateSpec.Spec, withTriggers.Namespace) if podIdentity == kedav1alpha1.PodIdentityProviderAwsEKS { serviceAccountName := podTemplateSpec.Spec.ServiceAccountName serviceAccount := &corev1.ServiceAccount{} @@ -353,8 +349,7 @@ func (h *scaleHandler) getPods(scalableObject interface{}) (*corev1.PodTemplateS } if withPods.Spec.Template.Spec.Containers == nil { - h.logger.Info("There aren't any containers in the ScaleTarget", "resource", obj.Status.ScaleTargetGVKR.GVKString(), "name", obj.Spec.ScaleTargetRef.Name) - h.logger.Info("You may not be able to use all scaler types") + h.logger.V(1).Info("There aren't any containers found in the ScaleTarget, therefore it is no possible to inject environment properties", "resource", obj.Status.ScaleTargetGVKR.GVKString(), "name", obj.Spec.ScaleTargetRef.Name) return nil, "", nil }