From 0dc36a4f7cdb207646cb4379e9f7464b40a43bd2 Mon Sep 17 00:00:00 2001 From: Phani Teja Marupaka Date: Wed, 2 Sep 2020 13:33:50 -0700 Subject: [PATCH] Annotate With Subpackages Delete Setters And Subst With Subpkgs --- cmd/config/internal/commands/annotate.go | 70 +++++++++-- cmd/config/internal/commands/annotate_test.go | 70 +++++++++++ .../internal/commands/cmddeletesetter.go | 60 +++++++-- .../internal/commands/cmddeletesetter_test.go | 117 +++++++++++++++--- .../commands/cmddeletesubstitution.go | 49 +++++++- .../commands/cmddeletesubstitution_test.go | 62 +++++----- kyaml/setters2/delete.go | 8 +- .../settersutil/deletecreator_test.go | 4 +- kyaml/setters2/settersutil/deletercreator.go | 18 ++- 9 files changed, 373 insertions(+), 85 deletions(-) diff --git a/cmd/config/internal/commands/annotate.go b/cmd/config/internal/commands/annotate.go index 1a22e9b37..9ccd4129f 100644 --- a/cmd/config/internal/commands/annotate.go +++ b/cmd/config/internal/commands/annotate.go @@ -4,9 +4,12 @@ package commands import ( + "fmt" + "io" "strings" "github.com/spf13/cobra" + "sigs.k8s.io/kustomize/cmd/config/ext" "sigs.k8s.io/kustomize/cmd/config/internal/generateddocs/commands" "sigs.k8s.io/kustomize/kyaml/errors" "sigs.k8s.io/kustomize/kyaml/kio" @@ -31,6 +34,8 @@ func NewAnnotateRunner(parent string) *AnnotateRunner { c.Flags().StringVar(&r.Name, "name", "", "Resource name to annotate") c.Flags().StringVar(&r.Namespace, "namespace", "", "Resource namespace to annotate") c.Flags().StringSliceVar(&r.Values, "kv", []string{}, "annotation as KEY=VALUE") + c.Flags().BoolVarP(&r.RecurseSubPackages, "recurse-subpackages", "R", false, + "add annotations recursively in all the nested subpackages") return r } @@ -39,13 +44,14 @@ func AnnotateCommand(parent string) *cobra.Command { } type AnnotateRunner struct { - Command *cobra.Command - Values []string - Kind string - Name string - ApiVersion string - Namespace string - Path string + Command *cobra.Command + Values []string + Kind string + Name string + ApiVersion string + Namespace string + Path string + RecurseSubPackages bool } func (r *AnnotateRunner) runE(c *cobra.Command, args []string) error { @@ -55,16 +61,54 @@ func (r *AnnotateRunner) runE(c *cobra.Command, args []string) error { rw := &kio.ByteReadWriter{Reader: c.InOrStdin(), Writer: c.OutOrStdout()} input = []kio.Reader{rw} output = []kio.Writer{rw} - } else { - rw := &kio.LocalPackageReadWriter{PackagePath: args[0], NoDeleteFiles: true} - input = []kio.Reader{rw} - output = []kio.Writer{rw} + + return handleError(c, kio.Pipeline{ + Inputs: input, + Filters: []kio.Filter{r}, + Outputs: output, + }.Execute()) } - return handleError(c, kio.Pipeline{ + + e := executeCmdOnPkgs{ + writer: c.OutOrStdout(), + needOpenAPI: false, + recurseSubPackages: r.RecurseSubPackages, + cmdRunner: r, + rootPkgPath: args[0], + } + + err := e.execute() + if err != nil { + return err + } + return nil +} + +func (r *AnnotateRunner) executeCmd(w io.Writer, pkgPath string) error { + openAPIFileName, err := ext.OpenAPIFileName() + if err != nil { + return err + } + rw := &kio.LocalPackageReadWriter{PackagePath: pkgPath, NoDeleteFiles: true, PackageFileName: openAPIFileName} + input := []kio.Reader{rw} + output := []kio.Writer{rw} + err = kio.Pipeline{ Inputs: input, Filters: []kio.Filter{r}, Outputs: output, - }.Execute()) + }.Execute() + if err != nil { + // return err if there is only package + if !r.RecurseSubPackages { + return err + } else { + // print error message and continue if there are multiple packages to annotate + fmt.Fprintf(w, "%s in package %q\n", err.Error(), pkgPath) + } + } else { + fmt.Fprintf(w, "added annotations in package %q\n", pkgPath) + } + return nil } func (r *AnnotateRunner) Filter(nodes []*yaml.RNode) ([]*yaml.RNode, error) { diff --git a/cmd/config/internal/commands/annotate_test.go b/cmd/config/internal/commands/annotate_test.go index 13f180961..beda80877 100644 --- a/cmd/config/internal/commands/annotate_test.go +++ b/cmd/config/internal/commands/annotate_test.go @@ -12,7 +12,9 @@ import ( "testing" "github.com/stretchr/testify/assert" + "sigs.k8s.io/kustomize/kyaml/copyutil" "sigs.k8s.io/kustomize/kyaml/kio" + "sigs.k8s.io/kustomize/kyaml/openapi" ) func TestAnnotateCommand(t *testing.T) { @@ -486,3 +488,71 @@ spec: replicas: 3 ` ) + +func TestAnnotateSubPackages(t *testing.T) { + var tests = []struct { + name string + dataset string + packagePath string + args []string + expected string + }{ + { + name: "annotate-recurse-subpackages", + dataset: "dataset-without-setters", + args: []string{"--kv", "foo=bar", "-R"}, + expected: ` +added annotations in package "${baseDir}/mysql" +added annotations in package "${baseDir}/mysql/storage" +`, + }, + { + name: "annotate-top-level-pkg-no-recurse-subpackages", + dataset: "dataset-without-setters", + packagePath: "mysql", + args: []string{"--kv", "foo=bar"}, + expected: `added annotations in package "${baseDir}/mysql"`, + }, + { + name: "annotate-nested-pkg-no-recurse-subpackages", + dataset: "dataset-without-setters", + packagePath: "mysql/storage", + args: []string{"--kv", "foo=bar"}, + expected: `added annotations in package "${baseDir}/mysql/storage"`, + }, + } + for i := range tests { + test := tests[i] + t.Run(test.name, func(t *testing.T) { + // reset the openAPI afterward + openapi.ResetOpenAPI() + defer openapi.ResetOpenAPI() + sourceDir := filepath.Join("test", "testdata", test.dataset) + baseDir, err := ioutil.TempDir("", "") + if !assert.NoError(t, err) { + t.FailNow() + } + copyutil.CopyDir(sourceDir, baseDir) + defer os.RemoveAll(baseDir) + runner := NewAnnotateRunner("") + actual := &bytes.Buffer{} + runner.Command.SetOut(actual) + runner.Command.SetArgs(append([]string{filepath.Join(baseDir, test.packagePath)}, test.args...)) + err = runner.Command.Execute() + if !assert.NoError(t, err) { + t.FailNow() + } + + // normalize path format for windows + actualNormalized := strings.Replace( + strings.Replace(actual.String(), "\\", "/", -1), + "//", "/", -1) + + expected := strings.Replace(test.expected, "${baseDir}", baseDir, -1) + expectedNormalized := strings.Replace(expected, "\\", "/", -1) + if !assert.Equal(t, strings.TrimSpace(expectedNormalized), strings.TrimSpace(actualNormalized)) { + t.FailNow() + } + }) + } +} diff --git a/cmd/config/internal/commands/cmddeletesetter.go b/cmd/config/internal/commands/cmddeletesetter.go index e81c3dfd1..5f131c6ff 100644 --- a/cmd/config/internal/commands/cmddeletesetter.go +++ b/cmd/config/internal/commands/cmddeletesetter.go @@ -4,11 +4,14 @@ package commands import ( + "fmt" + "io" + "path/filepath" + "github.com/spf13/cobra" "sigs.k8s.io/kustomize/cmd/config/ext" "sigs.k8s.io/kustomize/cmd/config/internal/generateddocs/commands" "sigs.k8s.io/kustomize/kyaml/fieldmeta" - "sigs.k8s.io/kustomize/kyaml/openapi" "sigs.k8s.io/kustomize/kyaml/setters2/settersutil" ) @@ -24,6 +27,8 @@ func NewDeleteSetterRunner(parent string) *DeleteSetterRunner { PreRunE: r.preRunE, RunE: r.runE, } + c.Flags().BoolVarP(&r.RecurseSubPackages, "recurse-subpackages", "R", false, + "deletes setter recursively in all the nested subpackages") fixDocs(parent, c) r.Command = c @@ -35,9 +40,10 @@ func DeleteSetterCommand(parent string) *cobra.Command { } type DeleteSetterRunner struct { - Command *cobra.Command - DeleteSetter settersutil.DeleterCreator - OpenAPIFile string + Command *cobra.Command + DeleteSetter settersutil.DeleterCreator + OpenAPIFile string + RecurseSubPackages bool } func (r *DeleteSetterRunner) preRunE(c *cobra.Command, args []string) error { @@ -50,17 +56,49 @@ func (r *DeleteSetterRunner) preRunE(c *cobra.Command, args []string) error { return err } - if err := openapi.AddSchemaFromFile(r.OpenAPIFile); err != nil { - return err - } - return nil } func (r *DeleteSetterRunner) runE(c *cobra.Command, args []string) error { - return handleError(c, r.delete(c, args)) + e := executeCmdOnPkgs{ + needOpenAPI: true, + writer: c.OutOrStdout(), + rootPkgPath: args[0], + recurseSubPackages: r.RecurseSubPackages, + cmdRunner: r, + } + err := e.execute() + if err != nil { + return handleError(c, err) + } + return nil } -func (r *DeleteSetterRunner) delete(c *cobra.Command, args []string) error { - return r.DeleteSetter.Delete(r.OpenAPIFile, args[0]) +func (r *DeleteSetterRunner) executeCmd(w io.Writer, pkgPath string) error { + openAPIFileName, err := ext.OpenAPIFileName() + if err != nil { + return err + } + r.DeleteSetter = settersutil.DeleterCreator{ + Name: r.DeleteSetter.Name, + DefinitionPrefix: fieldmeta.SetterDefinitionPrefix, + RecurseSubPackages: r.RecurseSubPackages, + OpenAPIFileName: openAPIFileName, + OpenAPIPath: filepath.Join(pkgPath, openAPIFileName), + ResourcesPath: pkgPath, + } + + err = r.DeleteSetter.Delete() + if err != nil { + // return err if RecurseSubPackages is false + if !r.DeleteSetter.RecurseSubPackages { + return err + } else { + // print error message and continue if RecurseSubPackages is true + fmt.Fprintf(w, "%s in package %q\n\n", err.Error(), pkgPath) + } + } else { + fmt.Fprintf(w, "deleted setter %q in package %q\n\n", r.DeleteSetter.Name, pkgPath) + } + return nil } diff --git a/cmd/config/internal/commands/cmddeletesetter_test.go b/cmd/config/internal/commands/cmddeletesetter_test.go index 88f55088f..308d069d2 100644 --- a/cmd/config/internal/commands/cmddeletesetter_test.go +++ b/cmd/config/internal/commands/cmddeletesetter_test.go @@ -7,12 +7,13 @@ import ( "bytes" "io/ioutil" "os" + "path/filepath" "strings" "testing" "github.com/stretchr/testify/assert" - "sigs.k8s.io/kustomize/cmd/config/ext" "sigs.k8s.io/kustomize/cmd/config/internal/commands" + "sigs.k8s.io/kustomize/kyaml/copyutil" "sigs.k8s.io/kustomize/kyaml/openapi" ) @@ -52,6 +53,7 @@ openAPI: value: "3" setBy: me `, + out: `deleted setter "replicas-setter" in package "${baseDir}"`, expectedOpenAPI: ` apiVersion: v1alpha1 kind: Example @@ -95,6 +97,7 @@ openAPI: name: image value: nginx `, + out: `deleted setter "replicas-setter" in package "${baseDir}"`, expectedOpenAPI: ` apiVersion: v1alpha1 kind: Example @@ -158,6 +161,7 @@ spec: - "b" - "c" `, + out: `deleted setter "list" in package "${baseDir}"`, expectedResources: ` apiVersion: example.com/v1beta1 kind: Example1 @@ -226,7 +230,7 @@ metadata: spec: replicas: 3 # {"$openapi" : "replicas-setter"} `, - err: `setter with name image does not exist`, + err: `setter "image" does not exist`, }, { name: "delete setter used in substitution error", @@ -287,7 +291,7 @@ openAPI: apiVersion: apps/v1 kind: Deployment `, - err: `setter is used in substitution image, please delete the parent substitution first`, + err: `setter "image-name" is used in substitution "image", please delete the parent substitution first`, }, } for i := range tests { @@ -297,24 +301,18 @@ kind: Deployment openapi.ResetOpenAPI() defer openapi.ResetOpenAPI() - f, err := ioutil.TempFile("", "k8s-cli-") + baseDir, err := ioutil.TempDir("", "") if !assert.NoError(t, err) { t.FailNow() } - defer os.Remove(f.Name()) - - err = ioutil.WriteFile(f.Name(), []byte(test.inputOpenAPI), 0600) + defer os.RemoveAll(baseDir) + f := filepath.Join(baseDir, "Krmfile") + err = ioutil.WriteFile(f, []byte(test.inputOpenAPI), 0600) if !assert.NoError(t, err) { t.FailNow() } - old := ext.GetOpenAPIFile - defer func() { ext.GetOpenAPIFile = old }() - ext.GetOpenAPIFile = func(args []string) (s string, err error) { - return f.Name(), nil - } - - r, err := ioutil.TempFile("", "k8s-cli-*.yaml") + r, err := ioutil.TempFile(baseDir, "k8s-cli-*.yaml") if !assert.NoError(t, err) { t.FailNow() } @@ -327,21 +325,29 @@ kind: Deployment runner := commands.NewDeleteSetterRunner("") out := &bytes.Buffer{} runner.Command.SetOut(out) - runner.Command.SetArgs(append([]string{r.Name()}, test.args...)) + runner.Command.SetArgs(append([]string{baseDir}, test.args...)) err = runner.Command.Execute() + if test.err != "" { if !assert.NotNil(t, err) { t.FailNow() - } else { - assert.Equal(t, err.Error(), test.err) - return } + assert.Equal(t, test.err, err.Error()) + return } if !assert.NoError(t, err) { t.FailNow() } - if !assert.Equal(t, test.out, out.String()) { + // normalize path format for windows + actualNorm := strings.Replace( + strings.Replace(out.String(), "\\", "/", -1), + "//", "/", -1) + + expectedOut := strings.Replace(test.out, "${baseDir}", baseDir, -1) + expectedNormalized := strings.Replace(expectedOut, "\\", "/", -1) + + if !assert.Equal(t, expectedNormalized, strings.TrimSpace(actualNorm)) { t.FailNow() } @@ -355,7 +361,7 @@ kind: Deployment t.FailNow() } - actualOpenAPI, err := ioutil.ReadFile(f.Name()) + actualOpenAPI, err := ioutil.ReadFile(f) if !assert.NoError(t, err) { t.FailNow() } @@ -367,3 +373,74 @@ kind: Deployment }) } } + +func TestDeleteSetterSubPackages(t *testing.T) { + var tests = []struct { + name string + dataset string + packagePath string + args []string + expected string + }{ + { + name: "delete-setter-recurse-subpackages", + dataset: "dataset-with-setters", + args: []string{"namespace", "-R"}, + expected: ` +deleted setter "namespace" in package "${baseDir}/mysql" + +setter "namespace" does not exist in package "${baseDir}/mysql/nosetters" + +deleted setter "namespace" in package "${baseDir}/mysql/storage" +`, + }, + { + name: "delete-setter-top-level-pkg-no-recurse-subpackages", + dataset: "dataset-with-setters", + packagePath: "mysql", + args: []string{"namespace"}, + expected: `deleted setter "namespace" in package "${baseDir}/mysql"`, + }, + { + name: "delete-setter-nested-pkg-no-recurse-subpackages", + dataset: "dataset-with-setters", + packagePath: "mysql/storage", + args: []string{"namespace"}, + expected: `deleted setter "namespace" in package "${baseDir}/mysql/storage"`, + }, + } + for i := range tests { + test := tests[i] + t.Run(test.name, func(t *testing.T) { + // reset the openAPI afterward + openapi.ResetOpenAPI() + defer openapi.ResetOpenAPI() + sourceDir := filepath.Join("test", "testdata", test.dataset) + baseDir, err := ioutil.TempDir("", "") + if !assert.NoError(t, err) { + t.FailNow() + } + copyutil.CopyDir(sourceDir, baseDir) + //defer os.RemoveAll(baseDir) + runner := commands.NewDeleteSetterRunner("") + actual := &bytes.Buffer{} + runner.Command.SetOut(actual) + runner.Command.SetArgs(append([]string{filepath.Join(baseDir, test.packagePath)}, test.args...)) + err = runner.Command.Execute() + if !assert.NoError(t, err) { + t.FailNow() + } + + // normalize path format for windows + actualNormalized := strings.Replace( + strings.Replace(actual.String(), "\\", "/", -1), + "//", "/", -1) + + expected := strings.Replace(test.expected, "${baseDir}", baseDir, -1) + expectedNormalized := strings.Replace(expected, "\\", "/", -1) + if !assert.Equal(t, strings.TrimSpace(expectedNormalized), strings.TrimSpace(actualNormalized)) { + t.FailNow() + } + }) + } +} diff --git a/cmd/config/internal/commands/cmddeletesubstitution.go b/cmd/config/internal/commands/cmddeletesubstitution.go index cf1997473..86aa30ab8 100644 --- a/cmd/config/internal/commands/cmddeletesubstitution.go +++ b/cmd/config/internal/commands/cmddeletesubstitution.go @@ -4,6 +4,10 @@ package commands import ( + "fmt" + "io" + "path/filepath" + "github.com/spf13/cobra" "sigs.k8s.io/kustomize/cmd/config/ext" "sigs.k8s.io/kustomize/kyaml/fieldmeta" @@ -20,6 +24,8 @@ func NewDeleteSubstitutionRunner(parent string) *DeleteSubstitutionRunner { PreRunE: r.preRunE, RunE: r.runE, } + c.Flags().BoolVarP(&r.RecurseSubPackages, "recurse-subpackages", "R", false, + "deletes substitution recursively in all the nested subpackages") fixDocs(parent, c) r.Command = c @@ -34,6 +40,7 @@ type DeleteSubstitutionRunner struct { Command *cobra.Command DeleteSubstitution settersutil.DeleterCreator OpenAPIFile string + RecurseSubPackages bool } func (r *DeleteSubstitutionRunner) preRunE(c *cobra.Command, args []string) error { @@ -54,9 +61,45 @@ func (r *DeleteSubstitutionRunner) preRunE(c *cobra.Command, args []string) erro } func (r *DeleteSubstitutionRunner) runE(c *cobra.Command, args []string) error { - return handleError(c, r.delete(c, args)) + e := executeCmdOnPkgs{ + needOpenAPI: true, + writer: c.OutOrStdout(), + rootPkgPath: args[0], + recurseSubPackages: r.RecurseSubPackages, + cmdRunner: r, + } + err := e.execute() + if err != nil { + return handleError(c, err) + } + return nil } -func (r *DeleteSubstitutionRunner) delete(c *cobra.Command, args []string) error { - return r.DeleteSubstitution.Delete(r.OpenAPIFile, args[0]) +func (r *DeleteSubstitutionRunner) executeCmd(w io.Writer, pkgPath string) error { + openAPIFileName, err := ext.OpenAPIFileName() + if err != nil { + return err + } + r.DeleteSubstitution = settersutil.DeleterCreator{ + Name: r.DeleteSubstitution.Name, + DefinitionPrefix: fieldmeta.SubstitutionDefinitionPrefix, + RecurseSubPackages: r.RecurseSubPackages, + OpenAPIFileName: openAPIFileName, + OpenAPIPath: filepath.Join(pkgPath, openAPIFileName), + ResourcesPath: pkgPath, + } + + err = r.DeleteSubstitution.Delete() + if err != nil { + // return err if RecurseSubPackages is false + if !r.DeleteSubstitution.RecurseSubPackages { + return err + } else { + // print error message and continue if RecurseSubPackages is true + fmt.Fprintf(w, "%s in package %q\n\n", err.Error(), pkgPath) + } + } else { + fmt.Fprintf(w, "deleted substitution %q in package %q\n\n", r.DeleteSubstitution.Name, pkgPath) + } + return nil } diff --git a/cmd/config/internal/commands/cmddeletesubstitution_test.go b/cmd/config/internal/commands/cmddeletesubstitution_test.go index 9dd6c2d69..290b84f7b 100644 --- a/cmd/config/internal/commands/cmddeletesubstitution_test.go +++ b/cmd/config/internal/commands/cmddeletesubstitution_test.go @@ -7,11 +7,11 @@ import ( "bytes" "io/ioutil" "os" + "path/filepath" "strings" "testing" "github.com/stretchr/testify/assert" - "sigs.k8s.io/kustomize/cmd/config/ext" "sigs.k8s.io/kustomize/cmd/config/internal/commands" "sigs.k8s.io/kustomize/kyaml/openapi" ) @@ -79,6 +79,7 @@ spec: - name: sidecar image: nginx:1.7.9 # {"$ref":"#/definitions/io.k8s.cli.substitutions.my.image"} `, + out: `deleted substitution "my.image" in package "${baseDir}"`, expectedResources: ` apiVersion: apps/v1 kind: Deployment @@ -169,6 +170,7 @@ spec: - name: sidecar image: nginx:1.7.9 # {"$openapi":"my-image-sub"} `, + out: `deleted substitution "my-image-sub" in package "${baseDir}"`, expectedResources: ` apiVersion: apps/v1 kind: Deployment @@ -297,7 +299,7 @@ openAPI: value: "3" setBy: me `, - err: "substitution with name my-image-sub-not-present does not exist", + err: `substitution "my-image-sub-not-present" does not exist`, }, { @@ -415,7 +417,7 @@ spec: - name: sidecar image: nginx::1.7.9 # {"$openapi":"my-image-subst"} `, - err: "substitution is used in substitution my-nested-subst, please delete the parent substitution first", + err: `substitution "my-image-subst" is used in substitution "my-nested-subst", please delete the parent substitution first`, }, } for i := range tests { @@ -425,24 +427,18 @@ spec: openapi.ResetOpenAPI() defer openapi.ResetOpenAPI() - f, err := ioutil.TempFile("", "k8s-cli-") + baseDir, err := ioutil.TempDir("", "") if !assert.NoError(t, err) { t.FailNow() } - defer os.Remove(f.Name()) - - err = ioutil.WriteFile(f.Name(), []byte(test.inputOpenAPI), 0600) + defer os.RemoveAll(baseDir) + f := filepath.Join(baseDir, "Krmfile") + err = ioutil.WriteFile(f, []byte(test.inputOpenAPI), 0600) if !assert.NoError(t, err) { t.FailNow() } - old := ext.GetOpenAPIFile - defer func() { ext.GetOpenAPIFile = old }() - ext.GetOpenAPIFile = func(args []string) (s string, err error) { - return f.Name(), nil - } - - r, err := ioutil.TempFile("", "k8s-cli-*.yaml") + r, err := ioutil.TempFile(baseDir, "k8s-cli-*.yaml") if !assert.NoError(t, err) { t.FailNow() } @@ -455,21 +451,38 @@ spec: runner := commands.NewDeleteSubstitutionRunner("") out := &bytes.Buffer{} runner.Command.SetOut(out) - runner.Command.SetArgs(append([]string{r.Name()}, test.args...)) + runner.Command.SetArgs(append([]string{baseDir}, test.args...)) err = runner.Command.Execute() + if test.err != "" { if !assert.NotNil(t, err) { t.FailNow() - } else { - assert.Equal(t, err.Error(), test.err) - return } + assert.Equal(t, test.err, err.Error()) + return } if !assert.NoError(t, err) { t.FailNow() } - if !assert.Equal(t, test.out, out.String()) { + // normalize path format for windows + actualNorm := strings.Replace( + strings.Replace(out.String(), "\\", "/", -1), + "//", "/", -1) + expectedOut := strings.Replace(test.out, "${baseDir}", baseDir, -1) + expectedNorm := strings.Replace(expectedOut, "\\", "/", -1) + + if !assert.Equal(t, expectedNorm, strings.TrimSpace(actualNorm)) { + t.FailNow() + } + + actualOpenAPI, err := ioutil.ReadFile(f) + if !assert.NoError(t, err) { + t.FailNow() + } + if !assert.Equal(t, + strings.TrimSpace(test.expectedOpenAPI), + strings.TrimSpace(string(actualOpenAPI))) { t.FailNow() } @@ -480,18 +493,9 @@ spec: if !assert.Equal(t, strings.TrimSpace(test.expectedResources), strings.TrimSpace(string(actualResources))) { - return + t.FailNow() } - actualOpenAPI, err := ioutil.ReadFile(f.Name()) - if !assert.NoError(t, err) { - t.FailNow() - } - if !assert.Equal(t, - strings.TrimSpace(test.expectedOpenAPI), - strings.TrimSpace(string(actualOpenAPI))) { - t.FailNow() - } }) } } diff --git a/kyaml/setters2/delete.go b/kyaml/setters2/delete.go index f594e2f88..fe56aefe2 100644 --- a/kyaml/setters2/delete.go +++ b/kyaml/setters2/delete.go @@ -135,18 +135,18 @@ func (dd DeleterDefinition) Filter(object *yaml.RNode) (*yaml.RNode, error) { } definitions, err := object.Pipe(yaml.Lookup(openapi.SupplementaryOpenAPIFieldName, "definitions")) - if err != nil || definitions == nil { + if err != nil { return nil, err } // return error if the setter to be deleted doesn't exist - if definitions.Field(key) == nil { - return nil, errors.Errorf("%s with name %s does not exist", defType, dd.Name) + if definitions == nil || definitions.Field(key) == nil { + return nil, errors.Errorf("%s %q does not exist", defType, dd.Name) } subst := SubstReferringDefinition(definitions, key) if subst != "" { - return nil, errors.Errorf("%s is used in substitution %s, please delete the parent substitution first", defType, subst) + return nil, errors.Errorf("%s %q is used in substitution %q, please delete the parent substitution first", defType, dd.Name, subst) } _, err = definitions.Pipe(yaml.FieldClearer{Name: key}) diff --git a/kyaml/setters2/settersutil/deletecreator_test.go b/kyaml/setters2/settersutil/deletecreator_test.go index 6d8e6015a..34201a6de 100644 --- a/kyaml/setters2/settersutil/deletecreator_test.go +++ b/kyaml/setters2/settersutil/deletecreator_test.go @@ -75,8 +75,10 @@ func TestDeleterCreator_Delete(t *testing.T) { if !assert.NoError(t, err) { t.FailNow() } + dc.OpenAPIPath = openAPI.Name() + dc.ResourcesPath = resource.Name() - err = dc.Delete(openAPI.Name(), resource.Name()) + err = dc.Delete() if !assert.NoError(t, err) { t.FailNow() } diff --git a/kyaml/setters2/settersutil/deletercreator.go b/kyaml/setters2/settersutil/deletercreator.go index b84eabfa8..2c86a3c96 100644 --- a/kyaml/setters2/settersutil/deletercreator.go +++ b/kyaml/setters2/settersutil/deletercreator.go @@ -17,24 +17,34 @@ type DeleterCreator struct { // DefinitionPrefix is the prefix of the OpenAPI definition type DefinitionPrefix string + + RecurseSubPackages bool + + OpenAPIFileName string + + // Path to openAPI file + OpenAPIPath string + + // Path to resources folder + ResourcesPath string } -func (d DeleterCreator) Delete(openAPIPath, resourcesPath string) error { +func (d DeleterCreator) Delete() error { dd := setters2.DeleterDefinition{ Name: d.Name, DefinitionPrefix: d.DefinitionPrefix, } - if err := dd.DeleteFromFile(openAPIPath); err != nil { + if err := dd.DeleteFromFile(d.OpenAPIPath); err != nil { return err } // Load the updated definitions - if err := openapi.AddSchemaFromFile(openAPIPath); err != nil { + if err := openapi.AddSchemaFromFile(d.OpenAPIPath); err != nil { return err } // Update the resources with the deleter reference - inout := &kio.LocalPackageReadWriter{PackagePath: resourcesPath} + inout := &kio.LocalPackageReadWriter{PackagePath: d.ResourcesPath, PackageFileName: d.OpenAPIFileName} return kio.Pipeline{ Inputs: []kio.Reader{inout}, Filters: []kio.Filter{kio.FilterAll(