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:
@@ -209,9 +209,28 @@ func (r *TriggerResource) Delete(ctx context.Context, req resource.DeleteRequest
|
||||
return
|
||||
}
|
||||
|
||||
if err := r.client.DeleteTrigger(ctx, r.client.Namespace, state.Name.ValueString()); err != nil {
|
||||
name := state.Name.ValueString()
|
||||
if err := r.client.DeleteTrigger(ctx, r.client.Namespace, name); err != nil {
|
||||
resp.Diagnostics.AddError("delete trigger", err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
// Ждём, пока триггер исчезнет из API.
|
||||
// Финалайзер контроллера снимается ПОСЛЕ того, как Service+Ingress удалены,
|
||||
// поэтому когда GetTrigger возвращает nil (404) — маршрут уже убран и endpoint мёртв.
|
||||
deadline := time.Now().Add(90 * time.Second)
|
||||
for time.Now().Before(deadline) {
|
||||
tr, err := r.client.GetTrigger(ctx, r.client.Namespace, name)
|
||||
if err != nil {
|
||||
resp.Diagnostics.AddError("wait trigger gone", err.Error())
|
||||
return
|
||||
}
|
||||
if tr == nil {
|
||||
return // триггер исчез — cleanup завершён
|
||||
}
|
||||
time.Sleep(3 * time.Second)
|
||||
}
|
||||
resp.Diagnostics.AddError("wait trigger gone", fmt.Sprintf("trigger %s still exists after 90s", name))
|
||||
}
|
||||
|
||||
// trToModel конвертирует API-ответ → state модель.
|
||||
|
||||
Reference in New Issue
Block a user