Use plural title resource header

This commit is contained in:
Pieter Noordhuis 2024-10-17 16:39:17 +02:00
parent 2c8bb75bc4
commit 85bc79f7a7
No known key found for this signature in database
GPG Key ID: 12ACCCC104CF2930
6 changed files with 59 additions and 65 deletions

View File

@ -48,8 +48,8 @@ func initializeForWorkspace(b *bundle.Bundle, orgId string, urlPrefix string) {
urlSuffix = "?o=" + orgId urlSuffix = "?o=" + orgId
} }
for _, rs := range b.Config.Resources.AllResources() { for _, group := range b.Config.Resources.AllResources() {
for _, r := range rs { for _, r := range group.Resources {
r.InitializeURL(urlPrefix, urlSuffix) r.InitializeURL(urlPrefix, urlSuffix)
} }
} }

View File

@ -93,8 +93,8 @@ func TestInitializeURLs(t *testing.T) {
initializeForWorkspace(b, "123456", "https://mycompany.databricks.com/") initializeForWorkspace(b, "123456", "https://mycompany.databricks.com/")
for _, rs := range b.Config.Resources.AllResources() { for _, group := range b.Config.Resources.AllResources() {
for key, r := range rs { for key, r := range group.Resources {
require.Equal(t, expectedURLs[key], r.GetURL(), "Unexpected URL for "+key) require.Equal(t, expectedURLs[key], r.GetURL(), "Unexpected URL for "+key)
} }
} }

View File

@ -41,64 +41,42 @@ type ConfigResource interface {
InitializeURL(urlPrefix string, urlSuffix string) InitializeURL(urlPrefix string, urlSuffix string)
} }
func (r *Resources) AllResources() map[string]map[string]ConfigResource { // ResourceGroup represents a group of resources of the same type.
result := make(map[string]map[string]ConfigResource) // It includes a description of the resource type and a map of resources.
type ResourceGroup struct {
jobResources := make(map[string]ConfigResource) Description ResourceDescription
for key, job := range r.Jobs { Resources map[string]ConfigResource
jobResources[key] = job
} }
result["jobs"] = jobResources
pipelineResources := make(map[string]ConfigResource) // collectResourceMap collects resources of a specific type into a ResourceGroup.
for key, pipeline := range r.Pipelines { func collectResourceMap[T ConfigResource](
pipelineResources[key] = pipeline description ResourceDescription,
input map[string]T,
) ResourceGroup {
resources := make(map[string]ConfigResource)
for key, resource := range input {
resources[key] = resource
} }
result["pipelines"] = pipelineResources return ResourceGroup{
Description: description,
modelResources := make(map[string]ConfigResource) Resources: resources,
for key, model := range r.Models {
modelResources[key] = model
} }
result["models"] = modelResources
experimentResources := make(map[string]ConfigResource)
for key, experiment := range r.Experiments {
experimentResources[key] = experiment
} }
result["experiments"] = experimentResources
modelServingEndpointResources := make(map[string]ConfigResource) // AllResources returns all resources in the bundle grouped by their resource type.
for key, endpoint := range r.ModelServingEndpoints { func (r *Resources) AllResources() []ResourceGroup {
modelServingEndpointResources[key] = endpoint descriptions := SupportedResources()
return []ResourceGroup{
collectResourceMap(descriptions["jobs"], r.Jobs),
collectResourceMap(descriptions["pipelines"], r.Pipelines),
collectResourceMap(descriptions["models"], r.Models),
collectResourceMap(descriptions["experiments"], r.Experiments),
collectResourceMap(descriptions["model_serving_endpoints"], r.ModelServingEndpoints),
collectResourceMap(descriptions["registered_models"], r.RegisteredModels),
collectResourceMap(descriptions["quality_monitors"], r.QualityMonitors),
collectResourceMap(descriptions["schemas"], r.Schemas),
collectResourceMap(descriptions["clusters"], r.Clusters),
} }
result["model_serving_endpoints"] = modelServingEndpointResources
registeredModelResources := make(map[string]ConfigResource)
for key, registeredModel := range r.RegisteredModels {
registeredModelResources[key] = registeredModel
}
result["registered_models"] = registeredModelResources
qualityMonitorResources := make(map[string]ConfigResource)
for key, qualityMonitor := range r.QualityMonitors {
qualityMonitorResources[key] = qualityMonitor
}
result["quality_monitors"] = qualityMonitorResources
schemaResources := make(map[string]ConfigResource)
for key, schema := range r.Schemas {
schemaResources[key] = schema
}
result["schemas"] = schemaResources
clusterResources := make(map[string]ConfigResource)
for key, schema := range r.Clusters {
clusterResources[key] = schema
}
result["clusters"] = clusterResources
return result
} }
func (r *Resources) FindResourceByConfigKey(key string) (ConfigResource, error) { func (r *Resources) FindResourceByConfigKey(key string) (ConfigResource, error) {

View File

@ -67,7 +67,11 @@ func TestResourcesAllResourcesCompleteness(t *testing.T) {
r := Resources{} r := Resources{}
rt := reflect.TypeOf(r) rt := reflect.TypeOf(r)
result := r.AllResources() // Collect set of includes resource types
var types []string
for _, group := range r.AllResources() {
types = append(types, group.Description.PluralName)
}
for i := 0; i < rt.NumField(); i++ { for i := 0; i < rt.NumField(); i++ {
field := rt.Field(i) field := rt.Field(i)
@ -77,8 +81,7 @@ func TestResourcesAllResourcesCompleteness(t *testing.T) {
jsonTag = jsonTag[:idx] jsonTag = jsonTag[:idx]
} }
_, exists := result[jsonTag] assert.Contains(t, types, jsonTag, "Field %s is missing in AllResources", field.Name)
assert.True(t, exists, "Field %s is missing in AllResources map", field.Name)
} }
} }

