mirror of https://github.com/databricks/cli.git
58 lines
1.3 KiB
Go
58 lines
1.3 KiB
Go
package validate
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"slices"
|
|
"strings"
|
|
|
|
"github.com/databricks/cli/bundle"
|
|
"github.com/databricks/cli/libs/diag"
|
|
"github.com/databricks/cli/libs/dyn"
|
|
)
|
|
|
|
func AllResourcesHaveValues() bundle.Mutator {
|
|
return &allResourcesHaveValues{}
|
|
}
|
|
|
|
type allResourcesHaveValues struct{}
|
|
|
|
func (m *allResourcesHaveValues) Name() string {
|
|
return "validate:AllResourcesHaveValues"
|
|
}
|
|
|
|
func (m *allResourcesHaveValues) Apply(ctx context.Context, b *bundle.Bundle) diag.Diagnostics {
|
|
diags := diag.Diagnostics{}
|
|
|
|
_, err := dyn.MapByPattern(
|
|
b.Config.Value(),
|
|
dyn.NewPattern(dyn.Key("resources"), dyn.AnyKey(), dyn.AnyKey()),
|
|
func(p dyn.Path, v dyn.Value) (dyn.Value, error) {
|
|
if v.Kind() != dyn.KindNil {
|
|
return v, nil
|
|
}
|
|
|
|
// Type of the resource, stripped of the trailing 's' to make it
|
|
// singular.
|
|
rType := strings.TrimSuffix(p[1].Key(), "s")
|
|
|
|
// Name of the resource. Eg: "foo" in "jobs.foo".
|
|
rName := p[2].Key()
|
|
|
|
diags = append(diags, diag.Diagnostic{
|
|
Severity: diag.Error,
|
|
Summary: fmt.Sprintf("%s %s is not defined", rType, rName),
|
|
Locations: v.Locations(),
|
|
Paths: []dyn.Path{slices.Clone(p)},
|
|
})
|
|
|
|
return v, nil
|
|
},
|
|
)
|
|
if err != nil {
|
|
diags = append(diags, diag.FromErr(err)...)
|
|
}
|
|
|
|
return diags
|
|
}
|