Inline SDK struct

This commit is contained in:
Pieter Noordhuis 2024-10-24 16:24:06 +02:00
parent 866bfc5be7
commit 93155f1c77
No known key found for this signature in database
GPG Key ID: 12ACCCC104CF2930
8 changed files with 46 additions and 33 deletions

View File

@ -214,7 +214,7 @@ func (m *applyPresets) Apply(ctx context.Context, b *bundle.Bundle) diag.Diagnos
// Dashboards: Prefix // Dashboards: Prefix
for key, dashboard := range r.Dashboards { for key, dashboard := range r.Dashboards {
if dashboard == nil { if dashboard == nil || dashboard.CreateDashboardRequest == nil {
diags = diags.Extend(diag.Errorf("dashboard %s s is not defined", key)) diags = diags.Extend(diag.Errorf("dashboard %s s is not defined", key))
continue continue
} }

View File

@ -10,6 +10,7 @@ import (
"github.com/databricks/cli/bundle/config/resources" "github.com/databricks/cli/bundle/config/resources"
"github.com/databricks/cli/bundle/internal/bundletest" "github.com/databricks/cli/bundle/internal/bundletest"
"github.com/databricks/cli/libs/dyn" "github.com/databricks/cli/libs/dyn"
"github.com/databricks/databricks-sdk-go/service/dashboards"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
@ -25,12 +26,16 @@ func TestConfigureDashboardDefaultsParentPath(t *testing.T) {
"d1": { "d1": {
// Empty string is skipped. // Empty string is skipped.
// See below for how it is set. // See below for how it is set.
CreateDashboardRequest: &dashboards.CreateDashboardRequest{
ParentPath: "", ParentPath: "",
}, },
},
"d2": { "d2": {
// Non-empty string is skipped. // Non-empty string is skipped.
CreateDashboardRequest: &dashboards.CreateDashboardRequest{
ParentPath: "already-set", ParentPath: "already-set",
}, },
},
"d3": { "d3": {
// No parent path set. // No parent path set.
}, },

View File

@ -8,6 +8,7 @@ import (
"github.com/databricks/cli/bundle/config/resources" "github.com/databricks/cli/bundle/config/resources"
"github.com/databricks/databricks-sdk-go/service/catalog" "github.com/databricks/databricks-sdk-go/service/catalog"
"github.com/databricks/databricks-sdk-go/service/compute" "github.com/databricks/databricks-sdk-go/service/compute"
"github.com/databricks/databricks-sdk-go/service/dashboards"
"github.com/databricks/databricks-sdk-go/service/jobs" "github.com/databricks/databricks-sdk-go/service/jobs"
"github.com/databricks/databricks-sdk-go/service/ml" "github.com/databricks/databricks-sdk-go/service/ml"
"github.com/databricks/databricks-sdk-go/service/pipelines" "github.com/databricks/databricks-sdk-go/service/pipelines"
@ -88,11 +89,13 @@ func TestInitializeURLs(t *testing.T) {
Dashboards: map[string]*resources.Dashboard{ Dashboards: map[string]*resources.Dashboard{
"dashboard1": { "dashboard1": {
ID: "01ef8d56871e1d50ae30ce7375e42478", ID: "01ef8d56871e1d50ae30ce7375e42478",
CreateDashboardRequest: &dashboards.CreateDashboardRequest{
DisplayName: "My special dashboard", DisplayName: "My special dashboard",
}, },
}, },
}, },
}, },
},
} }
expectedURLs := map[string]string{ expectedURLs := map[string]string{

View File

@ -14,6 +14,7 @@ import (
sdkconfig "github.com/databricks/databricks-sdk-go/config" sdkconfig "github.com/databricks/databricks-sdk-go/config"
"github.com/databricks/databricks-sdk-go/service/catalog" "github.com/databricks/databricks-sdk-go/service/catalog"
"github.com/databricks/databricks-sdk-go/service/compute" "github.com/databricks/databricks-sdk-go/service/compute"
"github.com/databricks/databricks-sdk-go/service/dashboards"
"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/ml" "github.com/databricks/databricks-sdk-go/service/ml"
@ -124,7 +125,11 @@ func mockBundle(mode config.Mode) *bundle.Bundle {
"cluster1": {ClusterSpec: &compute.ClusterSpec{ClusterName: "cluster1", SparkVersion: "13.2.x", NumWorkers: 1}}, "cluster1": {ClusterSpec: &compute.ClusterSpec{ClusterName: "cluster1", SparkVersion: "13.2.x", NumWorkers: 1}},
}, },
Dashboards: map[string]*resources.Dashboard{ Dashboards: map[string]*resources.Dashboard{
"dashboard1": {DisplayName: "dashboard1"}, "dashboard1": {
CreateDashboardRequest: &dashboards.CreateDashboardRequest{
DisplayName: "dashboard1",
},
},
}, },
}, },
}, },

View File

