diff --git a/civo/kubernetes/resource_kubernetes_cluster.go b/civo/kubernetes/resource_kubernetes_cluster.go index 12eb9c52..403381d8 100644 --- a/civo/kubernetes/resource_kubernetes_cluster.go +++ b/civo/kubernetes/resource_kubernetes_cluster.go @@ -2,7 +2,9 @@ package kubernetes import ( "context" + "errors" "fmt" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" "log" "strings" "time" @@ -460,7 +462,7 @@ func resourceKubernetesClusterUpdate(ctx context.Context, d *schema.ResourceData } // function to delete the kubernetes cluster -func resourceKubernetesClusterDelete(_ context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceKubernetesClusterDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { apiClient := m.(*civogo.Client) // overwrite the region if it is defined in the datasource @@ -474,6 +476,30 @@ func resourceKubernetesClusterDelete(_ context.Context, d *schema.ResourceData, return diag.Errorf("[INFO] an error occurred while trying to delete the kubernetes cluster %s", err) } + // Wait for the cluster to be completely deleted + deleteStateConf := &retry.StateChangeConf{ + Pending: []string{"DELETING"}, + Target: []string{"DELETED"}, + Refresh: func() (interface{}, string, error) { + resp, err := apiClient.GetKubernetesCluster(d.Id()) + if err != nil { + if errors.Is(err, civogo.DatabaseKubernetesClusterNotFoundError) { + return 0, "DELETED", nil + } + return 0, "", err + } + return resp, resp.Status, nil + }, + Timeout: 60 * time.Minute, + Delay: 10 * time.Second, + MinTimeout: 5 * time.Second, + NotFoundChecks: 10, + } + _, err = deleteStateConf.WaitForStateContext(ctx) + if err != nil { + return diag.Errorf("error waiting for instance (%s) to be deleted: %s", d.Id(), err) + } + return nil } diff --git a/civo/network/resource_network.go b/civo/network/resource_network.go index 59d6ff56..ebab228e 100644 --- a/civo/network/resource_network.go +++ b/civo/network/resource_network.go @@ -4,13 +4,13 @@ import ( "context" "errors" "fmt" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" "log" "time" "github.com/civo/civogo" "github.com/civo/terraform-provider-civo/internal/utils" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) @@ -239,7 +239,7 @@ func resourceNetworkDelete(_ context.Context, d *schema.ResourceData, m interfac networkID := d.Id() log.Printf("[INFO] Deleting the network %s", networkID) - deleteStateConf := &resource.StateChangeConf{ + deleteStateConf := &retry.StateChangeConf{ Pending: []string{"deleting", "exists"}, Target: []string{"deleted"}, Refresh: func() (interface{}, string, error) { @@ -248,7 +248,6 @@ func resourceNetworkDelete(_ context.Context, d *schema.ResourceData, m interfac if err != nil { return 0, "", err } - // If delete was successful, start polling if resp.Result == "success" { // Check if the network still exists