From 7fe87c308f5f0d3c5b7f400d58e75bcbc082baa8 Mon Sep 17 00:00:00 2001 From: Rui Vieira Date: Wed, 31 Jul 2024 01:22:42 +0100 Subject: [PATCH] feat: ConfigMap key to disable KServe Serverless configuration --- config/base/kustomization.yaml | 7 ++++++ config/base/params.env | 1 + controllers/config_maps.go | 38 +++++++++++++++++++++++++++++++ controllers/constants.go | 7 +++--- controllers/inference_services.go | 16 +++++++++---- 5 files changed, 62 insertions(+), 7 deletions(-) diff --git a/config/base/kustomization.yaml b/config/base/kustomization.yaml index ab0b973..0247b9b 100644 --- a/config/base/kustomization.yaml +++ b/config/base/kustomization.yaml @@ -41,3 +41,10 @@ vars: apiVersion: v1 fieldref: fieldpath: data.oauthProxyImage + - name: kServeServerless + objref: + kind: ConfigMap + name: config + apiVersion: v1 + fieldref: + fieldpath: data.kServeServerless \ No newline at end of file diff --git a/config/base/params.env b/config/base/params.env index 68d67aa..a0f5419 100644 --- a/config/base/params.env +++ b/config/base/params.env @@ -1,3 +1,4 @@ trustyaiServiceImage=quay.io/trustyai/trustyai-service:latest trustyaiOperatorImage=quay.io/trustyai/trustyai-service-operator:latest oauthProxyImage=quay.io/openshift/origin-oauth-proxy:4.14.0 +kServeServerless=disabled \ No newline at end of file diff --git a/controllers/config_maps.go b/controllers/config_maps.go index 6eceb84..a4885ab 100644 --- a/controllers/config_maps.go +++ b/controllers/config_maps.go @@ -46,6 +46,44 @@ func (r *TrustyAIServiceReconciler) getImageFromConfigMap(ctx context.Context, k } } +// getKServeServerlessConfig checks the kServeServerless value in a ConfigMap in the operator's namespace +func (r *TrustyAIServiceReconciler) getKServeServerlessConfig(ctx context.Context) (bool, error) { + + if r.Namespace != "" { + // Define the key for the ConfigMap + configMapKey := types.NamespacedName{ + Namespace: r.Namespace, + Name: imageConfigMap, + } + + // Create an empty ConfigMap object + var cm corev1.ConfigMap + + // Try to get the ConfigMap + if err := r.Get(ctx, configMapKey, &cm); err != nil { + if errors.IsNotFound(err) { + // ConfigMap not found, return false as the default behavior + return false, nil + } + // Other error occurred when trying to fetch the ConfigMap + return false, fmt.Errorf("error reading configmap %s", configMapKey) + } + + // ConfigMap is found, extract the kServeServerless value + kServeServerless, ok := cm.Data[configMapkServeServerlessKey] + + if !ok || kServeServerless != "enabled" { + // Key is missing or its value is not "enabled", return false + return false, nil + } + + // kServeServerless is "enabled" + return true, nil + } else { + return false, nil + } +} + // getConfigMapNamesWithLabel retrieves the names of ConfigMaps that have the specified label func (r *TrustyAIServiceReconciler) getConfigMapNamesWithLabel(ctx context.Context, namespace string, labelSelector client.MatchingLabels) ([]string, error) { configMapList := &corev1.ConfigMapList{} diff --git a/controllers/constants.go b/controllers/constants.go index 1fc4eb9..2c7081b 100644 --- a/controllers/constants.go +++ b/controllers/constants.go @@ -26,9 +26,10 @@ const ( // Configuration constants const ( - imageConfigMap = "trustyai-service-operator-config" - configMapOAuthProxyImageKey = "oauthProxyImage" - configMapServiceImageKey = "trustyaiServiceImage" + imageConfigMap = "trustyai-service-operator-config" + configMapOAuthProxyImageKey = "oauthProxyImage" + configMapServiceImageKey = "trustyaiServiceImage" + configMapkServeServerlessKey = "kServeServerless" ) // OAuth constants diff --git a/controllers/inference_services.go b/controllers/inference_services.go index 5f22e47..db426d4 100644 --- a/controllers/inference_services.go +++ b/controllers/inference_services.go @@ -199,6 +199,12 @@ func (r *TrustyAIServiceReconciler) handleInferenceServices(ctx context.Context, return false, err } + kServeServerlessEnabled, err := r.getKServeServerlessConfig(ctx) + if err != nil { + log.FromContext(ctx).Error(err, "Could not read KServeServerless configuration. Defaulting to disabled") + kServeServerlessEnabled = false + } + if len(inferenceServices.Items) == 0 { return true, nil } @@ -220,10 +226,12 @@ func (r *TrustyAIServiceReconciler) handleInferenceServices(ctx context.Context, continue } } - err := r.patchKServe(ctx, instance, infService, namespace, crName, remove) - if err != nil { - log.FromContext(ctx).Error(err, "could not patch InferenceLogger for KServe deployment") - return false, err + if kServeServerlessEnabled { + err := r.patchKServe(ctx, instance, infService, namespace, crName, remove) + if err != nil { + log.FromContext(ctx).Error(err, "could not patch InferenceLogger for KServe deployment") + return false, err + } } } return true, nil