fix: stage0 quick fixes (operator v0.1.19)

- TriggerReconciler: RequeueAfter 15s когда Function не Ready
  (ранее зависал без повторного reconcile)
- FunctionJobReconciler: RequeueAfter 15s когда Function не Ready
- UpdateFunction: добавлена валидация runtime/entrypoint/memory_mb
  (ранее мог затереть spec нулями при частичном обновлении)
- CronJob: curlimages/curl:latest → curlimages/curl:8.5.0 (pin version)
- Config: удалён FunctionNamespacePrefix (мёртвое поле, нигде не использовалось)
- Invocations endpoint: возвращает 501 вместо пустого списка
  (SaveInvocation нигде не вызывается — честный ответ клиенту)
- Собран образ naeel/sless-operator:v0.1.19
This commit is contained in:
“Naeel”
2026-03-10 17:36:48 +04:00
parent 7d6f8d6079
commit 408f58a9e2
5 changed files with 32 additions and 72 deletions
+2 -2
View File
@@ -91,8 +91,8 @@ func (r *FunctionJobReconciler) Reconcile(ctx context.Context, req ctrl.Request)
fj.Status.Phase = slessv1alpha1.FunctionJobPhasePending
fj.Status.Message = "waiting for function Ready (current: " + string(fn.Status.Phase) + ")"
_ = r.Status().Update(ctx, fj)
// Повторный reconcile придёт когда Function изменится
return ctrl.Result{}, nil
// RequeueAfter: опрашиваем каждые 15с пока Function не станет Ready.
return ctrl.Result{RequeueAfter: 15 * time.Second}, nil
}
deployNS := "sless-fn-" + fj.Namespace
+8 -5
View File
@@ -1,4 +1,4 @@
// Изменено: 2026-03-08
// Изменено: 2026-03-10
// TriggerReconciler — контроллер триггеров.
// HTTP триггер: создаёт Service + Ingress в namespace функции.
// Cron триггер: создаёт k8s CronJob который периодически вызывает функцию по внутреннему URL.
@@ -8,6 +8,7 @@ package controllers
import (
"context"
"fmt"
"time"
appsv1 "k8s.io/api/apps/v1"
batchv1 "k8s.io/api/batch/v1"
@@ -81,8 +82,9 @@ func (r *TriggerReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct
tr.Status.Active = false
tr.Status.Message = "waiting for function to be Ready (current: " + string(fn.Status.Phase) + ")"
_ = r.Status().Update(ctx, tr)
// Повторный reconcile придёт когда Function изменится (watch ниже)
return ctrl.Result{}, nil
// RequeueAfter: опрашиваем каждые 15с пока Function не станет Ready.
// Watch на Function не добавлен, чтобы не усложнять контроллер на этом этапе.
return ctrl.Result{RequeueAfter: 15 * time.Second}, nil
}
// Управляем масштабом Deployment функции в зависимости от Enabled.
@@ -308,8 +310,9 @@ func (r *TriggerReconciler) handleTriggerDeletion(ctx context.Context, tr *sless
return ctrl.Result{}, nil
}
// SetupWithManager регистрирует контроллер и настраивает watch на Function.
// Когда Function переходит в Ready — Trigger автоматически пересчитывается.
// SetupWithManager регистрирует контроллер.
// Watch на Function не добавлен — вместо этого используется RequeueAfter 15s.
// Это упрощает код на текущем этапе; при росте нагрузки заменить на Watches.
func (r *TriggerReconciler) SetupWithManager(mgr ctrl.Manager) error {
return ctrl.NewControllerManagedBy(mgr).
For(&slessv1alpha1.Trigger{}).