From 2278e01b7f72265910ff72c8e12d5041f4e62279 Mon Sep 17 00:00:00 2001 From: Phani Teja Marupaka Date: Thu, 12 Nov 2020 15:29:07 -0800 Subject: [PATCH] Delete v1 setters code --- .../internal/commands/cmdcreatesetter.go | 134 +++++-------- .../internal/commands/cmdcreatesetter_test.go | 54 ------ .../internal/commands/cmdlistsetters.go | 36 ++-- cmd/config/internal/commands/cmdset.go | 179 ++++-------------- cmd/config/internal/commands/cmdset_test.go | 64 ------- kyaml/openapi/openapi.go | 2 +- kyaml/setters/addkio.go | 39 ---- kyaml/setters/addyaml.go | 118 ------------ kyaml/setters/dokio.go | 45 ----- kyaml/setters/doyaml.go | 130 ------------- kyaml/setters/lookupkio.go | 65 ------- kyaml/setters/lookupyaml.go | 86 --------- 12 files changed, 100 insertions(+), 852 deletions(-) delete mode 100644 kyaml/setters/addkio.go delete mode 100644 kyaml/setters/addyaml.go delete mode 100644 kyaml/setters/dokio.go delete mode 100644 kyaml/setters/doyaml.go delete mode 100644 kyaml/setters/lookupkio.go delete mode 100644 kyaml/setters/lookupyaml.go diff --git a/cmd/config/internal/commands/cmdcreatesetter.go b/cmd/config/internal/commands/cmdcreatesetter.go index 1b6b457ff..dba307c2e 100644 --- a/cmd/config/internal/commands/cmdcreatesetter.go +++ b/cmd/config/internal/commands/cmdcreatesetter.go @@ -17,8 +17,6 @@ import ( "sigs.k8s.io/kustomize/cmd/config/internal/generateddocs/commands" "sigs.k8s.io/kustomize/cmd/config/runner" "sigs.k8s.io/kustomize/kyaml/errors" - "sigs.k8s.io/kustomize/kyaml/kio" - "sigs.k8s.io/kustomize/kyaml/setters" "sigs.k8s.io/kustomize/kyaml/setters2/settersutil" ) @@ -34,34 +32,23 @@ func NewCreateSetterRunner(parent string) *CreateSetterRunner { PreRunE: r.preRunE, RunE: r.runE, } - set.Flags().StringVar(&r.Set.SetPartialField.Setter.Value, "value", "", + set.Flags().StringVar(&r.FieldValue, "value", "", "optional flag, alternative to specifying the value as an argument. e.g. used to specify values that start with '-'") - set.Flags().StringVar(&r.Set.SetPartialField.SetBy, "set-by", "", + set.Flags().StringVar(&r.SetBy, "set-by", "", "record who the field was default by.") - set.Flags().StringVar(&r.Set.SetPartialField.Description, "description", "", + set.Flags().StringVar(&r.Description, "description", "", "record a description for the current setter value.") - set.Flags().StringVar(&r.Set.SetPartialField.Field, "field", "", + set.Flags().StringVar(&r.FieldName, "field", "", "name of the field to set, a suffix of the path to the field, or the full"+ " path to the field. Default is to match all fields.") - set.Flags().StringVar(&r.Set.ResourceMeta.Name, "name", "", - "name of the Resource on which to create the setter.") - set.Flags().MarkHidden("name") - set.Flags().StringVar(&r.Set.ResourceMeta.Kind, "kind", "", - "kind of the Resource on which to create the setter.") - set.Flags().MarkHidden("kind") - set.Flags().StringVar(&r.Set.SetPartialField.Type, "type", "", + set.Flags().StringVar(&r.Type, "type", "", "OpenAPI field type for the setter -- e.g. integer,boolean,string.") - set.Flags().BoolVar(&r.Set.SetPartialField.Partial, "partial", false, - "create a partial setter for only part of the field value.") - set.Flags().MarkHidden("partial") - set.Flags().StringVar(&setterVersion, "version", "", - "use this version of the setter format") - set.Flags().BoolVar(&r.CreateSetter.Required, "required", false, + set.Flags().BoolVar(&r.Required, "required", false, "indicates that this setter must be set by package consumer before live apply/preview") set.Flags().StringVar(&r.SchemaPath, "schema-path", "", `openAPI schema file path for setter constraints -- file content `+ `e.g. {"type": "string", "maxLength": 15, "enum": ["allowedValue1", "allowedValue2"]}`) - set.Flags().BoolVarP(&r.CreateSetter.RecurseSubPackages, "recurse-subpackages", "R", false, + set.Flags().BoolVarP(&r.RecurseSubPackages, "recurse-subpackages", "R", false, "creates setter recursively in all the nested subpackages") set.Flags().MarkHidden("version") runner.FixDocs(parent, set) @@ -75,10 +62,18 @@ func CreateSetterCommand(parent string) *cobra.Command { type CreateSetterRunner struct { Command *cobra.Command - Set setters.CreateSetter CreateSetter settersutil.SetterCreator OpenAPIFile string SchemaPath string + FieldValue string + SetBy string + Description string + SetterName string + Type string + FieldName string + Schema string + Required bool + RecurseSubPackages bool } func (r *CreateSetterRunner) runE(c *cobra.Command, args []string) error { @@ -86,48 +81,29 @@ func (r *CreateSetterRunner) runE(c *cobra.Command, args []string) error { } func (r *CreateSetterRunner) preRunE(c *cobra.Command, args []string) error { - valueSetFromFlag := c.Flag("value").Changed var err error - r.Set.SetPartialField.Setter.Name = args[1] - r.CreateSetter.Name = args[1] - if valueSetFromFlag { - r.CreateSetter.FieldValue = r.Set.SetPartialField.Setter.Value - } else if len(args) > 2 { - r.Set.SetPartialField.Setter.Value = args[2] - r.CreateSetter.FieldValue = args[2] + r.SetterName = args[1] + if len(args) > 2 { + r.FieldValue = args[2] } - r.CreateSetter.FieldName, err = c.Flags().GetString("field") + r.FieldName, err = c.Flags().GetString("field") if err != nil { return err } - if setterVersion == "" { - if len(args) == 2 && r.Set.SetPartialField.Type == "array" && c.Flag("field").Changed { - setterVersion = "v2" - } else if err := initSetterVersion(c, args); err != nil { - return err - } - } - - if r.Set.SetPartialField.Type != "array" && !c.Flag("value").Changed && len(args) < 3 { + if r.Type != "array" && !c.Flag("value").Changed && len(args) < 3 { return errors.Errorf("setter name and value must be provided, " + "value can either be an argument or can be passed as a flag --value") } - if setterVersion == "v2" { - r.CreateSetter.Description = r.Set.SetPartialField.Description - r.CreateSetter.SetBy = r.Set.SetPartialField.SetBy - r.CreateSetter.Type = r.Set.SetPartialField.Type + err = r.processSchema() + if err != nil { + return err + } - err = r.processSchema() - if err != nil { - return err - } - - if r.CreateSetter.Type == "array" { - if !c.Flag("field").Changed { - return errors.Errorf("field flag must be set for array type setters") - } + if r.Type == "array" { + if !c.Flag("field").Changed { + return errors.Errorf("field flag must be set for array type setters") } } return nil @@ -139,7 +115,7 @@ func (r *CreateSetterRunner) processSchema() error { return err } - flagType := r.CreateSetter.Type + flagType := r.Type var schemaType string switch { // json schema allows more than one type to be specified, but openapi @@ -156,13 +132,13 @@ func (r *CreateSetterRunner) processSchema() error { // are both set with different values, we return an error. switch { case flagType == "" && schemaType != "": - r.CreateSetter.Type = schemaType + r.Type = schemaType case flagType != "" && schemaType == "": sc.Type = []string{flagType} case flagType != "" && schemaType != "": if flagType != schemaType { return errors.Errorf("type provided in type flag (%s) and in schema (%s) doesn't match", - r.CreateSetter.Type, sc.Type[0]) + r.Type, sc.Type[0]) } } @@ -174,48 +150,36 @@ func (r *CreateSetterRunner) processSchema() error { if err != nil { return errors.Errorf("error marshalling schema: %v", err) } - r.CreateSetter.Schema = string(b) + r.Schema = string(b) return nil } func (r *CreateSetterRunner) createSetter(c *cobra.Command, args []string) error { - if setterVersion == "v2" { - e := runner.ExecuteCmdOnPkgs{ - NeedOpenAPI: true, - Writer: c.OutOrStdout(), - RootPkgPath: args[0], - RecurseSubPackages: r.CreateSetter.RecurseSubPackages, - CmdRunner: r, - } - err := e.Execute() - if err != nil { - return runner.HandleError(c, err) - } - return nil + e := runner.ExecuteCmdOnPkgs{ + NeedOpenAPI: true, + Writer: c.OutOrStdout(), + RootPkgPath: args[0], + RecurseSubPackages: r.RecurseSubPackages, + CmdRunner: r, } - - rw := &kio.LocalPackageReadWriter{PackagePath: args[0]} - err := kio.Pipeline{ - Inputs: []kio.Reader{rw}, - Filters: []kio.Filter{&r.Set}, - Outputs: []kio.Writer{rw}}.Execute() + err := e.Execute() if err != nil { - return err + return runner.HandleError(c, err) } return nil } func (r *CreateSetterRunner) ExecuteCmd(w io.Writer, pkgPath string) error { r.CreateSetter = settersutil.SetterCreator{ - Name: r.CreateSetter.Name, - SetBy: r.CreateSetter.SetBy, - Description: r.CreateSetter.Description, - Type: r.CreateSetter.Type, - Schema: r.CreateSetter.Schema, - FieldName: r.CreateSetter.FieldName, - FieldValue: r.CreateSetter.FieldValue, - Required: r.CreateSetter.Required, - RecurseSubPackages: r.CreateSetter.RecurseSubPackages, + Name: r.SetterName, + SetBy: r.SetBy, + Description: r.Description, + Type: r.Type, + Schema: r.Schema, + FieldName: r.FieldName, + FieldValue: r.FieldValue, + Required: r.Required, + RecurseSubPackages: r.RecurseSubPackages, OpenAPIFileName: ext.KRMFileName(), OpenAPIPath: filepath.Join(pkgPath, ext.KRMFileName()), ResourcesPath: pkgPath, diff --git a/cmd/config/internal/commands/cmdcreatesetter_test.go b/cmd/config/internal/commands/cmdcreatesetter_test.go index e6be329c3..fbad66529 100644 --- a/cmd/config/internal/commands/cmdcreatesetter_test.go +++ b/cmd/config/internal/commands/cmdcreatesetter_test.go @@ -466,60 +466,6 @@ spec: replicas: 3 # {"$openapi":"foo.bar"} `, }, - - { - name: "create setter v1", - args: []string{"hubsetter", "my-hub"}, - inputOpenAPI: ` - `, - input: ` -apiVersion: install.istio.io/v1alpha2 -kind: IstioControlPlane -metadata: - clusterName: "project-id/us-east1-d/cluster-name" -spec: - profile: asm # {"type":"string","x-kustomize":{"setter":{"name":"profilesetter","value":"asm"}}} - hub: my-hub - `, - expectedOpenAPI: ` - `, - expectedResources: ` -apiVersion: install.istio.io/v1alpha2 -kind: IstioControlPlane -metadata: - clusterName: "project-id/us-east1-d/cluster-name" -spec: - profile: asm # {"type":"string","x-kustomize":{"setter":{"name":"profilesetter","value":"asm"}}} - hub: my-hub # {"type":"","x-kustomize":{"setter":{"name":"hubsetter","value":"my-hub"}}} - `, - }, - - { - name: "create partial setter v1", - args: []string{"regionsetter", "us-east1-d", "--partial"}, - inputOpenAPI: ` - `, - input: ` -apiVersion: install.istio.io/v1alpha2 -kind: IstioControlPlane -metadata: - clusterName: "project-id/us-east1-d/cluster-name" # {"type":"","x-kustomize":{"partialSetters":[{"name":"projectsetter","value":"project-id"}]}} -spec: - profile: asm # {"type":"string","x-kustomize":{"setter":{"name":"profilesetter","value":"asm"}}} - hub: my-hub # {"type":"","x-kustomize":{"setter":{"name":"hubsetter","value":"my-hub"}}} - `, - expectedOpenAPI: ` - `, - expectedResources: ` -apiVersion: install.istio.io/v1alpha2 -kind: IstioControlPlane -metadata: - clusterName: "project-id/us-east1-d/cluster-name" # {"type":"","x-kustomize":{"partialSetters":[{"name":"projectsetter","value":"project-id"},{"name":"regionsetter","value":"us-east1-d"}]}} -spec: - profile: asm # {"type":"string","x-kustomize":{"setter":{"name":"profilesetter","value":"asm"}}} - hub: my-hub # {"type":"","x-kustomize":{"setter":{"name":"hubsetter","value":"my-hub"}}} - `, - }, { name: "provide different type values in schema and with flag", args: []string{"replicas", "3", "--description", "hello world", "--type", "string"}, diff --git a/cmd/config/internal/commands/cmdlistsetters.go b/cmd/config/internal/commands/cmdlistsetters.go index 3b54ab582..18bc10d65 100644 --- a/cmd/config/internal/commands/cmdlistsetters.go +++ b/cmd/config/internal/commands/cmdlistsetters.go @@ -16,7 +16,6 @@ import ( "sigs.k8s.io/kustomize/cmd/config/internal/generateddocs/commands" "sigs.k8s.io/kustomize/cmd/config/runner" "sigs.k8s.io/kustomize/kyaml/fieldmeta" - "sigs.k8s.io/kustomize/kyaml/setters" "sigs.k8s.io/kustomize/kyaml/setters2" ) @@ -49,45 +48,40 @@ func ListSettersCommand(parent string) *cobra.Command { type ListSettersRunner struct { Command *cobra.Command - Lookup setters.LookupSetters List setters2.List Markdown bool IncludeSubst bool RecurseSubPackages bool + Name string } func (r *ListSettersRunner) preRunE(c *cobra.Command, args []string) error { if len(args) > 1 { - r.Lookup.Name = args[1] - r.List.Name = args[1] + r.Name = args[1] } - initSetterVersion(c, args) return nil } func (r *ListSettersRunner) runE(c *cobra.Command, args []string) error { - if setterVersion == "v2" { - e := runner.ExecuteCmdOnPkgs{ - NeedOpenAPI: true, - Writer: c.OutOrStdout(), - RootPkgPath: args[0], - RecurseSubPackages: r.RecurseSubPackages, - CmdRunner: r, - } - - err := e.Execute() - if err != nil { - return runner.HandleError(c, err) - } - return nil + e := runner.ExecuteCmdOnPkgs{ + NeedOpenAPI: true, + Writer: c.OutOrStdout(), + RootPkgPath: args[0], + RecurseSubPackages: r.RecurseSubPackages, + CmdRunner: r, } - return runner.HandleError(c, lookup(r.Lookup, c, args)) + + err := e.Execute() + if err != nil { + return runner.HandleError(c, err) + } + return nil } func (r *ListSettersRunner) ExecuteCmd(w io.Writer, pkgPath string) error { r.List = setters2.List{ - Name: r.List.Name, + Name: r.Name, OpenAPIFileName: ext.KRMFileName(), } openAPIPath := filepath.Join(pkgPath, ext.KRMFileName()) diff --git a/cmd/config/internal/commands/cmdset.go b/cmd/config/internal/commands/cmdset.go index 37db2c94d..bef94b6c4 100644 --- a/cmd/config/internal/commands/cmdset.go +++ b/cmd/config/internal/commands/cmdset.go @@ -6,17 +6,13 @@ package commands import ( "fmt" "io" - "os" "path/filepath" - "github.com/olekukonko/tablewriter" "github.com/spf13/cobra" "sigs.k8s.io/kustomize/cmd/config/ext" "sigs.k8s.io/kustomize/cmd/config/internal/generateddocs/commands" "sigs.k8s.io/kustomize/cmd/config/runner" "sigs.k8s.io/kustomize/kyaml/errors" - "sigs.k8s.io/kustomize/kyaml/kio" - "sigs.k8s.io/kustomize/kyaml/setters" "sigs.k8s.io/kustomize/kyaml/setters2/settersutil" ) @@ -36,13 +32,13 @@ func NewSetRunner(parent string) *SetRunner { r.Command = c c.Flags().StringArrayVar(&r.Values, "values", []string{}, "optional flag, the values of the setter to be set to") - c.Flags().StringVar(&r.Perform.SetBy, "set-by", "", + c.Flags().StringVar(&r.SetBy, "set-by", "", "annotate the field with who set it") - c.Flags().StringVar(&r.Perform.Description, "description", "", + c.Flags().StringVar(&r.Description, "description", "", "annotate the field with a description of its value") c.Flags().StringVar(&setterVersion, "version", "", "use this version of the setter format") - c.Flags().BoolVarP(&r.Set.RecurseSubPackages, "recurse-subpackages", "R", false, + c.Flags().BoolVarP(&r.RecurseSubPackages, "recurse-subpackages", "R", false, "sets recursively in all the nested subpackages") c.Flags().MarkHidden("version") @@ -57,30 +53,15 @@ func SetCommand(parent string) *cobra.Command { type SetRunner struct { Command *cobra.Command - Lookup setters.LookupSetters - Perform setters.PerformSetters Set settersutil.FieldSetter OpenAPIFile string Values []string -} - -func initSetterVersion(c *cobra.Command, args []string) error { - setterVersion = "v2" - l := setters.LookupSetters{} - - // backwards compatibility for resources with setter v1 - err := kio.Pipeline{ - Inputs: []kio.Reader{&kio.LocalPackageReader{PackagePath: args[0]}}, - Filters: []kio.Filter{&l}, - }.Execute() - if err != nil { - return err - } - if len(l.SetterCounts) > 0 { - setterVersion = "v1" - } - - return nil + SetBy string + Description string + Name string + Value string + ListValues []string + RecurseSubPackages bool } func (r *SetRunner) preRunE(c *cobra.Command, args []string) error { @@ -90,79 +71,51 @@ func (r *SetRunner) preRunE(c *cobra.Command, args []string) error { return errors.Errorf("value should set either from flag or arg") } - if len(args) > 1 { - r.Perform.Name = args[1] - r.Lookup.Name = args[1] - } - + r.Name = args[1] if valueFlagSet { - r.Perform.Value = r.Values[0] - } else if len(args) > 2 { - r.Perform.Value = args[2] + r.Value = r.Values[0] + } else { + r.Value = args[2] } - if setterVersion == "" { - if len(args) < 2 || len(args) < 3 && !valueFlagSet { - setterVersion = "v1" - } else if err := initSetterVersion(c, args); err != nil { - return err - } + // set remaining values as list values + if valueFlagSet && len(r.Values) > 1 { + r.ListValues = r.Values[1:] + } else if !valueFlagSet && len(args) > 3 { + r.ListValues = args[3:] } - if setterVersion == "v2" { - r.Set.Name = args[1] - if valueFlagSet { - r.Set.Value = r.Values[0] - } else { - r.Set.Value = args[2] - } - // set remaining values as list values - if valueFlagSet && len(r.Values) > 1 { - r.Set.ListValues = r.Values[1:] - } else if !valueFlagSet && len(args) > 3 { - r.Set.ListValues = args[3:] - } - - r.Set.Description = r.Perform.Description - r.Set.SetBy = r.Perform.SetBy - r.OpenAPIFile = filepath.Join(args[0], ext.KRMFileName()) - } + r.OpenAPIFile = filepath.Join(args[0], ext.KRMFileName()) return nil } func (r *SetRunner) runE(c *cobra.Command, args []string) error { - if setterVersion == "v2" { - e := runner.ExecuteCmdOnPkgs{ - NeedOpenAPI: true, - Writer: c.OutOrStdout(), - RootPkgPath: args[0], - RecurseSubPackages: r.Set.RecurseSubPackages, - CmdRunner: r, - } - err := e.Execute() - if err != nil { - return runner.HandleError(c, err) - } - return nil + e := runner.ExecuteCmdOnPkgs{ + NeedOpenAPI: true, + Writer: c.OutOrStdout(), + RootPkgPath: args[0], + RecurseSubPackages: r.RecurseSubPackages, + CmdRunner: r, } - if len(args) > 2 || c.Flag("values").Changed { - return runner.HandleError(c, r.perform(c, args)) + err := e.Execute() + if err != nil { + return runner.HandleError(c, err) } - return runner.HandleError(c, lookup(r.Lookup, c, args)) + return nil } func (r *SetRunner) ExecuteCmd(w io.Writer, pkgPath string) error { r.Set = settersutil.FieldSetter{ - Name: r.Set.Name, - Value: r.Set.Value, - ListValues: r.Set.ListValues, - Description: r.Set.Description, - SetBy: r.Set.SetBy, + Name: r.Name, + Value: r.Value, + ListValues: r.ListValues, + Description: r.Description, + SetBy: r.SetBy, Count: 0, OpenAPIPath: filepath.Join(pkgPath, ext.KRMFileName()), OpenAPIFileName: ext.KRMFileName(), ResourcesPath: pkgPath, - RecurseSubPackages: r.Set.RecurseSubPackages, + RecurseSubPackages: r.RecurseSubPackages, IsSet: true, } count, err := r.Set.Set() @@ -179,65 +132,3 @@ func (r *SetRunner) ExecuteCmd(w io.Writer, pkgPath string) error { } return nil } - -func lookup(l setters.LookupSetters, c *cobra.Command, args []string) error { - // lookup the setters - err := kio.Pipeline{ - Inputs: []kio.Reader{&kio.LocalPackageReader{PackagePath: args[0]}}, - Filters: []kio.Filter{&l}, - }.Execute() - if err != nil { - return err - } - - table := tablewriter.NewWriter(c.OutOrStdout()) - table.SetRowLine(false) - table.SetBorder(false) - table.SetHeaderLine(false) - table.SetColumnSeparator(" ") - table.SetCenterSeparator(" ") - table.SetAlignment(tablewriter.ALIGN_LEFT) - table.SetHeader([]string{ - "NAME", "DESCRIPTION", "VALUE", "TYPE", "COUNT", "SETBY", - }) - for i := range l.SetterCounts { - s := l.SetterCounts[i] - v := s.Value - if s.Value == "" { - v = s.Value - } - table.Append([]string{ - s.Name, - "'" + s.Description + "'", - v, - fmt.Sprintf("%v", s.Type), - fmt.Sprintf("%d", s.Count), - s.SetBy, - }) - } - table.Render() - - if len(l.SetterCounts) == 0 { - // exit non-0 if no matching setters are found - os.Exit(1) - } - return nil -} - -// perform the setters -func (r *SetRunner) perform(c *cobra.Command, args []string) error { - rw := &kio.LocalPackageReadWriter{ - PackagePath: args[0], - } - // perform the setters in the package - err := kio.Pipeline{ - Inputs: []kio.Reader{rw}, - Filters: []kio.Filter{&r.Perform}, - Outputs: []kio.Writer{rw}, - }.Execute() - if err != nil { - return err - } - fmt.Fprintf(c.OutOrStdout(), "set %d fields\n", r.Perform.Count) - return nil -} diff --git a/cmd/config/internal/commands/cmdset_test.go b/cmd/config/internal/commands/cmdset_test.go index 393f5e5d5..1de06fcd6 100644 --- a/cmd/config/internal/commands/cmdset_test.go +++ b/cmd/config/internal/commands/cmdset_test.go @@ -942,70 +942,6 @@ spec: `, errMsg: "cyclic substitution detected with name my-nested-subst", }, - - { - name: "set v1 setter asm", - args: []string{"profilesetter", "my-asm"}, - out: "set 1 fields\n", - inputOpenAPI: ` - `, - input: ` -apiVersion: install.istio.io/v1alpha2 -kind: IstioControlPlane -metadata: - clusterName: "project-id/us-east1-d/cluster-name" -spec: - profile: asm # {"type":"string","x-kustomize":{"setter":{"name":"profilesetter","value":"asm"}}} - hub: - - --gcr.io/asm-testing - - --gcr.io/asm-testing2 - `, - expectedOpenAPI: ` - `, - expectedResources: ` -apiVersion: install.istio.io/v1alpha2 -kind: IstioControlPlane -metadata: - clusterName: "project-id/us-east1-d/cluster-name" -spec: - profile: my-asm # {"type":"string","x-kustomize":{"setter":{"name":"profilesetter","value":"my-asm"}}} - hub: - - --gcr.io/asm-testing - - --gcr.io/asm-testing2 - `, - }, - - { - name: "set v1 partial setter", - args: []string{"gcloud.core.project", "my-project"}, - out: "set 1 fields\n", - inputOpenAPI: ` - `, - input: ` -apiVersion: install.istio.io/v1alpha2 -kind: IstioControlPlane -metadata: - clusterName: "project-id/us-east1-d/cluster-name" # {"type":"string","x-kustomize":{"partialSetters":[{"name":"gcloud.core.project","value":"project-id"},{"name":"cluster-name","value":"cluster-name"},{"name":"gcloud.compute.zone","value":"us-east1-d"}]}} -spec: - profile: asm # {"type":"string","x-kustomize":{"setter":{"name":"profilesetter","value":"asm"}}} - hub: - - --gcr.io/asm-testing - - --gcr.io/asm-testing2 - `, - expectedOpenAPI: ` - `, - expectedResources: ` -apiVersion: install.istio.io/v1alpha2 -kind: IstioControlPlane -metadata: - clusterName: "my-project/us-east1-d/cluster-name" # {"type":"string","x-kustomize":{"partialSetters":[{"name":"gcloud.core.project","value":"my-project"},{"name":"cluster-name","value":"cluster-name"},{"name":"gcloud.compute.zone","value":"us-east1-d"}]}} -spec: - profile: asm # {"type":"string","x-kustomize":{"setter":{"name":"profilesetter","value":"asm"}}} - hub: - - --gcr.io/asm-testing - - --gcr.io/asm-testing2 - `, - }, } for i := range tests { test := tests[i] diff --git a/kyaml/openapi/openapi.go b/kyaml/openapi/openapi.go index 5a877a7f9..76c0fd72f 100644 --- a/kyaml/openapi/openapi.go +++ b/kyaml/openapi/openapi.go @@ -359,7 +359,7 @@ func (rs *ResourceSchema) PatchStrategyAndKeyList() (string, []string) { mkList, found := rs.Schema.Extensions[kubernetesMergeKeyMapList] if found { - //mkList is []interface, convert to []string + // mkList is []interface, convert to []string mkListStr := make([]string, len(mkList.([]interface{}))) for i, v := range mkList.([]interface{}) { diff --git a/kyaml/setters/addkio.go b/kyaml/setters/addkio.go deleted file mode 100644 index c77ba2f3c..000000000 --- a/kyaml/setters/addkio.go +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2019 The Kubernetes Authors. -// SPDX-License-Identifier: Apache-2.0 - -package setters - -import ( - "sigs.k8s.io/kustomize/kyaml/kio" - "sigs.k8s.io/kustomize/kyaml/yaml" -) - -var _ kio.Filter = &CreateSetter{} - -// CreateSetter creates a custom setter as an OpenAPI property through a comment -type CreateSetter struct { - // customFieldSetter is the marker to set - SetPartialField customFieldSetter - - // ResourceMeta defines the Resource to set the marker on - ResourceMeta yaml.ResourceMeta -} - -func (s *CreateSetter) Filter(input []*yaml.RNode) ([]*yaml.RNode, error) { - for i := range input { - m, err := input[i].GetMeta() - if err != nil { - return nil, err - } - if s.ResourceMeta.Name != "" && m.Name != s.ResourceMeta.Name { - continue - } - if s.ResourceMeta.Kind != "" && m.Kind != s.ResourceMeta.Kind { - continue - } - if err := input[i].PipeE(&s.SetPartialField); err != nil { - return nil, err - } - } - return input, nil -} diff --git a/kyaml/setters/addyaml.go b/kyaml/setters/addyaml.go deleted file mode 100644 index 18fb7918d..000000000 --- a/kyaml/setters/addyaml.go +++ /dev/null @@ -1,118 +0,0 @@ -// Copyright 2019 The Kubernetes Authors. -// SPDX-License-Identifier: Apache-2.0 - -package setters - -import ( - "strings" - - "sigs.k8s.io/kustomize/kyaml/errors" - "sigs.k8s.io/kustomize/kyaml/fieldmeta" - "sigs.k8s.io/kustomize/kyaml/yaml" -) - -var _ yaml.Filter = &customFieldSetter{} - -// customFieldSetter creates a new custom field setter -type customFieldSetter struct { - // Path is the path of the field to add the setter for - Field string - - // Setter is the setter to add - Setter fieldmeta.PartialFieldSetter - - // Description is the description to add to the OpenAPI - Description string - - // SetBy is the setBy to add to the OpenAPI extension - SetBy string - - Type string - - // Partial will create a partial setter if set to true - Partial bool - - // currentFieldName is the name of the current field being processed - currentFieldName string -} - -// Filter performs the setter for a single object -func (m *customFieldSetter) Filter(object *yaml.RNode) (*yaml.RNode, error) { - switch object.YNode().Kind { - case yaml.DocumentNode: - return m.Filter(yaml.NewRNode(object.YNode().Content[0])) - case yaml.MappingNode: - return object, object.VisitFields(func(node *yaml.MapNode) error { - // record the current field name, resetting it back to its original value - // when done - n := m.currentFieldName - defer func() { m.currentFieldName = n }() - m.currentFieldName = node.Key.YNode().Value - return node.Value.PipeE(m) - }) - case yaml.SequenceNode: - return object, object.VisitElements(func(node *yaml.RNode) error { - return node.PipeE(m) - }) - case yaml.ScalarNode: - // if filed is empty, create the setter for all fields with given value - // else only create the setter for given field and value combination, with given name - if m.Field != "" && m.currentFieldName != m.Field { - return object, nil - } - if err := m.create(object); err != nil { - return nil, err - } - return object, nil - default: - return object, nil - } -} - -func (m *customFieldSetter) create(field *yaml.RNode) error { - fm := fieldmeta.FieldMeta{} - if err := fm.Read(field); err != nil { - return errors.Wrap(err) - } - - if m.Description != "" { - fm.Schema.Description = m.Description - } - - fm.Extensions.SetBy = m.SetBy - fm.Schema.Type = []string{m.Type} - - if !m.Partial { - // doesn't match the supplied value - if field.YNode().Value != m.Setter.Value { - return nil - } - // full setter - fm.Extensions.FieldSetter = &m.Setter - fm.Extensions.PartialFieldSetters = nil - } else { - // doesn't match the supplied value - if !strings.Contains(field.YNode().Value, m.Setter.Value) { - return nil - } - found := false - for i := range fm.Extensions.PartialFieldSetters { - s := fm.Extensions.PartialFieldSetters[i] - if s.Name == m.Setter.Name { - // update the setter if we find it - found = true - fm.Extensions.PartialFieldSetters[i] = m.Setter - break - } - } - if !found { - // add the setter if it wasn't found - fm.Extensions.PartialFieldSetters = append(fm.Extensions.PartialFieldSetters, m.Setter) - } - } - - if err := fm.Write(field); err != nil { - return errors.Wrap(err) - } - return nil -} diff --git a/kyaml/setters/dokio.go b/kyaml/setters/dokio.go deleted file mode 100644 index 47f808ad4..000000000 --- a/kyaml/setters/dokio.go +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2019 The Kubernetes Authors. -// SPDX-License-Identifier: Apache-2.0 - -package setters - -import ( - "sigs.k8s.io/kustomize/kyaml/kio" - "sigs.k8s.io/kustomize/kyaml/yaml" -) - -var _ kio.Filter = &PerformSetters{} - -// PerformSetters sets field values -type PerformSetters struct { - // Name is the name of the setter to perform - Name string - - // Value is the value to set - Value string - - // Description, if set will annotate the field with a description. - Description string - - // SetBy, if set will annotate the field with who set it. - SetBy string - - // Count is set by Filter and is the number of fields modified. - Count int -} - -func (s *PerformSetters) Filter(input []*yaml.RNode) ([]*yaml.RNode, error) { - for i := range input { - p := &fieldSetter{ - Name: s.Name, - Value: s.Value, - Description: s.Description, - SetBy: s.SetBy, - } - if err := input[i].PipeE(p); err != nil { - return nil, err - } - s.Count += p.Count - } - return input, nil -} diff --git a/kyaml/setters/doyaml.go b/kyaml/setters/doyaml.go deleted file mode 100644 index 3559ee8cb..000000000 --- a/kyaml/setters/doyaml.go +++ /dev/null @@ -1,130 +0,0 @@ -// Copyright 2019 The Kubernetes Authors. -// SPDX-License-Identifier: Apache-2.0 - -// Package sub substitutes strings in fields -package setters - -import ( - "strings" - - "sigs.k8s.io/kustomize/kyaml/fieldmeta" - "sigs.k8s.io/kustomize/kyaml/yaml" -) - -var _ yaml.Filter = &fieldSetter{} - -// fieldSetter sets part or all of a field value. -type fieldSetter struct { - // Name is the name of the setter to perform. - Name string - - // Value is the value to set. - Value string - - // Description, if specified will set 'description' for the field. Optional. - Description string - - // SetBy, if specified will set 'setBy' for the field. Optional. - SetBy string - - // Count is incremented by Filter for each field that is set. - Count int -} - -// Filter implements yaml.Filter -func (fs *fieldSetter) Filter(object *yaml.RNode) (*yaml.RNode, error) { - switch object.YNode().Kind { - case yaml.DocumentNode: - // Document is the root of the object and always contains 1 node - return fs.Filter(yaml.NewRNode(object.YNode().Content[0])) - case yaml.MappingNode: - return object, object.VisitFields(func(node *yaml.MapNode) error { - // Traverse each field value - return node.Value.PipeE(fs) - }) - case yaml.SequenceNode: - return object, object.VisitElements(func(node *yaml.RNode) error { - // Traverse each list element - return node.PipeE(fs) - }) - case yaml.ScalarNode: - // Check if there is a setter matching the name - s, f, partial, err := fs.findSetter(object) - if err != nil { - return nil, err - } - if s == nil { - // no matching setter - return object, nil - } - // set the field value - return object, fs.set(object, s, f, partial) - default: - return object, nil - } -} - -// findPartialSetter finds the setter matching the name if one exists -func (fs *fieldSetter) findSetter(field *yaml.RNode) ( - *fieldmeta.PartialFieldSetter, *fieldmeta.FieldMeta, bool, error) { - // check if there are any substitutions for this field - var fm = &fieldmeta.FieldMeta{} - if err := fm.Read(field); err != nil { - return nil, nil, false, err - } - if fs.SetBy != "" { - fm.Extensions.SetBy = fs.SetBy - } - if fs.Description != "" { - fm.Schema.Description = fs.Description - } - - if fm.Extensions.FieldSetter != nil && fm.Extensions.FieldSetter.Name == fs.Name { - return fm.Extensions.FieldSetter, fm, false, nil - } - - // check if there is a matching substitution - for i := range fm.Extensions.PartialFieldSetters { - if fm.Extensions.PartialFieldSetters[i].Name == fs.Name { - return &fm.Extensions.PartialFieldSetters[i], fm, true, nil - } - } - return nil, nil, false, nil -} - -// set performs the substitution for the given field, substitution, and metadata -func (fs *fieldSetter) set( - field *yaml.RNode, s *fieldmeta.PartialFieldSetter, - f *fieldmeta.FieldMeta, partial bool) error { - if s.Value == fs.Value || !strings.Contains(field.YNode().Value, s.Value) { - // no substitutions necessary -- already substituted or doesn't have the set value - // which acts as a marker - return nil - } - - // record that the config has been modified - fs.Count++ - - if !partial { - // full setter - field.YNode().Value = fs.Value - } else { - // replace the current value with the new value - field.YNode().Value = strings.ReplaceAll(field.YNode().Value, s.Value, fs.Value) - } - - // be sure to set the tag to the matching type so the yaml doesn't incorrectly quote - // integers or booleans as strings - fType := fieldmeta.FieldValueType(f.Schema.Type[0]) - if err := fType.Validate(field.YNode().Value); err != nil { - return err - } - field.YNode().Tag = fType.Tag() - - // update the comment on the field - s.Value = fs.Value - if err := f.Write(field); err != nil { - return err - } - return nil -} diff --git a/kyaml/setters/lookupkio.go b/kyaml/setters/lookupkio.go deleted file mode 100644 index 541c53686..000000000 --- a/kyaml/setters/lookupkio.go +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2019 The Kubernetes Authors. -// SPDX-License-Identifier: Apache-2.0 - -package setters - -import ( - "sort" - - "sigs.k8s.io/kustomize/kyaml/kio" - "sigs.k8s.io/kustomize/kyaml/yaml" -) - -var _ kio.Filter = &LookupSetters{} - -// LookupSetters identifies setters for a collection of Resources -type LookupSetters struct { - // Name is the name of the setter to match. Optional. - Name string - - // SetterCounts is populated by Filter and contains the count of fields matching each setter. - SetterCounts []setterCount -} - -// setterCount records the identified setters and number of fields matching those setters -type setterCount struct { - // Count is the number of substitutions possible to perform - Count int - - // setter is the substitution found - setter -} - -// Filter implements kio.Filter -func (l *LookupSetters) Filter(input []*yaml.RNode) ([]*yaml.RNode, error) { - setters := map[string]*setterCount{} - - for i := range input { - // lookup substitutions for this object - ls := &lookupSetters{Name: l.Name} - if err := input[i].PipeE(ls); err != nil { - return nil, err - } - - // aggregate counts for each setter by name. takes the description and value from - // the first setter for each name encountered. - for j := range ls.Setters { - setter := ls.Setters[j] - curr, found := setters[setter.Name] - if !found { - curr = &setterCount{setter: setter} - setters[setter.Name] = curr - } - curr.Count++ - } - } - - // pull out and sort the results by setter name - for _, v := range setters { - l.SetterCounts = append(l.SetterCounts, *v) - } - sort.Slice(l.SetterCounts, func(i, j int) bool { - return l.SetterCounts[i].Name < l.SetterCounts[j].Name - }) - return input, nil -} diff --git a/kyaml/setters/lookupyaml.go b/kyaml/setters/lookupyaml.go deleted file mode 100644 index ecc5923ce..000000000 --- a/kyaml/setters/lookupyaml.go +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright 2019 The Kubernetes Authors. -// SPDX-License-Identifier: Apache-2.0 - -package setters - -import ( - "sigs.k8s.io/kustomize/kyaml/fieldmeta" - "sigs.k8s.io/kustomize/kyaml/yaml" -) - -var _ yaml.Filter = &lookupSetters{} - -// lookupSetters looks up setters for a Resource -type lookupSetters struct { - // Name of the setter to lookup. Optional - Name string - - // Setters is a list of setters that were found - Setters []setter -} - -type setter struct { - fieldmeta.PartialFieldSetter - Description string - Type string - SetBy string -} - -func (ls *lookupSetters) Filter(object *yaml.RNode) (*yaml.RNode, error) { - switch object.YNode().Kind { - case yaml.DocumentNode: - // skip the document node - return ls.Filter(yaml.NewRNode(object.YNode().Content[0])) - case yaml.MappingNode: - return object, object.VisitFields(func(node *yaml.MapNode) error { - return node.Value.PipeE(ls) - }) - case yaml.SequenceNode: - return object, object.VisitElements(func(node *yaml.RNode) error { - return node.PipeE(ls) - }) - case yaml.ScalarNode: - return object, ls.lookup(object) - default: - return object, nil - } -} - -// lookup finds any setters for a field -func (ls *lookupSetters) lookup(field *yaml.RNode) error { - // check if there is a substitution for this field - var fm = &fieldmeta.FieldMeta{} - if err := fm.Read(field); err != nil { - return err - } - - if fm.Extensions.FieldSetter != nil { - if ls.Name != "" && ls.Name != fm.Extensions.FieldSetter.Name { - // skip this setter, it doesn't match the specified setter - return nil - } - // full setter - ls.Setters = append(ls.Setters, setter{ - PartialFieldSetter: *fm.Extensions.FieldSetter, - Description: fm.Schema.Description, - Type: fm.Schema.Type[0], - SetBy: fm.Extensions.SetBy, - }) - return nil - } - - // partial setters - for i := range fm.Extensions.PartialFieldSetters { - if ls.Name != "" && ls.Name != fm.Extensions.PartialFieldSetters[i].Name { - // skip this setter - continue - } - ls.Setters = append(ls.Setters, setter{ - PartialFieldSetter: fm.Extensions.PartialFieldSetters[i], - Description: fm.Schema.Description, - Type: fm.Schema.Type[0], - SetBy: fm.Extensions.SetBy, - }) - } - return nil -}