1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- package transformers
- import (
- "fmt"
- "sigs.k8s.io/kustomize/pkg/expansion"
- "sigs.k8s.io/kustomize/pkg/resmap"
- "sigs.k8s.io/kustomize/pkg/transformers/config"
- )
- type RefVarTransformer struct {
- varMap map[string]string
- replacementCounts map[string]int
- fieldSpecs []config.FieldSpec
- mappingFunc func(string) string
- }
- // NewRefVarTransformer returns a new RefVarTransformer
- // that replaces $(VAR) style variables with values.
- // The fieldSpecs are the places to look for occurrences of $(VAR).
- func NewRefVarTransformer(
- varMap map[string]string, fs []config.FieldSpec) *RefVarTransformer {
- return &RefVarTransformer{
- varMap: varMap,
- fieldSpecs: fs,
- }
- }
- // replaceVars accepts as 'in' a string, or string array, which can have
- // embedded instances of $VAR style variables, e.g. a container command string.
- // The function returns the string with the variables expanded to their final
- // values.
- func (rv *RefVarTransformer) replaceVars(in interface{}) (interface{}, error) {
- switch vt := in.(type) {
- case []interface{}:
- var xs []string
- for _, a := range in.([]interface{}) {
- xs = append(xs, expansion.Expand(a.(string), rv.mappingFunc))
- }
- return xs, nil
- case map[string]interface{}:
- inMap := in.(map[string]interface{})
- xs := make(map[string]interface{}, len(inMap))
- for k, v := range inMap {
- s, ok := v.(string)
- if !ok {
- return nil, fmt.Errorf("%#v is expected to be %T", v, s)
- }
- xs[k] = expansion.Expand(s, rv.mappingFunc)
- }
- return xs, nil
- case interface{}:
- s, ok := in.(string)
- if !ok {
- return nil, fmt.Errorf("%#v is expected to be %T", in, s)
- }
- return expansion.Expand(s, rv.mappingFunc), nil
- case nil:
- return nil, nil
- default:
- return "", fmt.Errorf("invalid type encountered %T", vt)
- }
- }
- // UnusedVars returns slice of Var names that were unused
- // after a Transform run.
- func (rv *RefVarTransformer) UnusedVars() []string {
- var unused []string
- for k := range rv.varMap {
- _, ok := rv.replacementCounts[k]
- if !ok {
- unused = append(unused, k)
- }
- }
- return unused
- }
- // Transform replaces $(VAR) style variables with values.
- func (rv *RefVarTransformer) Transform(m resmap.ResMap) error {
- rv.replacementCounts = make(map[string]int)
- rv.mappingFunc = expansion.MappingFuncFor(
- rv.replacementCounts, rv.varMap)
- for id, res := range m {
- for _, fieldSpec := range rv.fieldSpecs {
- if id.Gvk().IsSelected(&fieldSpec.Gvk) {
- if err := mutateField(
- res.Map(), fieldSpec.PathSlice(),
- false, rv.replaceVars); err != nil {
- return err
- }
- }
- }
- }
- return nil
- }
|