diff --git a/kyaml/setters2/add.go b/kyaml/setters2/add.go index 4488e69ca..8b2946eed 100644 --- a/kyaml/setters2/add.go +++ b/kyaml/setters2/add.go @@ -4,7 +4,6 @@ package setters2 import ( - "encoding/json" "strings" "github.com/go-openapi/spec" @@ -136,19 +135,19 @@ func (sd SetterDefinition) AddToFile(path string) error { func (sd SetterDefinition) Filter(object *yaml.RNode) (*yaml.RNode, error) { key := SetterDefinitionPrefix + sd.Name - def, err := object.Pipe(yaml.LookupCreate( - yaml.MappingNode, openapi.SupplementaryOpenAPIFieldName, "definitions", key)) + definitions, err := object.Pipe(yaml.LookupCreate( + yaml.MappingNode, openapi.SupplementaryOpenAPIFieldName, "definitions")) if err != nil { return nil, err } - definitions, err := object.Pipe(yaml.Lookup(openapi.SupplementaryOpenAPIFieldName, "definitions")) + setterDef, err := definitions.Pipe(yaml.LookupCreate(yaml.MappingNode, key)) if err != nil { return nil, err } if sd.Schema != "" { - schNode, err := ConvertJSONToYamlNode(sd.Schema) + schNode, err := yaml.ConvertJSONToYamlNode(sd.Schema) if err != nil { return nil, err } @@ -162,7 +161,7 @@ func (sd SetterDefinition) Filter(object *yaml.RNode) (*yaml.RNode, error) { } if sd.Description != "" { - err = def.PipeE(yaml.FieldSetter{Name: "description", StringValue: sd.Description}) + err = setterDef.PipeE(yaml.FieldSetter{Name: "description", StringValue: sd.Description}) if err != nil { return nil, err } @@ -171,7 +170,7 @@ func (sd SetterDefinition) Filter(object *yaml.RNode) (*yaml.RNode, error) { } if sd.Type != "" { - err = def.PipeE(yaml.FieldSetter{Name: "type", StringValue: sd.Type}) + err = setterDef.PipeE(yaml.FieldSetter{Name: "type", StringValue: sd.Type}) if err != nil { return nil, err } @@ -179,7 +178,7 @@ func (sd SetterDefinition) Filter(object *yaml.RNode) (*yaml.RNode, error) { sd.Type = "" } - ext, err := def.Pipe(yaml.LookupCreate(yaml.MappingNode, K8sCliExtensionKey)) + ext, err := setterDef.Pipe(yaml.LookupCreate(yaml.MappingNode, K8sCliExtensionKey)) if err != nil { return nil, err } @@ -200,24 +199,6 @@ func (sd SetterDefinition) Filter(object *yaml.RNode) (*yaml.RNode, error) { return object, nil } -// ConvertJSONToYamlNode parses input json string and returns equivalent yaml node -func ConvertJSONToYamlNode(jsonStr string) (*yaml.RNode, error) { - var body map[string]interface{} - err := json.Unmarshal([]byte(jsonStr), &body) - if err != nil { - return nil, err - } - yml, err := yaml.Marshal(body) - if err != nil { - return nil, err - } - ymlStr, err := yaml.Parse(string(yml)) - if err != nil { - return nil, err - } - return ymlStr, nil -} - // SetterDefinition may be used to update a files OpenAPI definitions with a new substitution. type SubstitutionDefinition struct { // Name is the name of the substitution to create or update diff --git a/kyaml/yaml/types.go b/kyaml/yaml/types.go index 3b3615265..d74cb8471 100644 --- a/kyaml/yaml/types.go +++ b/kyaml/yaml/types.go @@ -722,6 +722,24 @@ func (rn *RNode) UnmarshalJSON(b []byte) error { return nil } +// ConvertJSONToYamlNode parses input json string and returns equivalent yaml node +func ConvertJSONToYamlNode(jsonStr string) (*RNode, error) { + var body map[string]interface{} + err := json.Unmarshal([]byte(jsonStr), &body) + if err != nil { + return nil, err + } + yml, err := yaml.Marshal(body) + if err != nil { + return nil, err + } + node, err := Parse(string(yml)) + if err != nil { + return nil, err + } + return node, nil +} + // checkKey returns true if all elems have the key func checkKey(key string, elems []*Node) bool { count := 0 diff --git a/kyaml/yaml/types_test.go b/kyaml/yaml/types_test.go index a68af4ae5..b963d5b28 100644 --- a/kyaml/yaml/types_test.go +++ b/kyaml/yaml/types_test.go @@ -146,3 +146,23 @@ hello: world }) } } + +func TestConvertJSONToYamlNode(t *testing.T) { + inputJSON := `{"type": "string", "maxLength": 15, "enum": ["allowedValue1", "allowedValue2"]}` + expected := `enum: +- allowedValue1 +- allowedValue2 +maxLength: 15 +type: string +` + + node, err := ConvertJSONToYamlNode(inputJSON) + if !assert.NoError(t, err) { + t.FailNow() + } + actual, err := node.String() + if !assert.NoError(t, err) { + t.FailNow() + } + assert.Equal(t, expected, actual) +}