mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-06-12 01:14:22 +00:00
Refactor set
- Implement inline setters as OpenAPI extensions - Naming cleanup substitute -> set - Documentation cleanup - Simplify implementation
This commit is contained in:
70
kyaml/setters/lookupyaml.go
Normal file
70
kyaml/setters/lookupyaml.go
Normal file
@@ -0,0 +1,70 @@
|
||||
// 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
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user