From f80cf9f433ce0366bf123ada2181a1415329d3a1 Mon Sep 17 00:00:00 2001 From: Anna Song Date: Fri, 26 Aug 2022 16:29:41 -0700 Subject: [PATCH] Reinstate #4652 without url-related code Remove code that changes remotes-loading code path, as mandated by #4756 --- api/ifc/ifc.go | 8 + api/internal/git/repospec.go | 2 +- api/internal/localizer/doc.go | 7 + api/internal/localizer/locloader.go | 146 ++++++++ api/internal/localizer/locloader_test.go | 311 ++++++++++++++++++ api/internal/localizer/util.go | 91 +++++ api/internal/localizer/util_test.go | 18 + api/loader/fileloader.go | 17 + api/loader/fileloader_test.go | 51 +++ .../krmfunction/funcwrapper/statik.go | 2 +- kustomize/commands/internal/util/util_test.go | 3 + .../builtin/patchjson6902transformer/go.mod | 1 + .../builtin/patchjson6902transformer/go.sum | 5 +- plugin/builtin/patchtransformer/go.mod | 1 + plugin/builtin/patchtransformer/go.sum | 5 +- plugin/builtin/prefixtransformer/go.mod | 1 + plugin/builtin/prefixtransformer/go.sum | 5 +- plugin/builtin/replicacounttransformer/go.mod | 1 + plugin/builtin/replicacounttransformer/go.sum | 5 +- plugin/builtin/suffixtransformer/go.mod | 1 + plugin/builtin/suffixtransformer/go.sum | 5 +- 21 files changed, 679 insertions(+), 7 deletions(-) create mode 100644 api/internal/localizer/doc.go create mode 100644 api/internal/localizer/locloader.go create mode 100644 api/internal/localizer/locloader_test.go create mode 100644 api/internal/localizer/util.go create mode 100644 api/internal/localizer/util_test.go diff --git a/api/ifc/ifc.go b/api/ifc/ifc.go index 9fd297478..4f47afb0a 100644 --- a/api/ifc/ifc.go +++ b/api/ifc/ifc.go @@ -28,12 +28,20 @@ type KvLoader interface { // Loader interface exposes methods to read bytes. type Loader interface { + + // Repo returns the repo location and true if this Loader + // was created from a url; otherwise the empty string and false. + Repo() (string, bool) + // Root returns the root location for this Loader. Root() string + // New returns Loader located at newRoot. New(newRoot string) (Loader, error) + // Load returns the bytes read from the location or an error. Load(location string) ([]byte, error) + // Cleanup cleans the loader Cleanup() error } diff --git a/api/internal/git/repospec.go b/api/internal/git/repospec.go index 996f0cf23..c38f8081a 100644 --- a/api/internal/git/repospec.go +++ b/api/internal/git/repospec.go @@ -27,7 +27,7 @@ type RepoSpec struct { // TODO(monopole): Drop raw, use processed fields instead. raw string - // Host, e.g. github.com + // Host, e.g. https://github.com/ Host string // orgRepo name (organization/repoName), diff --git a/api/internal/localizer/doc.go b/api/internal/localizer/doc.go new file mode 100644 index 000000000..b7995adfd --- /dev/null +++ b/api/internal/localizer/doc.go @@ -0,0 +1,7 @@ +// Copyright 2022 The Kubernetes Authors. +// SPDX-License-Identifier: Apache-2.0 + +// Package localizer contains utilities for the command kustomize localize, which is +// documented under proposals/localize-command or at +// https://github.com/kubernetes-sigs/kustomize/blob/master/proposals/22-04-localize-command.md +package localizer diff --git a/api/internal/localizer/locloader.go b/api/internal/localizer/locloader.go new file mode 100644 index 000000000..76188847f --- /dev/null +++ b/api/internal/localizer/locloader.go @@ -0,0 +1,146 @@ +// Copyright 2022 The Kubernetes Authors. +// SPDX-License-Identifier: Apache-2.0 + +package localizer + +import ( + "log" + "path/filepath" + + "sigs.k8s.io/kustomize/api/ifc" + "sigs.k8s.io/kustomize/api/internal/git" + "sigs.k8s.io/kustomize/api/loader" + "sigs.k8s.io/kustomize/kyaml/errors" + "sigs.k8s.io/kustomize/kyaml/filesys" +) + +const dstPrefix = "localized" + +// LocArgs holds localize arguments +type LocArgs struct { + // target; local copy if remote + Target filesys.ConfirmedDir + + // directory that bounds target's local references, empty string if target is remote + Scope filesys.ConfirmedDir + + // localize destination + NewDir filesys.ConfirmedDir +} + +// locLoader is the Loader for kustomize localize. It is an ifc.Loader that enforces localize constraints. +type locLoader struct { + fSys filesys.FileSystem + + args *LocArgs + + // loader at locLoader's current directory + ifc.Loader + + // whether locLoader and all its ancestors are the result of local references + local bool +} + +var _ ifc.Loader = &locLoader{} + +// NewLocLoader is the factory method for Loader, under localize constraints, at targetArg. For invalid localize arguments, +// NewLocLoader returns an error. +func NewLocLoader(targetArg string, scopeArg string, newDirArg string, fSys filesys.FileSystem) (ifc.Loader, LocArgs, error) { + // check earlier to avoid cleanup + repoSpec, err := git.NewRepoSpecFromURL(targetArg) + if err == nil && repoSpec.Ref == "" { + return nil, LocArgs{}, + errors.Errorf("localize remote root '%s' missing ref query string parameter", targetArg) + } + + // for security, should enforce load restrictions + ldr, err := loader.NewLoader(loader.RestrictionRootOnly, targetArg, fSys) + if err != nil { + return nil, LocArgs{}, errors.WrapPrefixf(err, "unable to establish localize target '%s'", targetArg) + } + + scope, err := establishScope(scopeArg, targetArg, ldr, fSys) + if err != nil { + _ = ldr.Cleanup() + return nil, LocArgs{}, errors.WrapPrefixf(err, "invalid localize scope '%s'", scopeArg) + } + + newDir, err := createNewDir(newDirArg, ldr, repoSpec, fSys) + if err != nil { + _ = ldr.Cleanup() + return nil, LocArgs{}, errors.WrapPrefixf(err, "invalid localize destination '%s'", newDirArg) + } + + args := LocArgs{ + Target: filesys.ConfirmedDir(ldr.Root()), + Scope: scope, + NewDir: newDir, + } + return &locLoader{ + fSys: fSys, + args: &args, + Loader: ldr, + local: scope != "", + }, args, nil +} + +// Load returns the contents of path if path is a valid localize file. +// Otherwise, Load returns an error. +func (ll *locLoader) Load(path string) ([]byte, error) { + // checks in root, and thus in scope + content, err := ll.Loader.Load(path) + if err != nil { + return nil, errors.WrapPrefixf(err, "invalid file reference") + } + if filepath.IsAbs(path) { + return nil, errors.Errorf("absolute paths not yet supported in alpha: file path '%s' is absolute", path) + } + if ll.local { + abs := filepath.Join(ll.Root(), path) + dir, f, err := ll.fSys.CleanedAbs(abs) + if err != nil { + // should never happen + log.Fatalf(errors.WrapPrefixf(err, "cannot clean validated file path '%s'", abs).Error()) + } + // target cannot reference newDir, as this load would've failed prior to localize; + // not a problem if remote because then reference could only be in newDir if repo copy, + // which will be cleaned, is inside newDir + if dir.HasPrefix(ll.args.NewDir) { + return nil, errors.Errorf( + "file path '%s' references into localize destination '%s'", dir.Join(f), ll.args.NewDir) + } + } + return content, nil +} + +// New returns a Loader at path if path is a valid localize root. +// Otherwise, New returns an error. +func (ll *locLoader) New(path string) (ifc.Loader, error) { + repoSpec, err := git.NewRepoSpecFromURL(path) + if err == nil && repoSpec.Ref == "" { + return nil, errors.Errorf("localize remote root '%s' missing ref query string parameter", path) + } + + ldr, err := ll.Loader.New(path) + if err != nil { + return nil, errors.WrapPrefixf(err, "invalid root reference") + } + + var isRemote bool + if _, isRemote = ldr.Repo(); !isRemote { + if ll.local && !filesys.ConfirmedDir(ldr.Root()).HasPrefix(ll.args.Scope) { + return nil, errors.Errorf("root '%s' outside localize scope '%s'", ldr.Root(), ll.args.Scope) + } + if ll.local && filesys.ConfirmedDir(ldr.Root()).HasPrefix(ll.args.NewDir) { + return nil, errors.Errorf( + "root '%s' references into localize destination '%s'", ldr.Root(), ll.args.NewDir) + } + } + + return &locLoader{ + fSys: ll.fSys, + args: ll.args, + Loader: ldr, + local: ll.local && !isRemote, + }, nil +} diff --git a/api/internal/localizer/locloader_test.go b/api/internal/localizer/locloader_test.go new file mode 100644 index 000000000..7d0f58858 --- /dev/null +++ b/api/internal/localizer/locloader_test.go @@ -0,0 +1,311 @@ +// Copyright 2022 The Kubernetes Authors. +// SPDX-License-Identifier: Apache-2.0 + +package localizer_test + +import ( + "bytes" + "log" + "testing" + + "github.com/stretchr/testify/require" + "sigs.k8s.io/kustomize/api/ifc" + lclzr "sigs.k8s.io/kustomize/api/internal/localizer" + "sigs.k8s.io/kustomize/kyaml/filesys" +) + +const dstPrefix = "localized" + +func makeMemoryFs(t *testing.T) filesys.FileSystem { + t.Helper() + req := require.New(t) + + fSys := filesys.MakeFsInMemory() + req.NoError(fSys.MkdirAll("/a/b")) + req.NoError(fSys.WriteFile("/a/kustomization.yaml", []byte("/a"))) + + dirChain := "/alpha/beta/gamma/delta" + req.NoError(fSys.MkdirAll(dirChain)) + req.NoError(fSys.WriteFile(dirChain+"/kustomization.yaml", []byte(dirChain))) + req.NoError(fSys.Mkdir("/alpha/beta/c")) + return fSys +} + +func checkNewLocLoader(req *require.Assertions, ldr ifc.Loader, args *lclzr.LocArgs, target string, scope string, newDir string, fSys filesys.FileSystem) { + checkLoader(req, ldr, target) + checkLocArgs(req, args, target, scope, newDir, fSys) +} + +func checkLoader(req *require.Assertions, ldr ifc.Loader, root string) { + req.Equal(root, ldr.Root()) + repo, isRemote := ldr.Repo() + req.Equal(false, isRemote) + req.Equal("", repo) +} + +func checkLocArgs(req *require.Assertions, args *lclzr.LocArgs, target string, scope string, newDir string, fSys filesys.FileSystem) { + req.Equal(target, args.Target.String()) + req.Equal(scope, args.Scope.String()) + req.Equal(newDir, args.NewDir.String()) + req.True(fSys.Exists(newDir)) +} + +func TestLocalLoadNewAndCleanup(t *testing.T) { + req := require.New(t) + fSys := makeMemoryFs(t) + + var buf bytes.Buffer + log.SetOutput(&buf) + // typical setup + ldr, args, err := lclzr.NewLocLoader("a", "/", "/newDir", fSys) + req.NoError(err) + checkNewLocLoader(req, ldr, &args, "/a", "/", "/newDir", fSys) + + fSysCopy := makeMemoryFs(t) + req.NoError(fSysCopy.Mkdir("/newDir")) + req.Equal(fSysCopy, fSys) + + // easy load directly in root + content, err := ldr.Load("kustomization.yaml") + req.NoError(err) + req.Equal([]byte("/a"), content) + + // typical sibling root reference + sibLdr, err := ldr.New("../alpha") + req.NoError(err) + checkLoader(req, sibLdr, "/alpha") + + // only need to test once, since don't need to call Cleanup() on local target + req.NoError(sibLdr.Cleanup()) + req.NoError(ldr.Cleanup()) + + // file system and buffer checks are also one-time + req.Equal(fSysCopy, fSys) + req.Empty(buf.String()) +} + +func TestNewLocLoaderDefaultForRootTarget(t *testing.T) { + cases := map[string]struct { + target string + scope string + }{ + "explicit": { + "/", + ".", + }, + "implicit": { + ".", + "", + }, + } + for name, params := range cases { + params := params + t.Run(name, func(t *testing.T) { + req := require.New(t) + fSys := makeMemoryFs(t) + + ldr, args, err := lclzr.NewLocLoader(params.target, params.scope, "", fSys) + req.NoError(err) + checkNewLocLoader(req, ldr, &args, "/", "/", "/"+dstPrefix, fSys) + + // file in root, but nested + content, err := ldr.Load("a/kustomization.yaml") + req.NoError(err) + req.Equal([]byte("/a"), content) + + childLdr, err := ldr.New("a") + req.NoError(err) + checkLoader(req, childLdr, "/a") + + // messy, uncleaned path + content, err = childLdr.Load("./../a/kustomization.yaml") + req.NoError(err) + req.Equal([]byte("/a"), content) + }) + } +} + +func TestNewMultiple(t *testing.T) { + req := require.New(t) + fSys := makeMemoryFs(t) + + // default destination for non-file system root target + // destination outside of scope + ldr, args, err := lclzr.NewLocLoader("/alpha/beta", "/alpha", "", fSys) + req.NoError(err) + checkNewLocLoader(req, ldr, &args, "/alpha/beta", "/alpha", "/"+dstPrefix+"-beta", fSys) + + // nested child root that isn't cleaned + descLdr, err := ldr.New("../beta/gamma/delta") + req.NoError(err) + checkLoader(req, descLdr, "/alpha/beta/gamma/delta") + + // upwards traversal + higherLdr, err := descLdr.New("../../c") + req.NoError(err) + checkLoader(req, higherLdr, "/alpha/beta/c") +} + +func makeWdFs(t *testing.T) map[string]filesys.FileSystem { + t.Helper() + req := require.New(t) + + root := filesys.MakeEmptyDirInMemory() + req.NoError(root.MkdirAll("a/b/c/d/e")) + + outer, err := root.Find("a") + req.NoError(err) + middle, err := root.Find("a/b/c") + req.NoError(err) + + return map[string]filesys.FileSystem{ + "a": outer, + "a/b/c": middle, + } +} + +func TestNewLocLoaderCwdNotRoot(t *testing.T) { + cases := map[string]struct { + wd string + target string + scope string + newDir string + }{ + // target not immediate child of scope + "outer dir": { + "a", + "b/c/d/e", + "b/c", + "b/newDir", + }, + "scope": { + "a/b/c", + "d/e", + ".", + "d/e/newDir", + }, + } + + for name, test := range cases { + test := test + t.Run(name, func(t *testing.T) { + req := require.New(t) + fSys := makeWdFs(t)[test.wd] + + ldr, args, err := lclzr.NewLocLoader(test.target, test.scope, test.newDir, fSys) + req.NoError(err) + checkLoader(req, ldr, "a/b/c/d/e") + + req.Equal("a/b/c/d/e", args.Target.String()) + req.Equal("a/b/c", args.Scope.String()) + req.Equal(test.wd+"/"+test.newDir, args.NewDir.String()) + // memory file system can only find paths rooted at current node + req.True(fSys.Exists(test.newDir)) + }) + } +} + +func TestNewLocLoaderFails(t *testing.T) { + cases := map[string]struct { + target string + scope string + dest string + }{ + "non-existent target": { + "/b", + "/", + "/newDir", + }, + "file target": { + "/a/kustomization.yaml", + "/", + "/newDir", + }, + "inner scope": { + "/alpha", + "/alpha/beta", + "/newDir", + }, + "side scope": { + "/alpha", + "/a", + "/newDir", + }, + "existing dst": { + "/alpha", + "/", + "/a", + }, + } + for name, params := range cases { + params := params + t.Run(name, func(t *testing.T) { + var buf bytes.Buffer + log.SetOutput(&buf) + _, _, err := lclzr.NewLocLoader(params.target, params.scope, params.dest, makeMemoryFs(t)) + require.Error(t, err) + require.Empty(t, buf.String()) + }) + } +} + +func TestNewFails(t *testing.T) { + req := require.New(t) + fSys := makeMemoryFs(t) + + ldr, args, err := lclzr.NewLocLoader("/alpha/beta/gamma", "alpha", "alpha/beta/gamma/newDir", fSys) + req.NoError(err) + checkNewLocLoader(req, ldr, &args, "/alpha/beta/gamma", "/alpha", "/alpha/beta/gamma/newDir", fSys) + + cases := map[string]string{ + "outside scope": "../../../a", + "at dst": "newDir", + "ancestor": "../../beta", + "non-existent root": "delt", + "file": "delta/kustomization.yaml", + } + for name, root := range cases { + root := root + t.Run(name, func(t *testing.T) { + fSys := makeMemoryFs(t) + + ldr, _, err := lclzr.NewLocLoader("/alpha/beta/gamma", "alpha", "alpha/beta/gamma/newDir", fSys) + require.NoError(t, err) + + _, err = ldr.New(root) + require.Error(t, err) + }) + } +} + +func TestLoadFails(t *testing.T) { + req := require.New(t) + fSys := makeMemoryFs(t) + + ldr, args, err := lclzr.NewLocLoader("./a/../a", "/a/../a", "/a/newDir", fSys) + req.NoError(err) + checkNewLocLoader(req, ldr, &args, "/a", "/a", "/a/newDir", fSys) + + cases := map[string]string{ + "absolute path": "/a/kustomization.yaml", + "directory": "b", + "non-existent file": "kubectl.yaml", + "file outside root": "../alpha/beta/gamma/delta/kustomization.yaml", + "inside dst": "newDir/kustomization.yaml", + } + for name, file := range cases { + file := file + t.Run(name, func(t *testing.T) { + req := require.New(t) + fSys := makeMemoryFs(t) + + ldr, _, err := lclzr.NewLocLoader("./a/../a", "/a/../a", "/a/newDir", fSys) + req.NoError(err) + + req.NoError(fSys.WriteFile("/a/newDir/kustomization.yaml", []byte("/a/newDir"))) + + _, err = ldr.Load(file) + req.Error(err) + }) + } +} diff --git a/api/internal/localizer/util.go b/api/internal/localizer/util.go new file mode 100644 index 000000000..9c88b0912 --- /dev/null +++ b/api/internal/localizer/util.go @@ -0,0 +1,91 @@ +// Copyright 2022 The Kubernetes Authors. +// SPDX-License-Identifier: Apache-2.0 + +package localizer + +import ( + "log" + "path/filepath" + "strings" + + "sigs.k8s.io/kustomize/api/ifc" + "sigs.k8s.io/kustomize/api/internal/git" + "sigs.k8s.io/kustomize/kyaml/errors" + "sigs.k8s.io/kustomize/kyaml/filesys" +) + +// establishScope returns the scope given localize arguments and targetLdr at targetArg +func establishScope(scopeArg string, targetArg string, targetLdr ifc.Loader, fSys filesys.FileSystem) (filesys.ConfirmedDir, error) { + if _, isRemote := targetLdr.Repo(); isRemote { + if scopeArg != "" { + return "", errors.Errorf("scope '%s' specified for remote localize target '%s'", scopeArg, targetArg) + } + return "", nil + } + // default scope + if scopeArg == "" { + return filesys.ConfirmedDir(targetLdr.Root()), nil + } + scope, err := filesys.ConfirmDir(fSys, scopeArg) + if err != nil { + return "", errors.WrapPrefixf(err, "unable to establish localize scope") + } + if !filesys.ConfirmedDir(targetLdr.Root()).HasPrefix(scope) { + return scope, errors.Errorf("localize scope '%s' does not contain target '%s' at '%s'", + scopeArg, targetArg, targetLdr.Root()) + } + return scope, nil +} + +// createNewDir returns the localize destination directory or error. Note that spec is nil if targetLdr is at local +// target. +func createNewDir(newDirArg string, targetLdr ifc.Loader, spec *git.RepoSpec, fSys filesys.FileSystem) (filesys.ConfirmedDir, error) { + if newDirArg == "" { + newDirArg = defaultNewDir(targetLdr, spec) + } + if fSys.Exists(newDirArg) { + return "", errors.Errorf("localize destination '%s' already exists", newDirArg) + } + // destination directory must sit in an existing directory + if err := fSys.Mkdir(newDirArg); err != nil { + return "", errors.WrapPrefixf(err, "unable to create localize destination directory") + } + newDir, err := filesys.ConfirmDir(fSys, newDirArg) + if err != nil { + if errCleanup := fSys.RemoveAll(newDir.String()); errCleanup != nil { + log.Printf("%s", errors.WrapPrefixf(errCleanup, "unable to clean localize destination").Error()) + } + return "", errors.WrapPrefixf(err, "unable to establish localize destination") + } + + return newDir, nil +} + +// defaultNewDir calculates the default localize destination directory name from targetLdr at the localize target +// and spec of target, which is nil if target is local +func defaultNewDir(targetLdr ifc.Loader, spec *git.RepoSpec) string { + targetDir := filepath.Base(targetLdr.Root()) + if repo, isRemote := targetLdr.Repo(); isRemote { + // kustomize doesn't download repo into repo-named folder + // must find repo folder name from url + if repo == targetLdr.Root() { + targetDir = urlBase(spec.OrgRepo) + } + return strings.Join([]string{dstPrefix, targetDir, strings.ReplaceAll(spec.Ref, "/", "-")}, "-") + } + // special case for local target directory since destination directory cannot have "/" in name + if targetDir == string(filepath.Separator) { + return dstPrefix + } + return strings.Join([]string{dstPrefix, targetDir}, "-") +} + +// urlBase is the url equivalent of filepath.Base +func urlBase(url string) string { + cleaned := strings.TrimRight(url, "/") + i := strings.LastIndex(cleaned, "/") + if i < 0 { + return cleaned + } + return cleaned[i+1:] +} diff --git a/api/internal/localizer/util_test.go b/api/internal/localizer/util_test.go new file mode 100644 index 000000000..ca8096e73 --- /dev/null +++ b/api/internal/localizer/util_test.go @@ -0,0 +1,18 @@ +// Copyright 2022 The Kubernetes Authors. +// SPDX-License-Identifier: Apache-2.0 + +package localizer //nolint:testpackage + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestUrlBase(t *testing.T) { + require.Equal(t, "repo", urlBase("https://github.com/org/repo")) +} + +func TestUrlBaseTrailingSlash(t *testing.T) { + require.Equal(t, "repo", urlBase("github.com/org/repo//")) +} diff --git a/api/loader/fileloader.go b/api/loader/fileloader.go index 0cb7673bd..665feb0bd 100644 --- a/api/loader/fileloader.go +++ b/api/loader/fileloader.go @@ -18,6 +18,13 @@ import ( "sigs.k8s.io/kustomize/kyaml/filesys" ) +// HasRemoteFileScheme returns whether path has a url scheme that kustomize allows for +// remote files. See https://github.com/kubernetes-sigs/kustomize/blob/master/examples/remoteBuild.md +func HasRemoteFileScheme(path string) bool { + u, err := url.Parse(path) + return err == nil && (u.Scheme == "http" || u.Scheme == "https") +} + // fileLoader is a kustomization's interface to files. // // The directory in which a kustomization file sits @@ -114,6 +121,15 @@ func NewFileLoaderAtRoot(fSys filesys.FileSystem) *fileLoader { RestrictionRootOnly, fSys, filesys.Separator) } +// Repo returns the absolute path to the repo that contains Root and true +// if this fileLoader was created from a url; otherwise, the empty string and false +func (fl *fileLoader) Repo() (string, bool) { + if fl.repoSpec != nil { + return fl.repoSpec.Dir.String(), true + } + return "", false +} + // Root returns the absolute path that is prepended to any // relative paths used in Load. func (fl *fileLoader) Root() string { @@ -283,6 +299,7 @@ func (fl *fileLoader) errIfRepoCycle(newRepoSpec *git.RepoSpec) error { // else an error. Relative paths are taken relative // to the root. func (fl *fileLoader) Load(path string) ([]byte, error) { + // TODO(annasong): replace check with HasRemoteFileScheme if u, err := url.Parse(path); err == nil && (u.Scheme == "http" || u.Scheme == "https") { var hc *http.Client if fl.http != nil { diff --git a/api/loader/fileloader_test.go b/api/loader/fileloader_test.go index 9b8c33cc2..8189cedc1 100644 --- a/api/loader/fileloader_test.go +++ b/api/loader/fileloader_test.go @@ -21,6 +21,40 @@ import ( "sigs.k8s.io/kustomize/kyaml/filesys" ) +func TestHasRemoteFileScheme(t *testing.T) { + cases := map[string]struct { + url string + valid bool + }{ + "https file": { + "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/examples/helloWorld/configMap.yaml", + true, + }, + "https dir": { + "https://github.com/kubernetes-sigs/kustomize//examples/helloWorld/", + true, + }, + "no scheme": { + "github.com/kubernetes-sigs/kustomize//examples/helloWorld/", + false, + }, + "ssh": { + "ssh://git@github.com/kubernetes-sigs/kustomize.git", + false, + }, + "local": { + "pod.yaml", + false, + }, + } + for name, test := range cases { + test := test + t.Run(name, func(t *testing.T) { + require.Equal(t, test.valid, HasRemoteFileScheme(test.url)) + }) + } +} + type testData struct { path string expectedContent string @@ -61,6 +95,8 @@ func TestLoaderLoad(t *testing.T) { require := require.New(t) l1 := makeLoader() + _, remote := l1.Repo() + require.False(remote) require.Equal("/", l1.Root()) for _, x := range testCases { @@ -73,6 +109,9 @@ func TestLoaderLoad(t *testing.T) { } l2, err := l1.New("foo/project") require.NoError(err) + + _, remote = l2.Repo() + require.False(remote) require.Equal("/foo/project", l2.Root()) for _, x := range testCases { @@ -322,6 +361,9 @@ whatever repoSpec, fSys, nil, git.DoNothingCloner(filesys.ConfirmedDir(coRoot))) require.NoError(err) + repo, remote := l.Repo() + require.True(remote) + require.Equal(coRoot, repo) require.Equal(coRoot+"/"+pathInRepo, l.Root()) _, err = l.New(url) @@ -335,6 +377,10 @@ whatever url = rootURL + "/" + pathInRepo l2, err := l.New(url) require.NoError(err) + + repo, remote = l2.Repo() + require.True(remote) + require.Equal(coRoot, repo) require.Equal(coRoot+"/"+pathInRepo, l2.Root()) } @@ -389,6 +435,8 @@ func TestLoaderDisallowsLocalBaseFromRemoteOverlay(t *testing.T) { // This is okay. l2, err = l1.New("../base") require.NoError(err) + _, remote := l2.Repo() + require.False(remote) require.Equal(cloneRoot+"/foo/base", l2.Root()) // This is not okay. @@ -414,6 +462,9 @@ func TestLocalLoaderReferencingGitBase(t *testing.T) { l2, err := l1.New("github.com/someOrg/someRepo/foo/base") require.NoError(err) + repo, remote := l2.Repo() + require.True(remote) + require.Equal(cloneRoot, repo) require.Equal(cloneRoot+"/foo/base", l2.Root()) } diff --git a/cmd/pluginator/internal/krmfunction/funcwrapper/statik.go b/cmd/pluginator/internal/krmfunction/funcwrapper/statik.go index 80cb1e3be..30d93ff36 100644 --- a/cmd/pluginator/internal/krmfunction/funcwrapper/statik.go +++ b/cmd/pluginator/internal/krmfunction/funcwrapper/statik.go @@ -8,7 +8,7 @@ import ( func init() { - data := "PK\x03\x04\x14\x00\x08\x00\x08\x00\xe1\xa4\xf2T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n\x00 \x00go.mod.srcUT\x05\x00\x01\xe7\xc4\xd5bt\xca\xb1\x0e\xc2 \x10\x06\xe0\xb9\xf7\x14\x8c\xba\xfc\x80U\xa3\x8fC+\xe2\x85\xe2U\xae4\xd1\xa77\xc6\xc9\xc1\xf9\xfb\x8a\\\xda\x14M |'Jb<\xfc\x81\xa8\xc6G\xe3\x1a\xcd\x86\xba\xc4\xcb\xad\x0d\x18\xa5X\x9d\xaf\xbe\xb7\xa3\x0c5\x98\xd5\xc3\xc1Q\xa7\x9c\x14\xf9\xa4`\xb1\xb9\xe9\"\x85_\xd1\x86\x99\xcd\xeap\xc4\xfe\xdf\xc8\xcfP\xa6\xcf9\xa3\xff=_\xf0\xd8\xc1\xd1\x96\xe8\x1d\x00\x00\xff\xffPK\x07\x08`;Y\xf4u\x00\x00\x00\xa1\x00\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\xd1\x9d\xb4T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00 \x00main.goUT\x05\x00\x01\x1a\xf0\x87b\x94R\xc1n\xe36\x10=\x93_1\xd5\xa1\xa0\n\x87\xda\xfaT\xec\xc2\x87\xc5z\xbd]4 \x8c$\x08\n\x14=\xd0\xd2H&L\x91\xc4\x90\x8a\xe3\x16\xfe\xf7\x82\x92\xec\xd8i\x12d\xaf\xe4\x9b\xf7\xe6\xbdyE\x01_\x9c\xdf\x91n\xd6\x11\xa6\x1f\xa6S\xb8[#\xfc\xd1\xad\x90,F\x0c\xf0\xb9\x8bkGA\xf2\xa2\x80\xdb\xe5\xfc\xcf\x8bK]\xa2\x0dx\xf1\xbdB\x1bu\xad\x91>\xc2g\xaf\xca5^L\xe5\x07\x9epwk\x1d\xa0\xd6\x06a\xab\x8d\x81\x15\x82'Wb\x08X\x81\xb2\x15`\xbb\xc2\xaa\xc2\n\xa2\x03o\xbaF[\x15\x1dI\xce\xbd*7\xaaA\xa8;[nIy\x8f\x14\xa8\xe4\\\xb7\xdeQ\x04\xc1YV\xb71\xe3,s!\xe3\x9ceA7An~\x0bR\xbbb\xd3\x85\xe8Z\xfd\x0f\x16\xca\xeb\xc2\x93{\xd0\x15R\xf6&\x8a0\xb4\xca\xbf\x8d\x89;\x8f\xe1u\xc8f\xa7ZS\xd4\xb6\xa8I\xb5\xb8u\xb4\xc9x\x9eb\xb0\xceh\x1by\xf2\x02\xad\xd2V\xe4\xf0/g\x0f\x8aF\xcf0\x88\xcb/\xce\xd6\xba\xe9H\xad\x0cr\xe6\xe1\xe3\x0c\x0e\xcb\xcbk\xdc\xce\xb1V\x9d\x89s\xf4\xcb\xf1U\xe4\x9c\x0d\xb3\x0bUFG\xbb42\x92]\xe3v|\x14^~\xc3x\x83\xc1uT\xe2\xe11\xcf9\x1b\xe4\x7fG\x93\xe2=\x9f]\x9e~ \xce\x98\xd5f\x02=\xd3B\xa3\xa9\xee\x95\xd1U:\x96\xc8'p\xb6\xc3\x04\xfa\x9c\xe4\\\x87d\xa4\x1a\x98\x06oI\x95\xb3\xb1\x03\x8e\x92\xe41,y\xd8\xf0R\x87\xb8<@\x16\x9d-EJN\xd0\xc97\xfc\xf2\xf2X\x0eH\xe4(\xc5\x9b\x82\xb9R~\x92^\x9e\xac\x8d;&\x877\xfd\xff\x82\\{s\xed*\xbc5\xba\xc43\x11\xf9=b\x1br\xce\x98\xae{\x96\x9ff`\xb5\xe9\xc9\x19a\xec\xc8\xa6g\xce\xd8\x9e3V\xa9\xa8\xee\x95\xe9\xf0T\xf1\x89+\xf9\x88\xda\x8d9\xc8>C\x91\xa5\xa1,\x97\xfd\x9c\xbc\x8d\xa4m#\xde'\xc8\x19K\x88\xd9X\xa1\xb1;\xe2\xec\xa2\x13\xf8\xeb\xef\xd5.\xa28\xee\x96\xbf\x8f\xbc\xc7\xc4 \xb8M\xdf\xc1AA\x8c\xe5\xb8#eC\xed\xa8E\x1aN\x9b\x7fJ\xc0\x9egX)>a\xc4p\x85$\xfb\x92\xee\xb9p\xaf\xbc\x074\x01A\xd7\xd0\xbc\xb2\xc07\xb4H\xa9z\xff\x93?=\xf9\x0c\x9a\x03\x12\xc5\x8f\xe8\xf3\xa1;\xcfj\x00\xfd=\xaf\x92\x7fw\xd2\x97\x9c\x1f9\xac6\x9c\xeds~\xd09\xeb\xf6\xd7G,\xbb\x88\xe2\xe7c\xf7'i \xff\xf4|\xa5\xba\x8drI\xdaFc\x05\x12%~\x17\xe4\xd7G\x1d\xc5\xaf9g{\xbe\xe7\xff\x05\x00\x00\xff\xffPK\x07\x08P\xaa\x84\xd0\x8f\x02\x00\x00\xaa\x05\x00\x00PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\xe1\xa4\xf2T`;Y\xf4u\x00\x00\x00\xa1\x00\x00\x00\n\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\x00\x00\x00\x00go.mod.srcUT\x05\x00\x01\xe7\xc4\xd5bPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\xd1\x9d\xb4TP\xaa\x84\xd0\x8f\x02\x00\x00\xaa\x05\x00\x00\x07\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\xb6\x00\x00\x00main.goUT\x05\x00\x01\x1a\xf0\x87bPK\x05\x06\x00\x00\x00\x00\x02\x00\x02\x00\x7f\x00\x00\x00\x83\x03\x00\x00\x00\x00" + data := "PK\x03\x04\x14\x00\x08\x00\x08\x00H\x08\x1aU\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n\x00 \x00go.mod.srcUT\x05\x00\x01\x98\x1b\x08ct\xca\xb1\x0e\xc2 \x10\x06\xe0\xb9\xf7\x14\x8c\xba\xfc\x80U\xa3\x8fC+\xe2\x85\xe2U\xae4\xd1\xa77\xc6\xc9\xc1\xf9\xfb\x8a\\\xda\x14M |'Jb<\xfc\x81\xa8\xc6G\xe3\x1a\xcd\x86\xba\xc4\xcb\xad\x0d\x18\xa5X\x9d\xaf\xbe\xb7\xa3\x0c5\x98\xd5\xc3\xc1Q\xa7\x9c\x14\xf9\xa4`\xb1\xb9\xe9\"\x85_\xd1\x86\x99\xcd\xeap\xc4\xfe\xdf\xc8\xcfP\xa6\xcf9\xa3\xff=_\xf0\xd8\xc1\xd1\x96\xe8\x1d\x00\x00\xff\xffPK\x07\x08`;Y\xf4u\x00\x00\x00\xa1\x00\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00l\xab\xc2T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00 \x00main.goUT\x05\x00\x01<+\x99b\x94R\xc1n\xe36\x10=\x93_1\xd5\xa1\xa0\n\x87\xda\xfaT\xec\xc2\x87\xc5z\xbd]4 \x8c$\x08\n\x14=\xd0\xd2H&L\x91\xc4\x90\x8a\xe3\x16\xfe\xf7\x82\x92\xec\xd8i\x12d\xaf\xe4\x9b\xf7\xe6\xbdyE\x01_\x9c\xdf\x91n\xd6\x11\xa6\x1f\xa6S\xb8[#\xfc\xd1\xad\x90,F\x0c\xf0\xb9\x8bkGA\xf2\xa2\x80\xdb\xe5\xfc\xcf\x8bK]\xa2\x0dx\xf1\xbdB\x1bu\xad\x91>\xc2g\xaf\xca5^L\xe5\x07\x9epwk\x1d\xa0\xd6\x06a\xab\x8d\x81\x15\x82'Wb\x08X\x81\xb2\x15`\xbb\xc2\xaa\xc2\n\xa2\x03o\xbaF[\x15\x1dI\xce\xbd*7\xaaA\xa8;[nIy\x8f\x14\xa8\xe4\\\xb7\xdeQ\x04\xc1YV\xb71\xe3,s!\xe3\x9ceA7An~\x0bR\xbbb\xd3\x85\xe8Z\xfd\x0f\x16\xca\xeb\xc2\x93{\xd0\x15R\xf6&\x8a0\xb4\xca\xbf\x8d\x89;\x8f\xe1u\xc8f\xa7ZS\xd4\xb6\xa8I\xb5\xb8u\xb4\xc9x\x9eb\xb0\xceh\x1by\xf2\x02\xad\xd2V\xe4\xf0/g\x0f\x8aF\xcf0\x88\xcb/\xce\xd6\xba\xe9H\xad\x0cr\xe6\xe1\xe3\x0c\x0e\xcb\xcbk\xdc\xce\xb1V\x9d\x89s\xf4\xcb\xf1U\xe4\x9c\x0d\xb3\x0bUFG\xbb42\x92]\xe3v|\x14^~\xc3x\x83\xc1uT\xe2\xe11\xcf9\x1b\xe4\x7fG\x93\xe2=\x9f]\x9e~ \xce\x98\xd5f\x02=\xd3B\xa3\xa9\xee\x95\xd1U:\x96\xc8'p\xb6\xc3\x04\xfa\x9c\xe4\\\x87d\xa4\x1a\x98\x06oI\x95\xb3\xb1\x03\x8e\x92\xe41,y\xd8\xf0R\x87\xb8<@\x16\x9d-EJN\xd0\xc97\xfc\xf2\xf2X\x0eH\xe4(\xc5\x9b\x82\xb9R~\x92^\x9e\xac\x8d;&\x877\xfd\xff\x82\\{s\xed*\xbc5\xba\xc43\x11\xf9=b\x1br\xce\x98\xae{\x96\x9ff`\xb5\xe9\xc9\x19a\xec\xc8\xa6g\xce\xd8\x9e3V\xa9\xa8\xee\x95\xe9\xf0T\xf1\x89+\xf9\x88\xda\x8d9\xc8>C\x91\xa5\xa1,\x97\xfd\x9c\xbc\x8d\xa4m#\xde'\xc8\x19K\x88\xd9X\xa1\xb1;\xe2\xec\xa2\x13\xf8\xeb\xef\xd5.\xa28\xee\x96\xbf\x8f\xbc\xc7\xc4 \xb8M\xdf\xc1AA\x8c\xe5\xb8#eC\xed\xa8E\x1aN\x9b\x7fJ\xc0\x9egX)>a\xc4p\x85$\xfb\x92\xee\xb9p\xaf\xbc\x074\x01A\xd7\xd0\xbc\xb2\xc07\xb4H\xa9z\xff\x93?=\xf9\x0c\x9a\x03\x12\xc5\x8f\xe8\xf3\xa1;\xcfj\x00\xfd=\xaf\x92\x7fw\xd2\x97\x9c\x1f9\xac6\x9c\xeds~\xd09\xeb\xf6\xd7G,\xbb\x88\xe2\xe7c\xf7'i \xff\xf4|\xa5\xba\x8drI\xdaFc\x05\x12%~\x17\xe4\xd7G\x1d\xc5\xaf9g{\xbe\xe7\xff\x05\x00\x00\xff\xffPK\x07\x08P\xaa\x84\xd0\x8f\x02\x00\x00\xaa\x05\x00\x00PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00H\x08\x1aU`;Y\xf4u\x00\x00\x00\xa1\x00\x00\x00\n\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\x00\x00\x00\x00go.mod.srcUT\x05\x00\x01\x98\x1b\x08cPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00l\xab\xc2TP\xaa\x84\xd0\x8f\x02\x00\x00\xaa\x05\x00\x00\x07\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x81\xb6\x00\x00\x00main.goUT\x05\x00\x01<+\x99bPK\x05\x06\x00\x00\x00\x00\x02\x00\x02\x00\x7f\x00\x00\x00\x83\x03\x00\x00\x00\x00" fs.Register(data) } \ No newline at end of file diff --git a/kustomize/commands/internal/util/util_test.go b/kustomize/commands/internal/util/util_test.go index ebb3742c7..2c1ba0c1e 100644 --- a/kustomize/commands/internal/util/util_test.go +++ b/kustomize/commands/internal/util/util_test.go @@ -102,6 +102,9 @@ type fakeLoader struct { path string } +func (l fakeLoader) Repo() (string, bool) { + return "", false +} func (l fakeLoader) Root() string { return "" } diff --git a/plugin/builtin/patchjson6902transformer/go.mod b/plugin/builtin/patchjson6902transformer/go.mod index f7dcd44fc..95d79bceb 100644 --- a/plugin/builtin/patchjson6902transformer/go.mod +++ b/plugin/builtin/patchjson6902transformer/go.mod @@ -28,6 +28,7 @@ require ( github.com/xlab/treeprint v1.1.0 // indirect go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 // indirect golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd // indirect + golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e // indirect golang.org/x/text v0.3.7 // indirect google.golang.org/protobuf v1.28.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/plugin/builtin/patchjson6902transformer/go.sum b/plugin/builtin/patchjson6902transformer/go.sum index 594dd3b04..429fdec36 100644 --- a/plugin/builtin/patchjson6902transformer/go.sum +++ b/plugin/builtin/patchjson6902transformer/go.sum @@ -449,6 +449,8 @@ golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e h1:fLOSk5Q00efkSvAm+4xcoXD+RRmLmmulPn5I3Y9F2EM= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -663,8 +665,9 @@ rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/kustomize/api v0.11.5 h1:vLDp++YAX7iy2y2CVPJNy9pk9CY8XaUKgHkjbVtnWag= sigs.k8s.io/kustomize/api v0.11.5/go.mod h1:2UDpxS6AonWXow2ZbySd4AjUxmdXLeTlvGBC46uSiq8= -sigs.k8s.io/kustomize/kyaml v0.13.7 h1:/EZ/nPaLUzeJKF/BuJ4QCuMVJWiEVoI8iftOHY3g3tk= sigs.k8s.io/kustomize/kyaml v0.13.7/go.mod h1:6K+IUOuir3Y7nucPRAjw9yth04KSWBnP5pqUTGwj/qU= +sigs.k8s.io/kustomize/kyaml v0.13.9 h1:Qz53EAaFFANyNgyOEJbT/yoIHygK40/ZcvU3rgry2Tk= +sigs.k8s.io/kustomize/kyaml v0.13.9/go.mod h1:QsRbD0/KcU+wdk0/L0fIp2KLnohkVzs6fQ85/nOXac4= sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= diff --git a/plugin/builtin/patchtransformer/go.mod b/plugin/builtin/patchtransformer/go.mod index 0a645c62a..db7f07406 100644 --- a/plugin/builtin/patchtransformer/go.mod +++ b/plugin/builtin/patchtransformer/go.mod @@ -28,6 +28,7 @@ require ( github.com/xlab/treeprint v1.1.0 // indirect go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 // indirect golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd // indirect + golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e // indirect golang.org/x/text v0.3.7 // indirect google.golang.org/protobuf v1.28.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/plugin/builtin/patchtransformer/go.sum b/plugin/builtin/patchtransformer/go.sum index 594dd3b04..429fdec36 100644 --- a/plugin/builtin/patchtransformer/go.sum +++ b/plugin/builtin/patchtransformer/go.sum @@ -449,6 +449,8 @@ golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e h1:fLOSk5Q00efkSvAm+4xcoXD+RRmLmmulPn5I3Y9F2EM= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -663,8 +665,9 @@ rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/kustomize/api v0.11.5 h1:vLDp++YAX7iy2y2CVPJNy9pk9CY8XaUKgHkjbVtnWag= sigs.k8s.io/kustomize/api v0.11.5/go.mod h1:2UDpxS6AonWXow2ZbySd4AjUxmdXLeTlvGBC46uSiq8= -sigs.k8s.io/kustomize/kyaml v0.13.7 h1:/EZ/nPaLUzeJKF/BuJ4QCuMVJWiEVoI8iftOHY3g3tk= sigs.k8s.io/kustomize/kyaml v0.13.7/go.mod h1:6K+IUOuir3Y7nucPRAjw9yth04KSWBnP5pqUTGwj/qU= +sigs.k8s.io/kustomize/kyaml v0.13.9 h1:Qz53EAaFFANyNgyOEJbT/yoIHygK40/ZcvU3rgry2Tk= +sigs.k8s.io/kustomize/kyaml v0.13.9/go.mod h1:QsRbD0/KcU+wdk0/L0fIp2KLnohkVzs6fQ85/nOXac4= sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= diff --git a/plugin/builtin/prefixtransformer/go.mod b/plugin/builtin/prefixtransformer/go.mod index 25f9b48aa..bbbf7730c 100644 --- a/plugin/builtin/prefixtransformer/go.mod +++ b/plugin/builtin/prefixtransformer/go.mod @@ -27,6 +27,7 @@ require ( github.com/xlab/treeprint v1.1.0 // indirect go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 // indirect golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd // indirect + golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e // indirect golang.org/x/text v0.3.7 // indirect google.golang.org/protobuf v1.28.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/plugin/builtin/prefixtransformer/go.sum b/plugin/builtin/prefixtransformer/go.sum index 594dd3b04..429fdec36 100644 --- a/plugin/builtin/prefixtransformer/go.sum +++ b/plugin/builtin/prefixtransformer/go.sum @@ -449,6 +449,8 @@ golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e h1:fLOSk5Q00efkSvAm+4xcoXD+RRmLmmulPn5I3Y9F2EM= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -663,8 +665,9 @@ rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/kustomize/api v0.11.5 h1:vLDp++YAX7iy2y2CVPJNy9pk9CY8XaUKgHkjbVtnWag= sigs.k8s.io/kustomize/api v0.11.5/go.mod h1:2UDpxS6AonWXow2ZbySd4AjUxmdXLeTlvGBC46uSiq8= -sigs.k8s.io/kustomize/kyaml v0.13.7 h1:/EZ/nPaLUzeJKF/BuJ4QCuMVJWiEVoI8iftOHY3g3tk= sigs.k8s.io/kustomize/kyaml v0.13.7/go.mod h1:6K+IUOuir3Y7nucPRAjw9yth04KSWBnP5pqUTGwj/qU= +sigs.k8s.io/kustomize/kyaml v0.13.9 h1:Qz53EAaFFANyNgyOEJbT/yoIHygK40/ZcvU3rgry2Tk= +sigs.k8s.io/kustomize/kyaml v0.13.9/go.mod h1:QsRbD0/KcU+wdk0/L0fIp2KLnohkVzs6fQ85/nOXac4= sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= diff --git a/plugin/builtin/replicacounttransformer/go.mod b/plugin/builtin/replicacounttransformer/go.mod index d4fe3331d..fdf6e772c 100644 --- a/plugin/builtin/replicacounttransformer/go.mod +++ b/plugin/builtin/replicacounttransformer/go.mod @@ -28,6 +28,7 @@ require ( github.com/xlab/treeprint v1.1.0 // indirect go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 // indirect golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd // indirect + golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e // indirect golang.org/x/text v0.3.7 // indirect google.golang.org/protobuf v1.28.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/plugin/builtin/replicacounttransformer/go.sum b/plugin/builtin/replicacounttransformer/go.sum index 594dd3b04..429fdec36 100644 --- a/plugin/builtin/replicacounttransformer/go.sum +++ b/plugin/builtin/replicacounttransformer/go.sum @@ -449,6 +449,8 @@ golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e h1:fLOSk5Q00efkSvAm+4xcoXD+RRmLmmulPn5I3Y9F2EM= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -663,8 +665,9 @@ rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/kustomize/api v0.11.5 h1:vLDp++YAX7iy2y2CVPJNy9pk9CY8XaUKgHkjbVtnWag= sigs.k8s.io/kustomize/api v0.11.5/go.mod h1:2UDpxS6AonWXow2ZbySd4AjUxmdXLeTlvGBC46uSiq8= -sigs.k8s.io/kustomize/kyaml v0.13.7 h1:/EZ/nPaLUzeJKF/BuJ4QCuMVJWiEVoI8iftOHY3g3tk= sigs.k8s.io/kustomize/kyaml v0.13.7/go.mod h1:6K+IUOuir3Y7nucPRAjw9yth04KSWBnP5pqUTGwj/qU= +sigs.k8s.io/kustomize/kyaml v0.13.9 h1:Qz53EAaFFANyNgyOEJbT/yoIHygK40/ZcvU3rgry2Tk= +sigs.k8s.io/kustomize/kyaml v0.13.9/go.mod h1:QsRbD0/KcU+wdk0/L0fIp2KLnohkVzs6fQ85/nOXac4= sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= diff --git a/plugin/builtin/suffixtransformer/go.mod b/plugin/builtin/suffixtransformer/go.mod index 8a8ba622c..1d9890321 100644 --- a/plugin/builtin/suffixtransformer/go.mod +++ b/plugin/builtin/suffixtransformer/go.mod @@ -27,6 +27,7 @@ require ( github.com/xlab/treeprint v1.1.0 // indirect go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 // indirect golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd // indirect + golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e // indirect golang.org/x/text v0.3.7 // indirect google.golang.org/protobuf v1.28.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/plugin/builtin/suffixtransformer/go.sum b/plugin/builtin/suffixtransformer/go.sum index 594dd3b04..429fdec36 100644 --- a/plugin/builtin/suffixtransformer/go.sum +++ b/plugin/builtin/suffixtransformer/go.sum @@ -449,6 +449,8 @@ golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e h1:fLOSk5Q00efkSvAm+4xcoXD+RRmLmmulPn5I3Y9F2EM= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -663,8 +665,9 @@ rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/kustomize/api v0.11.5 h1:vLDp++YAX7iy2y2CVPJNy9pk9CY8XaUKgHkjbVtnWag= sigs.k8s.io/kustomize/api v0.11.5/go.mod h1:2UDpxS6AonWXow2ZbySd4AjUxmdXLeTlvGBC46uSiq8= -sigs.k8s.io/kustomize/kyaml v0.13.7 h1:/EZ/nPaLUzeJKF/BuJ4QCuMVJWiEVoI8iftOHY3g3tk= sigs.k8s.io/kustomize/kyaml v0.13.7/go.mod h1:6K+IUOuir3Y7nucPRAjw9yth04KSWBnP5pqUTGwj/qU= +sigs.k8s.io/kustomize/kyaml v0.13.9 h1:Qz53EAaFFANyNgyOEJbT/yoIHygK40/ZcvU3rgry2Tk= +sigs.k8s.io/kustomize/kyaml v0.13.9/go.mod h1:QsRbD0/KcU+wdk0/L0fIp2KLnohkVzs6fQ85/nOXac4= sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=