From 38f15706d9f36fb22e9013f6c2e19de54caed2a1 Mon Sep 17 00:00:00 2001 From: Ian Wahbe Date: Thu, 27 Oct 2022 11:23:28 -0700 Subject: [PATCH] fixup! Add `pulumi state delete --target-dependents` --- pkg/cmd/pulumi/state_delete.go | 17 +++++++++-------- pkg/resource/edit/operations.go | 6 +++--- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/pkg/cmd/pulumi/state_delete.go b/pkg/cmd/pulumi/state_delete.go index ea55704351b7..8d7d6cdf71f4 100644 --- a/pkg/cmd/pulumi/state_delete.go +++ b/pkg/cmd/pulumi/state_delete.go @@ -60,9 +60,10 @@ pulumi state delete 'urn:pulumi:stage::demo::eks:index:Cluster$pulumi:providers: res := runStateEdit(ctx, stack, showPrompt, urn, func(snap *deploy.Snapshot, res *resource.State) error { var handleProtected func(*resource.State) error if force { - handleProtected = func(s *resource.State) error { - cmdutil.Diag().Warningf(diag.RawMessage(s.URN, "deleting protected resource due to presence of --force")) - return edit.UnprotectResource(snap, res) + handleProtected = func(res *resource.State) error { + cmdutil.Diag().Warningf(diag.Message(res.URN, + "deleting protected resource %s due to presence of --force"), res.URN) + return edit.UnprotectResource(nil, res) } } return edit.DeleteResource(snap, res, handleProtected, targetDepenedents) @@ -70,18 +71,18 @@ pulumi state delete 'urn:pulumi:stage::demo::eks:index:Cluster$pulumi:providers: if res != nil { switch e := res.Error().(type) { case edit.ResourceHasDependenciesError: - message := "This resource can't be safely deleted because the following resources depend on it:\n" + message := string(e.Condemned.URN) + " can't be safely deleted because the following resources depend on it:\n" for _, dependentResource := range e.Dependencies { depUrn := dependentResource.URN message += fmt.Sprintf(" * %-15q (%s)\n", depUrn.Name(), depUrn) } - message += "\nDelete those resources first before deleting this one." + message += "\nDelete those resources first or pass --target-dependents." return result.Error(message) case edit.ResourceProtectedError: - return result.Error( - "This resource can't be safely deleted because it is protected. " + - "Re-run this command with --force to force deletion") + return result.Errorf( + "%s can't be safely deleted because it is protected. "+ + "Re-run this command with --force to force deletion", string(e.Condemned.URN)) default: return res } diff --git a/pkg/resource/edit/operations.go b/pkg/resource/edit/operations.go index 90e49d9bb2e9..271593d8f2a5 100644 --- a/pkg/resource/edit/operations.go +++ b/pkg/resource/edit/operations.go @@ -36,7 +36,7 @@ type OperationFunc func(*deploy.Snapshot, *resource.State) error // // If non-nil, onProtected will be called on all protected resources planed for deletion. // -// If a resource is marked protected, after onProtected is called, an error instance of +// If a resource is marked protected after onProtected is called, an error instance of // `ResourceHasDependenciesError` will be returned. func DeleteResource( snapshot *deploy.Snapshot, condemnedRes *resource.State, @@ -67,8 +67,8 @@ func DeleteResource( deleteSet := map[resource.URN]bool{ condemnedRes.URN: true, } - dependencies := dg.DependingOn(condemnedRes, nil, true) - if len(dependencies) != 0 { + + if dependencies := dg.DependingOn(condemnedRes, nil, true); len(dependencies) != 0 { if !targetDependents { return ResourceHasDependenciesError{Condemned: condemnedRes, Dependencies: dependencies} }