diff --git a/go.mod b/go.mod index f0bed90c14..103f54d24c 100644 --- a/go.mod +++ b/go.mod @@ -26,7 +26,7 @@ require ( github.com/gonvenience/ytbx v1.4.2 github.com/google/go-cmp v0.5.6 github.com/google/go-containerregistry v0.2.0 - github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/hashicorp/go-multierror v1.1.1 github.com/hashicorp/go-retryablehttp v0.7.0 // indirect github.com/homeport/dyff v1.4.6 github.com/lucasb-eyer/go-colorful v1.2.0 diff --git a/internal/build/diff.go b/internal/build/diff.go index 13a8270aa3..4e67e10b08 100644 --- a/internal/build/diff.go +++ b/internal/build/diff.go @@ -32,6 +32,7 @@ import ( "github.com/gonvenience/bunt" "github.com/gonvenience/ytbx" "github.com/google/go-cmp/cmp" + "github.com/hashicorp/go-multierror" "github.com/homeport/dyff/pkg/dyff" "github.com/lucasb-eyer/go-colorful" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" @@ -76,6 +77,7 @@ func (b *Builder) Diff() (string, bool, error) { return "", createdOrDrifted, err } + var diffErrs error // create an inventory of objects to be reconciled newInventory := newInventory() for _, obj := range objects { @@ -86,11 +88,8 @@ func (b *Builder) Diff() (string, bool, error) { } change, liveObject, mergedObject, err := resourceManager.Diff(ctx, obj, diffOptions) if err != nil { - if b.kustomization.Spec.Force && ssa.IsImmutableError(err) { - output.WriteString(writeString(fmt.Sprintf("► %s created\n", obj.GetName()), bunt.Green)) - } else { - output.WriteString(writeString(fmt.Sprintf("✗ %v\n", err), bunt.Red)) - } + // gather errors and continue, as we want to see all the diffs + diffErrs = multierror.Append(diffErrs, err) continue } @@ -124,7 +123,7 @@ func (b *Builder) Diff() (string, bool, error) { addObjectsToInventory(newInventory, change) } - if b.kustomization.Spec.Prune { + if b.kustomization.Spec.Prune && diffErrs == nil { oldStatus := b.kustomization.Status.DeepCopy() if oldStatus.Inventory != nil { diffObjects, err := diffInventory(oldStatus.Inventory, newInventory) @@ -137,7 +136,7 @@ func (b *Builder) Diff() (string, bool, error) { } } - return output.String(), createdOrDrifted, nil + return output.String(), createdOrDrifted, diffErrs } func writeYamls(liveObject, mergedObject *unstructured.Unstructured) (string, string, string, error) {