Skip to content

Commit

Permalink
[TF-20104] Add force delete for stacks
Browse files Browse the repository at this point in the history
  • Loading branch information
hashimoon committed Sep 5, 2024
1 parent 1e9f842 commit ebf8969
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 0 deletions.
13 changes: 13 additions & 0 deletions stack.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ type Stacks interface {
// Delete deletes a stack.
Delete(ctx context.Context, stackID string) error

// Delete deletes a stack.
ForceDelete(ctx context.Context, stackID string) error

// UpdateConfiguration updates the configuration of a stack, triggering stack preparation.
UpdateConfiguration(ctx context.Context, stackID string) (*Stack, error)
}
Expand Down Expand Up @@ -297,6 +300,16 @@ func (s stacks) Delete(ctx context.Context, stackID string) error {
return req.Do(ctx, nil)
}

// Force Delete deletes a stack that .
func (s stacks) ForceDelete(ctx context.Context, stackID string) error {
req, err := s.client.NewRequest("POST", fmt.Sprintf("stacks/%s/force-delete", url.PathEscape(stackID)), nil)
if err != nil {
return err
}

return req.Do(ctx, nil)
}

func (s *StackListOptions) valid() error {
return nil
}
Expand Down
57 changes: 57 additions & 0 deletions stack_integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,63 @@ func TestStackReadUpdateDelete(t *testing.T) {
require.Nil(t, stackReadAfterDelete)
}

func TestStackReadUpdateForceDelete(t *testing.T) {
skipUnlessBeta(t)

client := testClient(t)
ctx := context.Background()

orgTest, orgTestCleanup := createOrganization(t, client)
t.Cleanup(orgTestCleanup)

oauthClient, cleanup := createOAuthClient(t, client, orgTest, nil)
t.Cleanup(cleanup)

stack, err := client.Stacks.Create(ctx, StackCreateOptions{
Name: "test-stack",
VCSRepo: &StackVCSRepo{
Identifier: "brandonc/pet-nulls-stack",
OAuthTokenID: oauthClient.OAuthTokens[0].ID,
Branch: "main",
},
Project: &Project{
ID: orgTest.DefaultProject.ID,
},
})

require.NoError(t, err)
require.NotNil(t, stack)
require.NotEmpty(t, stack.VCSRepo.Identifier)
require.NotEmpty(t, stack.VCSRepo.OAuthTokenID)
require.NotEmpty(t, stack.VCSRepo.Branch)

stackRead, err := client.Stacks.Read(ctx, stack.ID, nil)
require.NoError(t, err)
require.Equal(t, stack.VCSRepo.Identifier, stackRead.VCSRepo.Identifier)
require.Equal(t, stack.VCSRepo.OAuthTokenID, stackRead.VCSRepo.OAuthTokenID)
require.Equal(t, stack.VCSRepo.Branch, stackRead.VCSRepo.Branch)

assert.Equal(t, stack, stackRead)

stackUpdated, err := client.Stacks.Update(ctx, stack.ID, StackUpdateOptions{
Description: String("updated description"),
})

require.NoError(t, err)
require.Equal(t, "updated description", stackUpdated.Description)

stackUpdatedConfig, err := client.Stacks.UpdateConfiguration(ctx, stack.ID)
require.NoError(t, err)
require.Equal(t, stack.Name, stackUpdatedConfig.Name)

err = client.Stacks.ForceDelete(ctx, stack.ID)
require.NoError(t, err)

stackReadAfterDelete, err := client.Stacks.Read(ctx, stack.ID, nil)
require.ErrorIs(t, err, ErrResourceNotFound)
require.Nil(t, stackReadAfterDelete)
}

func pollStackDeployments(t *testing.T, ctx context.Context, client *Client, stackID string) (stack *Stack) {
t.Helper()

Expand Down

0 comments on commit ebf8969

Please sign in to comment.