mirror of https://github.com/databricks/cli.git
remove prefixing for uc volumes
This commit is contained in:
parent
68dc6c1ce4
commit
4cc2790300
|
@ -11,8 +11,6 @@ import (
|
||||||
"github.com/databricks/cli/bundle/config"
|
"github.com/databricks/cli/bundle/config"
|
||||||
"github.com/databricks/cli/libs/diag"
|
"github.com/databricks/cli/libs/diag"
|
||||||
"github.com/databricks/cli/libs/dyn"
|
"github.com/databricks/cli/libs/dyn"
|
||||||
"github.com/databricks/cli/libs/dyn/dynvar"
|
|
||||||
"github.com/databricks/cli/libs/log"
|
|
||||||
"github.com/databricks/cli/libs/textutil"
|
"github.com/databricks/cli/libs/textutil"
|
||||||
"github.com/databricks/databricks-sdk-go/service/catalog"
|
"github.com/databricks/databricks-sdk-go/service/catalog"
|
||||||
"github.com/databricks/databricks-sdk-go/service/jobs"
|
"github.com/databricks/databricks-sdk-go/service/jobs"
|
||||||
|
@ -194,31 +192,6 @@ func (m *applyPresets) Apply(ctx context.Context, b *bundle.Bundle) diag.Diagnos
|
||||||
// HTTP API for schemas doesn't yet support tags. It's only supported in
|
// HTTP API for schemas doesn't yet support tags. It's only supported in
|
||||||
// the Databricks UI and via the SQL API.
|
// the Databricks UI and via the SQL API.
|
||||||
}
|
}
|
||||||
|
|
||||||
// Volumes: Prefix
|
|
||||||
for _, v := range r.Volumes {
|
|
||||||
if containsUserIdentity(v.CatalogName, b.Config.Workspace.CurrentUser) {
|
|
||||||
log.Debugf(ctx, "Skipping prefix for volume %s because catalog %s contains the current user's identity", v.Name, v.CatalogName)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if containsUserIdentity(v.SchemaName, b.Config.Workspace.CurrentUser) {
|
|
||||||
log.Debugf(ctx, "Skipping prefix for volume %s because schema %s contains the current user's identity", v.Name, v.SchemaName)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
// We only have to check for ${resources.schemas...} references because any
|
|
||||||
// other valid reference (like ${var.foo}) would have been interpolated by this point.
|
|
||||||
if p, ok := dynvar.PureReferenceToPath(v.SchemaName); ok && p.HasPrefix(dyn.Path{dyn.Key("resources"), dyn.Key("schemas")}) {
|
|
||||||
log.Debugf(ctx, "Skipping prefix for volume %s because schema %s is defined in the bundle and the schema name will be interpolated at runtime", v.Name, v.SchemaName)
|
|
||||||
continue
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
v.Name = normalizePrefix(prefix) + v.Name
|
|
||||||
|
|
||||||
// HTTP API for volumes doesn't yet support tags. It's only supported in
|
|
||||||
// the Databricks UI and via the SQL API.
|
|
||||||
}
|
|
||||||
|
|
||||||
// Clusters: Prefix, Tags
|
// Clusters: Prefix, Tags
|
||||||
for key, c := range r.Clusters {
|
for key, c := range r.Clusters {
|
||||||
if c.ClusterSpec == nil {
|
if c.ClusterSpec == nil {
|
||||||
|
|
|
@ -9,9 +9,7 @@ import (
|
||||||
"github.com/databricks/cli/bundle/config/mutator"
|
"github.com/databricks/cli/bundle/config/mutator"
|
||||||
"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/iam"
|
|
||||||
"github.com/databricks/databricks-sdk-go/service/jobs"
|
"github.com/databricks/databricks-sdk-go/service/jobs"
|
||||||
"github.com/stretchr/testify/assert"
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -127,145 +125,34 @@ func TestApplyPresetsPrefixForUcSchema(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestApplyPresentsReminderToAddSupportForSkippingPrefixes(t *testing.T) {
|
func TestApplyPresetsUCVolumesShouldNotBePrefixed(t *testing.T) {
|
||||||
_, ok := config.SupportedResources()["catalogs"]
|
b := &bundle.Bundle{
|
||||||
assert.False(t, ok,
|
Config: config.Root{
|
||||||
`Since you are adding support for UC catalogs to DABs please ensure that
|
Resources: config.Resources{
|
||||||
you add logic to skip applying presets.name_prefix for UC schemas, UC volumes and
|
Volumes: map[string]*resources.Volume{
|
||||||
any other resources that fall under a catalog in the UC hierarchy (like registered models).
|
"volume1": {
|
||||||
Once you do so feel free to remove this test.`)
|
CreateVolumeRequestContent: &catalog.CreateVolumeRequestContent{
|
||||||
}
|
Name: "volume1",
|
||||||
|
CatalogName: "catalog1",
|
||||||
func TestApplyPresetsPrefixForUcVolumes(t *testing.T) {
|
SchemaName: "schema1",
|
||||||
tests := []struct {
|
|
||||||
name string
|
|
||||||
prefix string
|
|
||||||
volume *resources.Volume
|
|
||||||
want string
|
|
||||||
}{
|
|
||||||
{
|
|
||||||
name: "add prefix to volume",
|
|
||||||
prefix: "[prefix]",
|
|
||||||
volume: &resources.Volume{
|
|
||||||
CreateVolumeRequestContent: &catalog.CreateVolumeRequestContent{
|
|
||||||
Name: "volume1",
|
|
||||||
CatalogName: "catalog1",
|
|
||||||
SchemaName: "schema1",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
want: "prefix_volume1",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "add empty prefix to volume",
|
|
||||||
prefix: "",
|
|
||||||
volume: &resources.Volume{
|
|
||||||
CreateVolumeRequestContent: &catalog.CreateVolumeRequestContent{
|
|
||||||
Name: "volume1",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
want: "volume1",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "skip prefix when catalog name contains user short name",
|
|
||||||
prefix: "[prefix]",
|
|
||||||
volume: &resources.Volume{
|
|
||||||
CreateVolumeRequestContent: &catalog.CreateVolumeRequestContent{
|
|
||||||
Name: "volume1",
|
|
||||||
CatalogName: "dev_john_wick_targets",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
want: "volume1",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "skip prefix when catalog name contains user email",
|
|
||||||
prefix: "[prefix]",
|
|
||||||
volume: &resources.Volume{
|
|
||||||
CreateVolumeRequestContent: &catalog.CreateVolumeRequestContent{
|
|
||||||
Name: "volume1",
|
|
||||||
CatalogName: "dev_john.wick@continental.com_targets",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
want: "volume1",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "skip prefix when schema name contains user short name",
|
|
||||||
prefix: "[prefix]",
|
|
||||||
volume: &resources.Volume{
|
|
||||||
CreateVolumeRequestContent: &catalog.CreateVolumeRequestContent{
|
|
||||||
Name: "volume1",
|
|
||||||
SchemaName: "dev_john_wick_weapons",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
want: "volume1",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "skip prefix when schema name contains user email",
|
|
||||||
prefix: "[prefix]",
|
|
||||||
volume: &resources.Volume{
|
|
||||||
CreateVolumeRequestContent: &catalog.CreateVolumeRequestContent{
|
|
||||||
Name: "volume1",
|
|
||||||
SchemaName: "dev_john.wick@continental.com_targets",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
want: "volume1",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "skip prefix when schema is defined in the bundle and will be interpolated at runtime",
|
|
||||||
prefix: "[prefix]",
|
|
||||||
volume: &resources.Volume{
|
|
||||||
CreateVolumeRequestContent: &catalog.CreateVolumeRequestContent{
|
|
||||||
Name: "volume1",
|
|
||||||
SchemaName: "${resources.schemas.schema1.name}",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
want: "volume1",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "add prefix when schema is a reference without the resources.schemas prefix",
|
|
||||||
prefix: "[prefix]",
|
|
||||||
volume: &resources.Volume{
|
|
||||||
CreateVolumeRequestContent: &catalog.CreateVolumeRequestContent{
|
|
||||||
Name: "volume1",
|
|
||||||
SchemaName: "${foo.bar.baz}",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
want: "prefix_volume1",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, tt := range tests {
|
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
|
||||||
b := &bundle.Bundle{
|
|
||||||
Config: config.Root{
|
|
||||||
Resources: config.Resources{
|
|
||||||
Volumes: map[string]*resources.Volume{
|
|
||||||
"volume1": tt.volume,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
Presets: config.Presets{
|
|
||||||
NamePrefix: tt.prefix,
|
|
||||||
},
|
|
||||||
Workspace: config.Workspace{
|
|
||||||
CurrentUser: &config.User{
|
|
||||||
ShortName: "john_wick",
|
|
||||||
User: &iam.User{
|
|
||||||
UserName: "john.wick@continental.com",
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
},
|
||||||
|
Presets: config.Presets{
|
||||||
ctx := context.Background()
|
NamePrefix: "[prefix]",
|
||||||
diag := bundle.Apply(ctx, b, mutator.ApplyPresets())
|
},
|
||||||
|
},
|
||||||
if diag.HasError() {
|
|
||||||
t.Fatalf("unexpected error: %v", diag)
|
|
||||||
}
|
|
||||||
|
|
||||||
require.Equal(t, tt.want, b.Config.Resources.Volumes["volume1"].Name)
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ctx := context.Background()
|
||||||
|
diag := bundle.Apply(ctx, b, mutator.ApplyPresets())
|
||||||
|
|
||||||
|
if diag.HasError() {
|
||||||
|
t.Fatalf("unexpected error: %v", diag)
|
||||||
|
}
|
||||||
|
|
||||||
|
require.Equal(t, "volume1", b.Config.Resources.Volumes["volume1"].Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestApplyPresetsTags(t *testing.T) {
|
func TestApplyPresetsTags(t *testing.T) {
|
||||||
|
|
|
@ -6,10 +6,10 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/databricks/cli/bundle"
|
"github.com/databricks/cli/bundle"
|
||||||
|
"github.com/databricks/cli/bundle/bundletest"
|
||||||
"github.com/databricks/cli/bundle/config"
|
"github.com/databricks/cli/bundle/config"
|
||||||
"github.com/databricks/cli/bundle/config/mutator"
|
"github.com/databricks/cli/bundle/config/mutator"
|
||||||
"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/libs/dyn"
|
"github.com/databricks/cli/libs/dyn"
|
||||||
"github.com/databricks/cli/libs/vfs"
|
"github.com/databricks/cli/libs/vfs"
|
||||||
"github.com/databricks/databricks-sdk-go/service/dashboards"
|
"github.com/databricks/databricks-sdk-go/service/dashboards"
|
||||||
|
|
Loading…
Reference in New Issue