in custom-targets/util/applysetters/apply_setters.go [213:273]
func (as *ApplySetters) visitScalar(object *yaml.RNode, path string) error {
if object.IsNil() {
return nil
}
if object.YNode().Kind != yaml.ScalarNode {
// return if it is not a scalar node
return nil
}
// perform a direct set of the field if it matches
setterPattern := extractSetterPattern(object.YNode().LineComment)
if setterPattern == "" {
// the node is not tagged with setter pattern
return nil
}
curPattern := setterPattern
if !shouldSet(setterPattern, as.Setters) {
// this means there is no intent from user to modify this setter tagged resources
return nil
}
// replace the setter names in comment pattern with provided values
for _, setter := range as.Setters {
setterPattern = strings.ReplaceAll(
setterPattern,
fmt.Sprintf("${%s}", setter.Name),
fmt.Sprintf("%v", setter.Value),
)
}
// replace the remaining setter names in comment pattern with values derived from current
// field value, these values are not provided by user
currentSetterValues := currentSetterValues(curPattern, object.YNode().Value)
for setterName, setterValue := range currentSetterValues {
setterPattern = strings.ReplaceAll(
setterPattern,
fmt.Sprintf("${%s}", setterName),
fmt.Sprintf("%v", setterValue),
)
}
// check if there are unresolved setters and throw error
urs := unresolvedSetters(setterPattern)
if len(urs) > 0 {
return errors.Errorf("values for setters %v must be provided", urs)
}
object.YNode().Value = setterPattern
if setterPattern == "" {
object.YNode().Style = yaml.DoubleQuotedStyle
}
object.YNode().Tag = yaml.NodeTagEmpty
as.Results = append(as.Results, &Result{
FilePath: as.filePath,
FieldPath: strings.TrimPrefix(path, "."),
Value: object.YNode().Value,
})
return nil
}