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 }