@@ -3,13 +3,17 @@ package loadbalancer_test
33import (
44 "context"
55 "fmt"
6+ "strings"
67 "testing"
78
89 "github.com/hashicorp/terraform-plugin-testing/helper/acctest"
910 "github.com/hashicorp/terraform-plugin-testing/helper/resource"
1011 "github.com/hashicorp/terraform-plugin-testing/terraform"
12+ "github.com/stackitcloud/stackit-sdk-go/services/loadbalancer/wait"
13+ "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/core"
1114
1215 "github.com/stackitcloud/stackit-sdk-go/core/config"
16+ "github.com/stackitcloud/stackit-sdk-go/core/utils"
1317 "github.com/stackitcloud/stackit-sdk-go/services/loadbalancer"
1418 "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/testutil"
1519)
@@ -354,7 +358,7 @@ type OpenStack struct {
354358 password string
355359}
356360
357- func testAccCheckLoadBalancerDestroy (_ * terraform.State ) error {
361+ func testAccCheckLoadBalancerDestroy (s * terraform.State ) error {
358362 ctx := context .Background ()
359363 var client * loadbalancer.APIClient
360364 var err error
@@ -371,11 +375,41 @@ func testAccCheckLoadBalancerDestroy(_ *terraform.State) error {
371375 return fmt .Errorf ("creating client: %w" , err )
372376 }
373377
374- // Disabling loadbalancer functionality will delete all load balancers
375- _ , err = client .DisableServiceExecute (ctx , testutil .ProjectId )
378+ loadbalancersToDestroy := []string {}
379+ for _ , rs := range s .RootModule ().Resources {
380+ if rs .Type != "stackit_loadbalancer" {
381+ continue
382+ }
383+ // loadbalancer terraform ID: = "[project_id],[name]"
384+ loadbalancerName := strings .Split (rs .Primary .ID , core .Separator )[1 ]
385+ loadbalancersToDestroy = append (loadbalancersToDestroy , loadbalancerName )
386+ }
387+
388+ loadbalancersResp , err := client .ListLoadBalancers (ctx , testutil .ProjectId ).Execute ()
376389 if err != nil {
377- return fmt .Errorf ("disabling loadbalancer functionality: %w" , err )
390+ return fmt .Errorf ("getting loadbalancersResp: %w" , err )
391+ }
392+
393+ if loadbalancersResp .LoadBalancers == nil || (loadbalancersResp .LoadBalancers != nil && len (* loadbalancersResp .LoadBalancers ) == 0 ) {
394+ fmt .Print ("No load balancers found for project \n " )
395+ return nil
378396 }
379397
398+ items := * loadbalancersResp .LoadBalancers
399+ for i := range items {
400+ if items [i ].Name == nil {
401+ continue
402+ }
403+ if utils .Contains (loadbalancersToDestroy , * items [i ].Name ) {
404+ _ , err := client .DeleteLoadBalancerExecute (ctx , testutil .ProjectId , * items [i ].Name )
405+ if err != nil {
406+ return fmt .Errorf ("destroying load balancer %s during CheckDestroy: %w" , * items [i ].Name , err )
407+ }
408+ _ , err = wait .DeleteLoadBalancerWaitHandler (ctx , client , testutil .ProjectId , * items [i ].Name ).WaitWithContext (ctx )
409+ if err != nil {
410+ return fmt .Errorf ("destroying load balancer %s during CheckDestroy: waiting for deletion %w" , * items [i ].Name , err )
411+ }
412+ }
413+ }
380414 return nil
381415}
0 commit comments