fix: destroy route cleanup bug — delete Service+Ingress on trigger/function deletion

- controllers/trigger_controller.go: handleTriggerDeletion теперь удаляет Service
  и Ingress из sless-fn-{ns} при удалении HTTP-триггера
- controllers/function_controller.go: handleDeletion теперь удаляет Service и Ingress
  (имена совпадают с fn.Name); добавлен импорт netv1
- terraform/provider trigger_resource.go: Delete ждёт пока GetTrigger вернёт 404
  (до 90с) — провайдер не возвращает успех раньше чем cleanup завершён
- examples: версия провайдера обновлена до ~> 0.1.11

Operator: naeel/sless-operator:v0.1.17
Provider: v0.1.11

Fixes DESTROY_ROUTE_CLEANUP_BUG.md
This commit is contained in:
“Naeel”
2026-03-09 19:23:28 +04:00
parent 9b4ec729b5
commit 1676bf3c5a
7 changed files with 56 additions and 8 deletions
+19 -2
View File
@@ -282,8 +282,25 @@ func (r *TriggerReconciler) handleTriggerDeletion(ctx context.Context, tr *sless
_ = r.Delete(ctx, cj)
}
}
// Ingress/Service для HTTP триггеров оставляем — они могут быть нужны другим триггерам,
// полная очистка происходит при удалении Function через function_controller finalizer
// Для HTTP триггеров удаляем Service и Ingress из sless-fn-{namespace}.
// Имена ресурсов совпадают с именем функции (FunctionRef).
// Без этого Ingress остаётся висеть после destroy и endpoint возвращает 502.
if tr.Spec.Type == slessv1alpha1.TriggerTypeHTTP {
deployNS := "sless-fn-" + tr.Namespace
fnName := tr.Spec.FunctionRef
svc := &corev1.Service{}
if err := r.Get(ctx, client.ObjectKey{Name: fnName, Namespace: deployNS}, svc); err == nil {
_ = r.Delete(ctx, svc)
}
ing := &netv1.Ingress{}
if err := r.Get(ctx, client.ObjectKey{Name: fnName, Namespace: deployNS}, ing); err == nil {
_ = r.Delete(ctx, ing)
}
}
tr.Finalizers = removeString(tr.Finalizers, triggerFinalizer)
if err := r.Update(ctx, tr); err != nil {
return ctrl.Result{}, fmt.Errorf("remove trigger finalizer: %w", err)