mirror of https://github.com/databricks/cli.git
fix convertor and add unit test
This commit is contained in:
parent
8f4f3ae9c6
commit
ce5792c256
|
@ -10,24 +10,15 @@ import (
|
||||||
"github.com/databricks/cli/libs/log"
|
"github.com/databricks/cli/libs/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// TODO: Articulate the consequences of deleting a UC volume in the prompt message that
|
||||||
|
// is displayed.
|
||||||
func convertVolumeResource(ctx context.Context, vin dyn.Value) (dyn.Value, error) {
|
func convertVolumeResource(ctx context.Context, vin dyn.Value) (dyn.Value, error) {
|
||||||
// Normalize the output value to the target schema.
|
// Normalize the output value to the target schema.
|
||||||
v, diags := convert.Normalize(schema.ResourceVolume{}, vin)
|
vout, diags := convert.Normalize(schema.ResourceVolume{}, vin)
|
||||||
for _, diag := range diags {
|
for _, diag := range diags {
|
||||||
log.Debugf(ctx, "volume normalization diagnostic: %s", diag.Summary)
|
log.Debugf(ctx, "volume normalization diagnostic: %s", diag.Summary)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: What happens if I try to delete a UC volume that has data in it?
|
|
||||||
// Do I need force destroy functionality here.
|
|
||||||
|
|
||||||
// We always set force destroy as it allows DABs to manage the lifecycle
|
|
||||||
// of the schema. It's the responsibility of the CLI to ensure the user
|
|
||||||
// is adequately warned when they try to delete a UC Volume.
|
|
||||||
vout, err := dyn.SetByPath(v, dyn.MustPathFromString("force_destroy"), dyn.V(true))
|
|
||||||
if err != nil {
|
|
||||||
return dyn.InvalidValue, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return vout, nil
|
return vout, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,8 +35,8 @@ func (volumeConverter) Convert(ctx context.Context, key string, vin dyn.Value, o
|
||||||
|
|
||||||
// Configure grants for this resource.
|
// Configure grants for this resource.
|
||||||
if grants := convertGrantsResource(ctx, vin); grants != nil {
|
if grants := convertGrantsResource(ctx, vin); grants != nil {
|
||||||
grants.Schema = fmt.Sprintf("${databricks_schema.%s.id}", key)
|
grants.Volume = fmt.Sprintf("${databricks_volume.%s.id}", key)
|
||||||
out.Grants["schema_"+key] = grants
|
out.Grants["volume_"+key] = grants
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -0,0 +1,70 @@
|
||||||
|
package tfdyn
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/databricks/cli/bundle/config/resources"
|
||||||
|
"github.com/databricks/cli/bundle/internal/tf/schema"
|
||||||
|
"github.com/databricks/cli/libs/dyn"
|
||||||
|
"github.com/databricks/cli/libs/dyn/convert"
|
||||||
|
"github.com/databricks/databricks-sdk-go/service/catalog"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestConvertVolume(t *testing.T) {
|
||||||
|
var src = resources.Volume{
|
||||||
|
CreateVolumeRequestContent: &catalog.CreateVolumeRequestContent{
|
||||||
|
CatalogName: "catalog",
|
||||||
|
Comment: "comment",
|
||||||
|
Name: "name",
|
||||||
|
SchemaName: "schema",
|
||||||
|
StorageLocation: "s3://bucket/path",
|
||||||
|
VolumeType: "EXTERNAL",
|
||||||
|
},
|
||||||
|
Grants: []resources.Grant{
|
||||||
|
{
|
||||||
|
Privileges: []string{"READ_VOLUME"},
|
||||||
|
Principal: "jack@gmail.com",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Privileges: []string{"WRITE_VOLUME"},
|
||||||
|
Principal: "jane@gmail.com",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
vin, err := convert.FromTyped(src, dyn.NilValue)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
ctx := context.Background()
|
||||||
|
out := schema.NewResources()
|
||||||
|
err = volumeConverter{}.Convert(ctx, "my_volume", vin, out)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
// Assert equality on the volume
|
||||||
|
require.Equal(t, map[string]any{
|
||||||
|
"catalog_name": "catalog",
|
||||||
|
"comment": "comment",
|
||||||
|
"name": "name",
|
||||||
|
"schema_name": "schema",
|
||||||
|
"storage_location": "s3://bucket/path",
|
||||||
|
"volume_type": "EXTERNAL",
|
||||||
|
}, out.Schema["my_volume"])
|
||||||
|
|
||||||
|
// Assert equality on the grants
|
||||||
|
assert.Equal(t, &schema.ResourceGrants{
|
||||||
|
Volume: "${databricks_volume.my_volume.id}",
|
||||||
|
Grant: []schema.ResourceGrantsGrant{
|
||||||
|
{
|
||||||
|
Privileges: []string{"READ_VOLUME"},
|
||||||
|
Principal: "jack@gmail.com",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Privileges: []string{"WRITE_VOLUME"},
|
||||||
|
Principal: "jane@gmail.com",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}, out.Grants["volume_my_volume"])
|
||||||
|
}
|
Loading…
Reference in New Issue