Merge pull request #2661 from trodge/field-not-found-error

Error message for creating setter that matches no fields
This commit is contained in:
Jeff Regan
2020-06-30 15:08:28 -07:00
committed by GitHub
4 changed files with 30 additions and 16 deletions

View File

@@ -55,6 +55,7 @@ openAPI:
name: replicas name: replicas
value: "3" value: "3"
setBy: me setBy: me
count: 1
`, `,
expectedResources: ` expectedResources: `
apiVersion: apps/v1 apiVersion: apps/v1
@@ -117,6 +118,7 @@ openAPI:
name: replicas name: replicas
value: "3" value: "3"
setBy: me setBy: me
count: 1
`, `,
expectedResources: ` expectedResources: `
apiVersion: apps/v1 apiVersion: apps/v1
@@ -188,6 +190,7 @@ openAPI:
- b - b
- c - c
setBy: me setBy: me
count: 2
`, `,
expectedResources: ` expectedResources: `
apiVersion: example.com/v1beta1 apiVersion: example.com/v1beta1
@@ -287,6 +290,7 @@ openAPI:
- b - b
- c - c
setBy: me setBy: me
count: 1
`, `,
expectedResources: ` expectedResources: `
apiVersion: example.com/v1beta1 apiVersion: example.com/v1beta1
@@ -326,6 +330,7 @@ openAPI:
name: replicas name: replicas
value: "3" value: "3"
setBy: me setBy: me
count: 1
`, `,
expectedResources: ` expectedResources: `
apiVersion: apps/v1 apiVersion: apps/v1

View File

@@ -49,6 +49,7 @@ openAPI:
setter: setter:
name: replicas name: replicas
value: "3" value: "3"
count: 1
`, `,
}, },
}, },

View File

@@ -37,6 +37,9 @@ type Add struct {
// Type is the type of the setter value // Type is the type of the setter value
Type string Type string
// Count is the number of fields the setter applies to
Count int
} }
// Filter implements yaml.Filter // Filter implements yaml.Filter
@@ -85,6 +88,7 @@ func (a *Add) visitMapping(object *yaml.RNode, p string, _ *openapi.ResourceSche
"encountered different array values for specified field path: %s, %s", values, a.ListValues) "encountered different array values for specified field path: %s, %s", values, a.ListValues)
} }
a.ListValues = values a.ListValues = values
a.Count++
return a.addRef(node.Key) return a.addRef(node.Key)
} }
return nil return nil
@@ -104,6 +108,7 @@ func (a *Add) visitScalar(object *yaml.RNode, p string, _ *openapi.ResourceSchem
if a.FieldValue != "" && a.FieldValue != object.YNode().Value { if a.FieldValue != "" && a.FieldValue != object.YNode().Value {
return nil return nil
} }
a.Count++
return a.addRef(object) return a.addRef(object)
} }

View File

@@ -6,6 +6,7 @@ package settersutil
import ( import (
"io/ioutil" "io/ioutil"
"sigs.k8s.io/kustomize/kyaml/errors"
"sigs.k8s.io/kustomize/kyaml/fieldmeta" "sigs.k8s.io/kustomize/kyaml/fieldmeta"
"sigs.k8s.io/kustomize/kyaml/kio" "sigs.k8s.io/kustomize/kyaml/kio"
"sigs.k8s.io/kustomize/kyaml/openapi" "sigs.k8s.io/kustomize/kyaml/openapi"
@@ -18,10 +19,10 @@ type SetterCreator struct {
// Name is the name of the setter to create or update. // Name is the name of the setter to create or update.
Name string Name string
Description string
SetBy string SetBy string
Description string
Type string Type string
SchemaPath string SchemaPath string
@@ -49,19 +50,6 @@ func (c SetterCreator) Create(openAPIPath, resourcesPath string) error {
if err != nil { if err != nil {
return err return err
} }
// Update the OpenAPI definitions to hace the setter
sd := setters2.SetterDefinition{
Name: c.Name, Value: c.FieldValue, Description: c.Description, SetBy: c.SetBy,
Type: c.Type, Schema: schema, Required: c.Required,
}
if err := sd.AddToFile(openAPIPath); err != nil {
return err
}
// Load the updated definitions
if err := openapi.AddSchemaFromFile(openAPIPath); err != nil {
return err
}
// Update the resources with the setter reference // Update the resources with the setter reference
inout := &kio.LocalPackageReadWriter{PackagePath: resourcesPath} inout := &kio.LocalPackageReadWriter{PackagePath: resourcesPath}
@@ -76,11 +64,26 @@ func (c SetterCreator) Create(openAPIPath, resourcesPath string) error {
Filters: []kio.Filter{kio.FilterAll(a)}, Filters: []kio.Filter{kio.FilterAll(a)},
Outputs: []kio.Writer{inout}, Outputs: []kio.Writer{inout},
}.Execute() }.Execute()
if a.Count == 0 {
return errors.Errorf("created setter doesn't match any fields")
}
if err != nil { if err != nil {
return err return err
} }
// Update the OpenAPI definitions to hace the setter
sd := setters2.SetterDefinition{
Name: c.Name, Value: c.FieldValue, SetBy: c.SetBy, Description: c.Description,
Count: a.Count, Type: c.Type, Schema: schema, Required: c.Required,
}
if err := sd.AddToFile(openAPIPath); err != nil {
return err
}
// Load the updated definitions
if err := openapi.AddSchemaFromFile(openAPIPath); err != nil {
return err
}
// if the setter is of array type write the derived list values back to // if the setter is of array type write the derived list values back to
// openAPI definitions // openAPI definitions
if len(a.ListValues) > 0 { if len(a.ListValues) > 0 {