From 1b05b01db0c86f0a3b5bc72fd55764675e00f57e Mon Sep 17 00:00:00 2001 From: Joseph Rajewski Date: Thu, 21 Jul 2022 11:03:40 -0400 Subject: [PATCH 1/6] Warn user that resources may not be completely destroyed for an incomplete deployment. --- internal/cli/deployment_destroy.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/internal/cli/deployment_destroy.go b/internal/cli/deployment_destroy.go index 4c08b0aa2fa..11c7e4f29d9 100644 --- a/internal/cli/deployment_destroy.go +++ b/internal/cli/deployment_destroy.go @@ -63,7 +63,8 @@ func (c *DeploymentDestroyCommand) Run(args []string) int { for _, deployment := range deployments { // Can't destroy a deployment that was not successful if deployment.Status.GetState() != pb.Status_SUCCESS { - continue + c.ui.Output("The deployment was not successful - destroy may not completely destroy "+ + "all resources", terminal.WithWarningStyle()) } // Get our app client From 83708c60056145a993d3b3ce4d5aae999f20d1b0 Mon Sep 17 00:00:00 2001 From: Joseph Rajewski Date: Tue, 26 Jul 2022 10:45:30 -0400 Subject: [PATCH 2/6] Add sequence # to message warning user about failed deployment. --- internal/cli/deployment_destroy.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/cli/deployment_destroy.go b/internal/cli/deployment_destroy.go index 11c7e4f29d9..a243b8e3c7f 100644 --- a/internal/cli/deployment_destroy.go +++ b/internal/cli/deployment_destroy.go @@ -63,8 +63,8 @@ func (c *DeploymentDestroyCommand) Run(args []string) int { for _, deployment := range deployments { // Can't destroy a deployment that was not successful if deployment.Status.GetState() != pb.Status_SUCCESS { - c.ui.Output("The deployment was not successful - destroy may not completely destroy "+ - "all resources", terminal.WithWarningStyle()) + c.ui.Output("Deployment %d was not successful - destroy may not completely destroy "+ + "all resources", deployment.Sequence, terminal.WithWarningStyle()) } // Get our app client From 2108e232d47a9d0d6ab104307b62a11b4f62352d Mon Sep 17 00:00:00 2001 From: Joseph Rajewski Date: Tue, 26 Jul 2022 10:50:01 -0400 Subject: [PATCH 3/6] Changelog. --- .changelog/3602.txt | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 .changelog/3602.txt diff --git a/.changelog/3602.txt b/.changelog/3602.txt new file mode 100644 index 00000000000..481de821357 --- /dev/null +++ b/.changelog/3602.txt @@ -0,0 +1,4 @@ +```release-note:bug +cli: Update deployment destroy to proceed with deleting resources for failed +deployments +``` \ No newline at end of file From 36f04093d1dd7ddcbb6d903e4a36ea678d4425e4 Mon Sep 17 00:00:00 2001 From: Joe <83741749+paladin-devops@users.noreply.github.com> Date: Wed, 27 Jul 2022 11:49:37 -0400 Subject: [PATCH 4/6] Clarify warning of attempt to delete resources on failed deployments. Co-authored-by: Clint --- .changelog/3602.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.changelog/3602.txt b/.changelog/3602.txt index 481de821357..d723d7290e2 100644 --- a/.changelog/3602.txt +++ b/.changelog/3602.txt @@ -1,4 +1,4 @@ ```release-note:bug -cli: Update deployment destroy to proceed with deleting resources for failed -deployments +cli: `deployment destroy` will now attempt to destroy any known resources for failed +deployments. Previously, `destroy` would skip unsuccessful deployments. ``` \ No newline at end of file From fdfc49872a629b9d7a90789607b4e876e6a720a7 Mon Sep 17 00:00:00 2001 From: Joseph Rajewski Date: Wed, 27 Jul 2022 12:23:54 -0400 Subject: [PATCH 5/6] Update deployment destroy loop to proceed with attempting to destroy other deployments, even if one or more errors while being destroyed. --- internal/cli/deployment_destroy.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/internal/cli/deployment_destroy.go b/internal/cli/deployment_destroy.go index a243b8e3c7f..05ed5ff8b22 100644 --- a/internal/cli/deployment_destroy.go +++ b/internal/cli/deployment_destroy.go @@ -76,10 +76,12 @@ func (c *DeploymentDestroyCommand) Run(args []string) int { Deployment: deployment, }, }); err != nil { - c.ui.Output("Error destroying the deployment: %s", err.Error(), terminal.WithErrorStyle()) - return ErrSentinel + c.ui.Output("Error destroying deployment %d: %s", deployment.Sequence, err.Error(), terminal.WithErrorStyle()) } } + if err != nil { + return ErrSentinel + } return nil }) if err != nil { From 322dd27eff057cebc39cec25f58aa65498c158c7 Mon Sep 17 00:00:00 2001 From: Joseph Rajewski Date: Fri, 29 Jul 2022 14:19:12 -0400 Subject: [PATCH 6/6] Return error after destroying deployments if one or more failed to be destroyed. --- internal/cli/deployment_destroy.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/internal/cli/deployment_destroy.go b/internal/cli/deployment_destroy.go index 05ed5ff8b22..dd35b0b0462 100644 --- a/internal/cli/deployment_destroy.go +++ b/internal/cli/deployment_destroy.go @@ -2,6 +2,7 @@ package cli import ( "context" + "errors" "strconv" "github.com/posener/complete" @@ -60,6 +61,7 @@ func (c *DeploymentDestroyCommand) Run(args []string) int { // Destroy each deployment c.ui.Output("%d deployments will be destroyed.", len(deployments), terminal.WithHeaderStyle()) + var destroymentErrors []error for _, deployment := range deployments { // Can't destroy a deployment that was not successful if deployment.Status.GetState() != pb.Status_SUCCESS { @@ -77,10 +79,11 @@ func (c *DeploymentDestroyCommand) Run(args []string) int { }, }); err != nil { c.ui.Output("Error destroying deployment %d: %s", deployment.Sequence, err.Error(), terminal.WithErrorStyle()) + destroymentErrors = append(destroymentErrors, err) } } - if err != nil { - return ErrSentinel + if len(destroymentErrors) > 0 { + return errors.New("one or more deployments failed to be destroyed") } return nil })