Skip to content

Commit

Permalink
feat: proactively check for RUM before safe delete
Browse files Browse the repository at this point in the history
  • Loading branch information
emlanctot committed Nov 21, 2022
1 parent 917f4bf commit 3ecde5c
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 0 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## Unreleased
FEATURES:
* r/tfe_workspace: Add preemptive check for resources under management when `force_delete` attribute is false ([#699](https://github.com/hashicorp/terraform-provider-tfe/pull/699))

## v0.39.0 (November 18, 2022)

FEATURES:
Expand Down
16 changes: 16 additions & 0 deletions tfe/resource_tfe_workspace.go
Original file line number Diff line number Diff line change
Expand Up @@ -700,6 +700,10 @@ func resourceTFEWorkspaceDelete(d *schema.ResourceData, meta interface{}) error
if forceDelete {
err = tfeClient.Workspaces.DeleteByID(ctx, id)
} else {
err = errWorkspaceResourceCountCheck(id, ws.ResourceCount)
if err != nil {
return err
}
err = tfeClient.Workspaces.SafeDeleteByID(ctx, id)
return errWorkspaceSafeDeleteWithPermission(id, err)
}
Expand All @@ -708,6 +712,10 @@ func resourceTFEWorkspaceDelete(d *schema.ResourceData, meta interface{}) error
return fmt.Errorf(
"Error deleting workspace %s: missing required permissions to set force delete workspaces in the organization.", id)
}
err = errWorkspaceResourceCountCheck(id, ws.ResourceCount)
if err != nil {
return err
}
err = tfeClient.Workspaces.SafeDeleteByID(ctx, id)
}

Expand Down Expand Up @@ -814,3 +822,11 @@ func errWorkspaceSafeDeleteWithPermission(workspaceID string, err error) error {
}
return nil
}

func errWorkspaceResourceCountCheck(workspaceID string, resourceCount int) error {
if resourceCount > 0 {
return fmt.Errorf(
"Error deleting workspace %s: This workspace has %v resources under management and must be force deleted by setting force_delete = true", workspaceID, resourceCount)
}
return nil
}
8 changes: 8 additions & 0 deletions tfe/resource_tfe_workspace_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1917,6 +1917,7 @@ func TestTFEWorkspace_delete_withoutCanForceDeletePermission(t *testing.T) {
t.Fatalf("unexpected err creating mock workspace %v", err)
}
workspace.Permissions.CanForceDelete = nil
workspace.ResourceCount = 2

rd := resourceTFEWorkspace().TestResourceData()
rd.SetId(workspace.ID)
Expand All @@ -1925,6 +1926,13 @@ func TestTFEWorkspace_delete_withoutCanForceDeletePermission(t *testing.T) {
t.Fatalf("unexpected err creating configuration state %v", err)
}

err = resourceTFEWorkspaceDelete(rd, client)
if err == nil {
t.Fatalf("Expected an error deleting workspace with CanForceDelete=nil, force_delete=true, and %v resources", workspace.ResourceCount)
}

workspace.ResourceCount = 0

err = resourceTFEWorkspaceDelete(rd, client)
if err == nil {
t.Fatalf("Expected an error deleting workspace with CanForceDelete=nil and force_delete=false")
Expand Down

0 comments on commit 3ecde5c

Please sign in to comment.