diff --git a/util/argo/managedfields/managed_fields.go b/util/argo/managedfields/managed_fields.go index cef42e8f2d791..f57104c87dcd7 100644 --- a/util/argo/managedfields/managed_fields.go +++ b/util/argo/managedfields/managed_fields.go @@ -4,6 +4,7 @@ import ( "bytes" "fmt" + log "github.com/sirupsen/logrus" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "sigs.k8s.io/structured-merge-diff/v4/fieldpath" @@ -28,12 +29,15 @@ func Normalize(live, config *unstructured.Unstructured, trustedManagers []string liveCopy := live.DeepCopy() configCopy := config.DeepCopy() + normalized := false + results, err := newTypedResults(liveCopy, configCopy, pt) + // error might happen if the resources are not parsable and so cannot be normalized if err != nil { - return nil, nil, fmt.Errorf("error building typed results: %s", err) + log.Debugf("error building typed results: %v", err) + return liveCopy, configCopy, nil } - normalized := false for _, mf := range live.GetManagedFields() { if trustedManager(mf.Manager, trustedManagers) { err := normalize(mf, results) diff --git a/util/argo/managedfields/managed_fields_test.go b/util/argo/managedfields/managed_fields_test.go index 1085c66a3dab3..ea8d2e545b033 100644 --- a/util/argo/managedfields/managed_fields_test.go +++ b/util/argo/managedfields/managed_fields_test.go @@ -143,6 +143,16 @@ func TestNormalize(t *testing.T) { assert.Equal(t, 1, len(vwcConfig.Webhooks)) assert.Equal(t, "", string(vwcConfig.Webhooks[0].ClientConfig.CABundle)) }) + t.Run("does not fail if object fails validation schema", func(t *testing.T) { + desiredState := StrToUnstructured(testdata.DesiredDeploymentYaml) + require.NoError(t, unstructured.SetNestedField(desiredState.Object, "spec", "hello", "world")) + liveState := StrToUnstructured(testdata.LiveDeploymentWithManagedReplicaYaml) + + pt := parser.Type("io.k8s.api.apps.v1.Deployment") + + _, _, err := managedfields.Normalize(liveState, desiredState, []string{}, &pt) + require.NoError(t, err) + }) } func validateNestedFloat64(t *testing.T, expected float64, obj *unstructured.Unstructured, fields ...string) {