mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-06-12 09:24:23 +00:00
move setters to be available as libraries
This commit is contained in:
69
kyaml/set/lookupkio.go
Normal file
69
kyaml/set/lookupkio.go
Normal file
@@ -0,0 +1,69 @@
|
||||
// Copyright 2019 The Kubernetes Authors.
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package set
|
||||
|
||||
import (
|
||||
"sort"
|
||||
|
||||
"sigs.k8s.io/kustomize/kyaml/kio"
|
||||
"sigs.k8s.io/kustomize/kyaml/yaml"
|
||||
)
|
||||
|
||||
var _ kio.Filter = &LookupSubstitutions{}
|
||||
|
||||
// Sub performs substitutions
|
||||
type LookupSubstitutions struct {
|
||||
// Name is the name of the substitution to match. If unspecified, all substitutions will
|
||||
// be matched.
|
||||
Name string
|
||||
|
||||
// SubstitutionCounts are the aggregate substitutions matched.
|
||||
SubstitutionCounts []FieldSubstitutionCount
|
||||
}
|
||||
|
||||
type FieldSubstitutionCount struct {
|
||||
// Count is the number of substitutions possible to perform
|
||||
Count int
|
||||
|
||||
// CountComplete is the number of substitutions that have already been performed
|
||||
// independent of this object.
|
||||
CountComplete int
|
||||
|
||||
// FieldSubstitution is the substitution found
|
||||
FieldSubstitution
|
||||
}
|
||||
|
||||
func (l *LookupSubstitutions) Filter(input []*yaml.RNode) ([]*yaml.RNode, error) {
|
||||
subs := map[string]*FieldSubstitutionCount{}
|
||||
for i := range input {
|
||||
// lookup substitutions for this object
|
||||
ls := &lookupSubstitutions{Name: l.Name}
|
||||
if err := input[i].PipeE(ls); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// aggregate counts for each substitution
|
||||
for j := range ls.Substitutions {
|
||||
sub := ls.Substitutions[j]
|
||||
curr, found := subs[sub.Name]
|
||||
if !found {
|
||||
curr = &FieldSubstitutionCount{FieldSubstitution: sub}
|
||||
subs[sub.Name] = curr
|
||||
}
|
||||
curr.Count++
|
||||
if sub.CurrentValue != "" {
|
||||
curr.CountComplete++
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// pull out and sort the results
|
||||
for _, v := range subs {
|
||||
l.SubstitutionCounts = append(l.SubstitutionCounts, *v)
|
||||
}
|
||||
sort.Slice(l.SubstitutionCounts, func(i, j int) bool {
|
||||
return l.SubstitutionCounts[i].Name < l.SubstitutionCounts[j].Name
|
||||
})
|
||||
return input, nil
|
||||
}
|
||||
Reference in New Issue
Block a user