@ -17,27 +17,18 @@ type Dashboard struct {
ModifiedStatus ModifiedStatus `json:"modified_status,omitempty" bundle:"internal"` ModifiedStatus ModifiedStatus `json:"modified_status,omitempty" bundle:"internal"`
URL string `json:"url,omitempty" bundle:"internal"` URL string `json:"url,omitempty" bundle:"internal"`
// =========================== *dashboards.CreateDashboardRequest
// === BEGIN OF API FIELDS ===
// ===========================
// DisplayName is the display name of the dashboard (both as title and as basename in the workspace). // =========================
DisplayName string `json:"display_name"` // === Additional fields ===
// =========================
// WarehouseID is the ID of the SQL Warehouse used to run the dashboard's queries.
WarehouseID string `json:"warehouse_id"`
// SerializedDashboard holds the contents of the dashboard in serialized JSON form. // SerializedDashboard holds the contents of the dashboard in serialized JSON form.
// Note: its type is any and not string such that it can be inlined as YAML. // We override the field's type from the SDK struct here to allow for inlining as YAML.
// If it is not a string, its contents will be marshalled as JSON. // If the value is a string, it is used as is.
// If it is not a string, its contents is marshalled as JSON.
SerializedDashboard any `json:"serialized_dashboard,omitempty"` SerializedDashboard any `json:"serialized_dashboard,omitempty"`
// ParentPath is the workspace path of the folder containing the dashboard.
// Includes leading slash and no trailing slash.
//
// Defaults to ${workspace.resource_path} if not set.
ParentPath string `json:"parent_path,omitempty"`
// EmbedCredentials is a flag to indicate if the publisher's credentials should // EmbedCredentials is a flag to indicate if the publisher's credentials should
// be embedded in the published dashboard. These embedded credentials will be used // be embedded in the published dashboard. These embedded credentials will be used
// to execute the published dashboard's queries. // to execute the published dashboard's queries.
@ -45,10 +36,6 @@ type Dashboard struct {
// Defaults to false if not set. // Defaults to false if not set.
EmbedCredentials bool `json:"embed_credentials,omitempty"` EmbedCredentials bool `json:"embed_credentials,omitempty"`
// ===========================
// ==== END OF API FIELDS ====
// ===========================
// FilePath points to the local `.lvdash.json` file containing the dashboard definition. // FilePath points to the local `.lvdash.json` file containing the dashboard definition.
FilePath string `json:"file_path,omitempty"` FilePath string `json:"file_path,omitempty"`
} }

View File

@ -29,11 +29,13 @@ func mockDashboardBundle(t *testing.T) *bundle.Bundle {
Resources: config.Resources{ Resources: config.Resources{
Dashboards: map[string]*resources.Dashboard{ Dashboards: map[string]*resources.Dashboard{
"dash1": { "dash1": {
CreateDashboardRequest: &dashboards.CreateDashboardRequest{
DisplayName: "My Special Dashboard", DisplayName: "My Special Dashboard",
}, },
}, },
}, },
}, },
},
} }
return b return b
} }

View File

@ -12,6 +12,7 @@ import (
"github.com/databricks/cli/libs/dyn/convert" "github.com/databricks/cli/libs/dyn/convert"
"github.com/databricks/databricks-sdk-go/service/catalog" "github.com/databricks/databricks-sdk-go/service/catalog"
"github.com/databricks/databricks-sdk-go/service/compute" "github.com/databricks/databricks-sdk-go/service/compute"
"github.com/databricks/databricks-sdk-go/service/dashboards"
"github.com/databricks/databricks-sdk-go/service/jobs" "github.com/databricks/databricks-sdk-go/service/jobs"
"github.com/databricks/databricks-sdk-go/service/ml" "github.com/databricks/databricks-sdk-go/service/ml"
"github.com/databricks/databricks-sdk-go/service/pipelines" "github.com/databricks/databricks-sdk-go/service/pipelines"
@ -791,10 +792,12 @@ func TestTerraformToBundleEmptyRemoteResources(t *testing.T) {
}, },
Dashboards: map[string]*resources.Dashboard{ Dashboards: map[string]*resources.Dashboard{
"test_dashboard": { "test_dashboard": {
CreateDashboardRequest: &dashboards.CreateDashboardRequest{
DisplayName: "test_dashboard", DisplayName: "test_dashboard",
}, },
}, },
}, },
},
} }
var tfState = resourcesState{ var tfState = resourcesState{
Resources: nil, Resources: nil,
@ -948,13 +951,17 @@ func TestTerraformToBundleModifiedResources(t *testing.T) {
}, },
Dashboards: map[string]*resources.Dashboard{ Dashboards: map[string]*resources.Dashboard{
"test_dashboard": { "test_dashboard": {
CreateDashboardRequest: &dashboards.CreateDashboardRequest{
DisplayName: "test_dashboard", DisplayName: "test_dashboard",
}, },
},
"test_dashboard_new": { "test_dashboard_new": {
CreateDashboardRequest: &dashboards.CreateDashboardRequest{
DisplayName: "test_dashboard_new", DisplayName: "test_dashboard_new",
}, },
}, },
}, },
},
} }
var tfState = resourcesState{ var tfState = resourcesState{
Resources: []stateResource{ Resources: []stateResource{

View File

@ -8,15 +8,19 @@ import (
"github.com/databricks/cli/bundle/internal/tf/schema" "github.com/databricks/cli/bundle/internal/tf/schema"
"github.com/databricks/cli/libs/dyn" "github.com/databricks/cli/libs/dyn"
"github.com/databricks/cli/libs/dyn/convert" "github.com/databricks/cli/libs/dyn/convert"
"github.com/databricks/databricks-sdk-go/service/dashboards"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
func TestConvertDashboard(t *testing.T) { func TestConvertDashboard(t *testing.T) {
var src = resources.Dashboard{ var src = resources.Dashboard{
CreateDashboardRequest: &dashboards.CreateDashboardRequest{
DisplayName: "my dashboard", DisplayName: "my dashboard",
WarehouseID: "f00dcafe", WarehouseId: "f00dcafe",
ParentPath: "/some/path", ParentPath: "/some/path",
},
EmbedCredentials: true, EmbedCredentials: true,
Permissions: []resources.Permission{ Permissions: []resources.Permission{