in templating/values.go [65:99]
func merge(c *Config, merged map[string]interface{}) (map[string]interface{}, error) {
if !c.IsValidConfig() {
return merged, nil
}
vals, err := Deserialize([]byte(c.GetRawValue()))
if err != nil {
return merged, fmt.Errorf("failed to deserialize values. Try rendering your template locally using the instructions found at https://github.com/Azure/acr-builder. Err: %v", err)
}
for k, v := range vals {
if lookup, ok := merged[k]; ok {
// If the lookup is nil, remove the key.
// This allows us to remove keys during overrides if they no longer exist.
// I.e., someone broke compatibility in a future template.
if lookup == nil {
delete(merged, k)
} else if sink, ok := lookup.(map[string]interface{}); ok {
source, ok := v.(map[string]interface{})
if !ok {
log.Printf("Skip merging: %s. Not a map\n", k)
continue
}
// The to-be-merged value has precedence over the start value.
mergeMaps(sink, source)
}
} else {
// If the key doesn't exist, copy it.
merged[k] = v
}
}
return merged, nil
}