From a8f58b4080748d9387cb54b98d7eb8b03f71046d Mon Sep 17 00:00:00 2001 From: natasha41575 Date: Tue, 7 Dec 2021 12:34:15 -0800 Subject: [PATCH] collect origin data only when the option is set --- api/internal/target/kusttarget.go | 28 +++++++++++++++++++++------- api/resource/origin.go | 23 ++++++++++------------- api/resource/origin_test.go | 14 +++++++------- api/types/kustomization.go | 1 + 4 files changed, 39 insertions(+), 27 deletions(-) diff --git a/api/internal/target/kusttarget.go b/api/internal/target/kusttarget.go index 85f25165f..7cd2ef8c3 100644 --- a/api/internal/target/kusttarget.go +++ b/api/internal/target/kusttarget.go @@ -113,7 +113,11 @@ func (kt *KustTarget) MakeCustomizedResMap() (resmap.ResMap, error) { } func (kt *KustTarget) makeCustomizedResMap() (resmap.ResMap, error) { - ra, err := kt.AccumulateTarget(&resource.Origin{}) + var origin *resource.Origin + if utils.StringSliceContains(kt.kustomization.BuildMetadata, types.OriginAnnotations) { + origin = &resource.Origin{} + } + ra, err := kt.AccumulateTarget(origin) if err != nil { return nil, err } @@ -371,7 +375,11 @@ func (kt *KustTarget) accumulateResources( return nil, errors.Wrapf( err, "accumulation err='%s'", errF.Error()) } - ra, err = kt.accumulateDirectory(ra, ldr, origin.Append(path), false) + if origin != nil { + ra, err = kt.accumulateDirectory(ra, ldr, origin.Append(path), false) + } else { + ra, err = kt.accumulateDirectory(ra, ldr, nil, false) + } if err != nil { return nil, errors.Wrapf( err, "accumulation err='%s'", errF.Error()) @@ -392,8 +400,11 @@ func (kt *KustTarget) accumulateComponents( return nil, fmt.Errorf("loader.New %q", errL) } var errD error - origin.Path = filepath.Join(origin.Path, path) - ra, errD = kt.accumulateDirectory(ra, ldr, origin, true) + if origin != nil { + ra, errD = kt.accumulateDirectory(ra, ldr, origin.Append(path), true) + } else { + ra, errD = kt.accumulateDirectory(ra, ldr, nil, true) + } if errD != nil { return nil, fmt.Errorf("accumulateDirectory: %q", errD) } @@ -459,12 +470,15 @@ func (kt *KustTarget) accumulateFile( if err != nil { return errors.Wrapf(err, "accumulating resources from '%s'", path) } - if utils.StringSliceContains(kt.kustomization.BuildMetadata, "originAnnotations") { - origin = origin.Append(path) - err = resources.AnnotateAll(utils.OriginAnnotation, origin.String()) + if origin != nil { + originAnno, err := origin.Append(path).String() if err != nil { return errors.Wrapf(err, "cannot add path annotation for '%s'", path) } + err = resources.AnnotateAll(utils.OriginAnnotation, originAnno) + if err != nil || originAnno == "" { + return errors.Wrapf(err, "cannot add path annotation for '%s'", path) + } } err = ra.AppendAll(resources) if err != nil { diff --git a/api/resource/origin.go b/api/resource/origin.go index ec0b49873..7f1bf50cf 100644 --- a/api/resource/origin.go +++ b/api/resource/origin.go @@ -8,6 +8,7 @@ import ( "strings" "sigs.k8s.io/kustomize/api/internal/git" + kyaml "sigs.k8s.io/kustomize/kyaml/yaml" ) // Origin retains information about where resources in the output @@ -15,19 +16,22 @@ import ( type Origin struct { // Path is the path to the resource, rooted from the directory upon // which `kustomize build` was invoked - Path string + Path string `json:"path,omitempty" yaml:"path,omitempty"` // Repo is the remote repository that the resource originated from if it is // not from a local file - Repo string + Repo string `json:"repo,omitempty" yaml:"repo,omitempty"` // Ref is the ref of the remote repository that the resource originated from // if it is not from a local file - Ref string + Ref string `json:"ref,omitempty" yaml:"ref,omitempty"` } // Copy returns a copy of origin func (origin *Origin) Copy() Origin { + if origin == nil { + return Origin{} + } return *origin } @@ -47,14 +51,7 @@ func (origin *Origin) Append(path string) *Origin { } // String returns a string version of origin -func (origin *Origin) String() string { - var anno string - anno = anno + "path: " + origin.Path + "\n" - if origin.Repo != "" { - anno = anno + "repo: " + origin.Repo + "\n" - } - if origin.Ref != "" { - anno = anno + "ref: " + origin.Ref + "\n" - } - return anno +func (origin *Origin) String() (string, error) { + anno, err := kyaml.Marshal(origin) + return string(anno), err } diff --git a/api/resource/origin_test.go b/api/resource/origin_test.go index d880a5ce9..43d5223ad 100644 --- a/api/resource/origin_test.go +++ b/api/resource/origin_test.go @@ -6,6 +6,7 @@ package resource_test import ( "testing" + "github.com/stretchr/testify/assert" . "sigs.k8s.io/kustomize/api/resource" ) @@ -34,10 +35,9 @@ repo: https://github.com/kubernetes-sigs/kustomize }, } for _, test := range tests { - actual := test.in.Append(test.path).String() - if actual != test.expected { - t.Fatalf("Expected %v, but got %v\n", test.expected, actual) - } + actual, err := test.in.Append(test.path).String() + assert.NoError(t, err) + assert.Equal(t, actual, test.expected) } } @@ -76,8 +76,8 @@ repo: github.com/kubernetes-sigs/kustomize/examples/multibases/dev/ } for _, test := range tests { - if test.in.String() != test.expected { - t.Fatalf("Expected %v, but got %v\n", test.expected, test.in.String()) - } + actual, err := test.in.String() + assert.NoError(t, err) + assert.Equal(t, actual, test.expected) } } diff --git a/api/types/kustomization.go b/api/types/kustomization.go index 3d686ebf3..196d244d8 100644 --- a/api/types/kustomization.go +++ b/api/types/kustomization.go @@ -17,6 +17,7 @@ const ( ComponentVersion = "kustomize.config.k8s.io/v1alpha1" ComponentKind = "Component" MetadataNamespacePath = "metadata/namespace" + OriginAnnotations = "originAnnotations" ) // Kustomization holds the information needed to generate customized k8s api resources.