View File

@ -187,9 +187,9 @@ func RenderSummary(ctx context.Context, out io.Writer, b *bundle.Bundle) error {
var resourceGroups []ResourceGroup var resourceGroups []ResourceGroup
for group, r := range b.Config.Resources.AllResources() { for _, group := range b.Config.Resources.AllResources() {
resources := make([]ResourceInfo, 0, len(r)) resources := make([]ResourceInfo, 0, len(group.Resources))
for key, resource := range r { for key, resource := range group.Resources {
resources = append(resources, ResourceInfo{ resources = append(resources, ResourceInfo{
Key: key, Key: key,
Name: resource.GetName(), Name: resource.GetName(),
@ -198,9 +198,8 @@ func RenderSummary(ctx context.Context, out io.Writer, b *bundle.Bundle) error {
} }
if len(resources) > 0 { if len(resources) > 0 {
capitalizedGroup := strings.ToUpper(group[:1]) + group[1:]
resourceGroups = append(resourceGroups, ResourceGroup{ resourceGroups = append(resourceGroups, ResourceGroup{
GroupName: capitalizedGroup, GroupName: group.Description.PluralTitle,
Resources: resources, Resources: resources,
}) })
} }

View File

@ -15,6 +15,7 @@ import (
"github.com/databricks/databricks-sdk-go/service/iam" "github.com/databricks/databricks-sdk-go/service/iam"
"github.com/databricks/databricks-sdk-go/service/jobs" "github.com/databricks/databricks-sdk-go/service/jobs"
"github.com/databricks/databricks-sdk-go/service/pipelines" "github.com/databricks/databricks-sdk-go/service/pipelines"
"github.com/databricks/databricks-sdk-go/service/serving"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
@ -539,6 +540,15 @@ func TestRenderSummary(t *testing.T) {
// no URL // no URL
}, },
}, },
ModelServingEndpoints: map[string]*resources.ModelServingEndpoint{
"endpoint1": {
ID: "7",
CreateServingEndpoint: &serving.CreateServingEndpoint{
Name: "my_serving_endpoint",
},
URL: "https://url4",
},
},
}, },
}, },
} }
@ -559,6 +569,10 @@ Resources:
job2: job2:
Name: job2-name Name: job2-name
URL: https://url2 URL: https://url2
Model Serving Endpoints:
endpoint1:
Name: my_serving_endpoint
URL: https://url4
Pipelines: Pipelines:
pipeline1: pipeline1:
Name: pipeline1-name Name: pipeline1-name