github.com/argoproj/argo-cd/v3@v3.2.1/util/argo/diff/normalize.go (about) 1 package diff 2 3 import ( 4 "github.com/argoproj/argo-cd/v3/pkg/apis/application/v1alpha1" 5 "github.com/argoproj/argo-cd/v3/util/argo/normalizers" 6 7 "github.com/argoproj/gitops-engine/pkg/diff" 8 "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" 9 ) 10 11 // Normalize applies the full normalization on the lives and configs resources based 12 // on the provided DiffConfig. 13 func Normalize(lives, configs []*unstructured.Unstructured, diffConfig DiffConfig) (*NormalizationResult, error) { 14 result, err := preDiffNormalize(lives, configs, diffConfig) 15 if err != nil { 16 return nil, err 17 } 18 diffNormalizer, err := newDiffNormalizer(diffConfig.Ignores(), diffConfig.Overrides(), diffConfig.IgnoreNormalizerOpts()) 19 if err != nil { 20 return nil, err 21 } 22 23 for _, live := range result.Lives { 24 if live != nil { 25 err = diffNormalizer.Normalize(live) 26 if err != nil { 27 return nil, err 28 } 29 } 30 } 31 for _, target := range result.Targets { 32 if target != nil { 33 err = diffNormalizer.Normalize(target) 34 if err != nil { 35 return nil, err 36 } 37 } 38 } 39 return result, nil 40 } 41 42 // newDiffNormalizer creates normalizer that uses Argo CD and application settings to normalize the resource prior to diffing. 43 func newDiffNormalizer(ignore []v1alpha1.ResourceIgnoreDifferences, overrides map[string]v1alpha1.ResourceOverride, opts normalizers.IgnoreNormalizerOpts) (diff.Normalizer, error) { 44 ignoreNormalizer, err := normalizers.NewIgnoreNormalizer(ignore, overrides, opts) 45 if err != nil { 46 return nil, err 47 } 48 knownTypesNorm, err := normalizers.NewKnownTypesNormalizer(overrides) 49 if err != nil { 50 return nil, err 51 } 52 53 return &composableNormalizer{normalizers: []diff.Normalizer{ignoreNormalizer, knownTypesNorm}}, nil 54 } 55 56 type composableNormalizer struct { 57 normalizers []diff.Normalizer 58 } 59 60 // Normalize performs resource normalization. 61 func (n *composableNormalizer) Normalize(un *unstructured.Unstructured) error { 62 for i := range n.normalizers { 63 if err := n.normalizers[i].Normalize(un); err != nil { 64 return err 65 } 66 } 67 return nil 68 }