fix: provider v0.1.8 — wait for trigger URL after create
trigger_resource.go: after CreateTrigger, if URL is empty (HTTP trigger), retry GetTrigger every 2s up to 30s until controller sets status.URL. Without this, URL in terraform state was always empty after apply.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
// 2026-03-08
|
||||
// 2026-03-08, обновлено 2025-06-05
|
||||
// trigger_resource.go — Terraform ресурс sless_trigger.
|
||||
// Поддерживает type=http (создаёт Service+Ingress) и type=cron (запускает по schedule).
|
||||
// enabled=false: масштабирует Deployment функции до 0 (не принимает запросы, не потребляет ресурсы).
|
||||
@@ -8,6 +8,7 @@ package resources
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"terraform-provider-sless/internal/client"
|
||||
|
||||
@@ -147,6 +148,22 @@ func (r *TriggerResource) Create(ctx context.Context, req resource.CreateRequest
|
||||
return
|
||||
}
|
||||
|
||||
// Контроллер заполняет status.URL асинхронно — ждём до 30 секунд.
|
||||
// Без этого URL остаётся пустым в state и требует ручного terraform refresh.
|
||||
if tr.URL == "" && plan.Type.ValueString() == "http" {
|
||||
ns := plan.Namespace.ValueString()
|
||||
name := plan.Name.ValueString()
|
||||
deadline := time.Now().Add(30 * time.Second)
|
||||
for time.Now().Before(deadline) {
|
||||
time.Sleep(2 * time.Second)
|
||||
got, gerr := r.client.GetTrigger(ctx, ns, name)
|
||||
if gerr == nil && got != nil && got.URL != "" {
|
||||
tr = got
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
resp.Diagnostics.Append(resp.State.Set(ctx, trToModel(tr))...)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user