2024-02-16 20:54:38 +00:00
|
|
|
package tfdyn
|
|
|
|
|
|
|
|
import (
|
|
|
|
"github.com/databricks/cli/libs/dyn"
|
|
|
|
"github.com/databricks/cli/libs/dyn/merge"
|
|
|
|
)
|
|
|
|
|
|
|
|
// renameKeys renames keys in the given map value.
|
|
|
|
//
|
|
|
|
// Terraform resources sometimes use singular names for repeating blocks where the API
|
|
|
|
// definition uses the plural name. This function can convert between the two.
|
|
|
|
func renameKeys(v dyn.Value, rename map[string]string) (dyn.Value, error) {
|
|
|
|
var err error
|
|
|
|
var acc = dyn.V(map[string]dyn.Value{})
|
|
|
|
|
|
|
|
nv, err := dyn.Walk(v, func(p dyn.Path, v dyn.Value) (dyn.Value, error) {
|
|
|
|
if len(p) == 0 {
|
|
|
|
return v, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// Check if this key should be renamed.
|
|
|
|
for oldKey, newKey := range rename {
|
|
|
|
if p[0].Key() != oldKey {
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
|
|
|
|
// Add the new key to the accumulator.
|
|
|
|
p[0] = dyn.Key(newKey)
|
|
|
|
acc, err = dyn.SetByPath(acc, p, v)
|
|
|
|
if err != nil {
|
2024-06-21 14:22:42 +00:00
|
|
|
return dyn.InvalidValue, err
|
2024-02-16 20:54:38 +00:00
|
|
|
}
|
|
|
|
return dyn.InvalidValue, dyn.ErrDrop
|
|
|
|
}
|
|
|
|
|
|
|
|
// Pass through all other values.
|
|
|
|
return v, dyn.ErrSkip
|
|
|
|
})
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
return dyn.InvalidValue, err
|
|
|
|
}
|
|
|
|
|
|
|
|
// Merge the accumulator with the original value.
|
|
|
|
return merge.Merge(nv, acc)
|
|
|
|
}
|