|
1 | 1 | package cloudfoundry
|
2 | 2 |
|
3 | 3 | import (
|
4 |
| - "code.cloudfoundry.org/cli/api/cloudcontroller/ccv2" |
5 | 4 | "context"
|
| 5 | + |
| 6 | + "code.cloudfoundry.org/cli/api/cloudcontroller/ccv2" |
| 7 | + "code.cloudfoundry.org/cli/api/cloudcontroller/ccv3" |
6 | 8 | "github.com/hashicorp/go-uuid"
|
7 | 9 | "github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
8 | 10 | "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
@@ -86,6 +88,12 @@ func resourceSpace() *schema.Resource {
|
86 | 88 | },
|
87 | 89 | labelsKey: labelsSchema(),
|
88 | 90 | annotationsKey: annotationsSchema(),
|
| 91 | + "delete_recursive_allowed": { |
| 92 | + Type: schema.TypeBool, |
| 93 | + Optional: true, |
| 94 | + Default: true, |
| 95 | + Description: "Allow recursive deletion of apps, routes, service instances.", |
| 96 | + }, |
89 | 97 | },
|
90 | 98 | }
|
91 | 99 | }
|
@@ -311,11 +319,48 @@ func resourceSpaceUpdate(ctx context.Context, d *schema.ResourceData, meta inter
|
311 | 319 |
|
312 | 320 | func resourceSpaceDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
|
313 | 321 | session := meta.(*managers.Session)
|
314 |
| - j, _, err := session.ClientV2.DeleteSpace(d.Id()) |
| 322 | + |
| 323 | + if !session.Config.DeleteRecursiveAllowed { |
| 324 | + // Check for apps |
| 325 | + apps, _, err := session.ClientV3.GetApplications(ccv3.Query{ |
| 326 | + Key: ccv3.SpaceGUIDFilter, |
| 327 | + Values: []string{d.Id()}, |
| 328 | + }) |
| 329 | + if err != nil { |
| 330 | + return diag.FromErr(err) |
| 331 | + } |
| 332 | + if len(apps) > 0 { |
| 333 | + return diag.Errorf("Space %s has %d apps. Please delete them first or set delete_recursive_allowed to true", d.Id(), len(apps)) |
| 334 | + } |
| 335 | + // Check routes |
| 336 | + routes, _, err := session.ClientV3.GetRoutes(ccv3.Query{ |
| 337 | + Key: ccv3.SpaceGUIDFilter, |
| 338 | + Values: []string{d.Id()}, |
| 339 | + }) |
| 340 | + if err != nil { |
| 341 | + return diag.FromErr(err) |
| 342 | + } |
| 343 | + if len(routes) > 0 { |
| 344 | + return diag.Errorf("Space %s has %d routes. Please delete them first or set delete_recursive_allowed to true", d.Id(), len(routes)) |
| 345 | + } |
| 346 | + // Check service instances |
| 347 | + serviceInstances, _, _, err := session.ClientV3.GetServiceInstances(ccv3.Query{ |
| 348 | + Key: ccv3.SpaceGUIDFilter, |
| 349 | + Values: []string{d.Id()}, |
| 350 | + }) |
| 351 | + if err != nil { |
| 352 | + return diag.FromErr(err) |
| 353 | + } |
| 354 | + if len(serviceInstances) > 0 { |
| 355 | + return diag.Errorf("Space %s has %d service instances. Please delete them first or set delete_recursive_allowed to true", d.Id(), len(serviceInstances)) |
| 356 | + } |
| 357 | + } |
| 358 | + |
| 359 | + j, _, err := session.ClientV3.DeleteSpace(d.Id()) |
315 | 360 | if err != nil {
|
316 | 361 | return diag.FromErr(err)
|
317 | 362 | }
|
318 |
| - _, err = session.ClientV2.PollJob(j) |
| 363 | + _, err = session.ClientV3.PollJob(j) |
319 | 364 | if err != nil {
|
320 | 365 | return diag.FromErr(err)
|
321 | 366 | }
|
|
0 commit comments