mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-06-11 17:12:51 +00:00
87 lines
2.2 KiB
Go
87 lines
2.2 KiB
Go
// Copyright 2019 The Kubernetes Authors.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package fixsetters
|
|
|
|
import (
|
|
"sort"
|
|
|
|
"sigs.k8s.io/kustomize/kyaml/kio"
|
|
"sigs.k8s.io/kustomize/kyaml/yaml"
|
|
)
|
|
|
|
var _ kio.Filter = &UpgradeV1Setters{}
|
|
|
|
// UpgradeV1Setters identifies setters for a collection of Resources to upgrade
|
|
type UpgradeV1Setters 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
|
|
|
|
// Substitutions are groups of partial setters
|
|
Substitutions []substitution
|
|
}
|
|
|
|
// 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 *UpgradeV1Setters) Filter(input []*yaml.RNode) ([]*yaml.RNode, error) {
|
|
setters := map[string]*setterCount{}
|
|
substitutions := map[string]*substitution{}
|
|
|
|
for i := range input {
|
|
// lookup substitutions for this object
|
|
ls := &upgradeV1Setters{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++
|
|
}
|
|
|
|
for j := range ls.Substitutions {
|
|
subst := ls.Substitutions[j]
|
|
_, found := substitutions[subst.Name]
|
|
if !found {
|
|
substitutions[subst.Name] = &subst
|
|
}
|
|
}
|
|
}
|
|
|
|
// pull out and sort the results by setter name
|
|
for _, v := range setters {
|
|
l.SetterCounts = append(l.SetterCounts, *v)
|
|
}
|
|
|
|
for _, subst := range substitutions {
|
|
l.Substitutions = append(l.Substitutions, *subst)
|
|
}
|
|
|
|
sort.Slice(l.Substitutions, func(i, j int) bool {
|
|
return l.Substitutions[i].Name < l.Substitutions[j].Name
|
|
})
|
|
|
|
sort.Slice(l.SetterCounts, func(i, j int) bool {
|
|
return l.SetterCounts[i].Name < l.SetterCounts[j].Name
|
|
})
|
|
return input, nil
|
|
}
|