Skip to content

Commit

Permalink
Merge pull request #4424 from koba1t/feature/allow_setting_every_arra…
Browse files Browse the repository at this point in the history
…y_element_in_replacements

Allow setting every array element in replacements
  • Loading branch information
k8s-ci-robot committed Feb 10, 2022
2 parents a7f4db7 + 5ed96a3 commit ff40460
Show file tree
Hide file tree
Showing 5 changed files with 342 additions and 32 deletions.
27 changes: 25 additions & 2 deletions api/filters/replacement/replacement.go
Expand Up @@ -119,20 +119,41 @@ func applyToNode(node *yaml.RNode, value *yaml.RNode, target *types.TargetSelect
if target.Options != nil && target.Options.Create {
t, err = node.Pipe(yaml.LookupCreate(value.YNode().Kind, fieldPath...))
} else {
t, err = node.Pipe(yaml.Lookup(fieldPath...))
t, err = node.Pipe(&yaml.PathMatcher{Path: fieldPath})
}
if err != nil {
return err
}
if t != nil {
if err = setTargetValue(target.Options, t, value); err != nil {
if err = applyToOneNode(target.Options, t, value); err != nil {
return err
}
}
}
return nil
}

func applyToOneNode(options *types.FieldOptions, t *yaml.RNode, value *yaml.RNode) error {
if len(t.YNode().Content) == 0 {
if err := setTargetValue(options, t, value); err != nil {
return err
}
return nil
}

for _, scalarNode := range t.YNode().Content {
if options != nil && options.Create {
return fmt.Errorf("cannot use create option in a multi-value target")
}
rn := yaml.NewRNode(scalarNode)
if err := setTargetValue(options, rn, value); err != nil {
return err
}
}

return nil
}

func setTargetValue(options *types.FieldOptions, t *yaml.RNode, value *yaml.RNode) error {
value = value.Copy()
if options != nil && options.Delimiter != "" {
Expand All @@ -152,7 +173,9 @@ func setTargetValue(options *types.FieldOptions, t *yaml.RNode, value *yaml.RNod
}
value.YNode().Value = strings.Join(tv, options.Delimiter)
}

t.SetYNode(value.YNode())

return nil
}

Expand Down

0 comments on commit ff40460

Please sign in to comment.