mirror of https://github.com/databricks/cli.git
Remove Terraform conversion function that's no longer used (#1840)
## Changes In #1218, the `BundleToTerraform` function was replaced by a version based on the dynamic configuration tree. Since then, it has only been used in tests to confirm that the output of the old function was equal to the output of the new function. We no longer need this and can exclusively rely on the version based on the dynamic configuration tree. ## Tests Tests pass.
This commit is contained in:
parent
0c9c90208f
commit
3b1fb6d2df
|
@ -2,9 +2,7 @@ package terraform
|
|||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"sort"
|
||||
|
||||
"github.com/databricks/cli/bundle/config"
|
||||
"github.com/databricks/cli/bundle/config/resources"
|
||||
|
@ -14,244 +12,6 @@ import (
|
|||
tfjson "github.com/hashicorp/terraform-json"
|
||||
)
|
||||
|
||||
func conv(from any, to any) {
|
||||
buf, _ := json.Marshal(from)
|
||||
json.Unmarshal(buf, &to)
|
||||
}
|
||||
|
||||
func convPermissions(acl []resources.Permission) *schema.ResourcePermissions {
|
||||
if len(acl) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
resource := schema.ResourcePermissions{}
|
||||
for _, ac := range acl {
|
||||
resource.AccessControl = append(resource.AccessControl, convPermission(ac))
|
||||
}
|
||||
|
||||
return &resource
|
||||
}
|
||||
|
||||
func convPermission(ac resources.Permission) schema.ResourcePermissionsAccessControl {
|
||||
dst := schema.ResourcePermissionsAccessControl{
|
||||
PermissionLevel: ac.Level,
|
||||
}
|
||||
if ac.UserName != "" {
|
||||
dst.UserName = ac.UserName
|
||||
}
|
||||
if ac.GroupName != "" {
|
||||
dst.GroupName = ac.GroupName
|
||||
}
|
||||
if ac.ServicePrincipalName != "" {
|
||||
dst.ServicePrincipalName = ac.ServicePrincipalName
|
||||
}
|
||||
return dst
|
||||
}
|
||||
|
||||
func convGrants(acl []resources.Grant) *schema.ResourceGrants {
|
||||
if len(acl) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
resource := schema.ResourceGrants{}
|
||||
for _, ac := range acl {
|
||||
resource.Grant = append(resource.Grant, schema.ResourceGrantsGrant{
|
||||
Privileges: ac.Privileges,
|
||||
Principal: ac.Principal,
|
||||
})
|
||||
}
|
||||
|
||||
return &resource
|
||||
}
|
||||
|
||||
// BundleToTerraform converts resources in a bundle configuration
|
||||
// to the equivalent Terraform JSON representation.
|
||||
//
|
||||
// Note: This function is an older implementation of the conversion logic. It is
|
||||
// no longer used in any code paths. It is kept around to be used in tests.
|
||||
// New resources do not need to modify this function and can instead can define
|
||||
// the conversion login in the tfdyn package.
|
||||
func BundleToTerraform(config *config.Root) *schema.Root {
|
||||
tfroot := schema.NewRoot()
|
||||
tfroot.Provider = schema.NewProviders()
|
||||
tfroot.Resource = schema.NewResources()
|
||||
noResources := true
|
||||
|
||||
for k, src := range config.Resources.Jobs {
|
||||
noResources = false
|
||||
var dst schema.ResourceJob
|
||||
conv(src, &dst)
|
||||
|
||||
if src.JobSettings != nil {
|
||||
sort.Slice(src.JobSettings.Tasks, func(i, j int) bool {
|
||||
return src.JobSettings.Tasks[i].TaskKey < src.JobSettings.Tasks[j].TaskKey
|
||||
})
|
||||
|
||||
for _, v := range src.Tasks {
|
||||
var t schema.ResourceJobTask
|
||||
conv(v, &t)
|
||||
|
||||
for _, v_ := range v.Libraries {
|
||||
var l schema.ResourceJobTaskLibrary
|
||||
conv(v_, &l)
|
||||
t.Library = append(t.Library, l)
|
||||
}
|
||||
|
||||
// Convert for_each_task libraries
|
||||
if v.ForEachTask != nil {
|
||||
for _, v_ := range v.ForEachTask.Task.Libraries {
|
||||
var l schema.ResourceJobTaskForEachTaskTaskLibrary
|
||||
conv(v_, &l)
|
||||
t.ForEachTask.Task.Library = append(t.ForEachTask.Task.Library, l)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
dst.Task = append(dst.Task, t)
|
||||
}
|
||||
|
||||
for _, v := range src.JobClusters {
|
||||
var t schema.ResourceJobJobCluster
|
||||
conv(v, &t)
|
||||
dst.JobCluster = append(dst.JobCluster, t)
|
||||
}
|
||||
|
||||
// Unblock downstream work. To be addressed more generally later.
|
||||
if git := src.GitSource; git != nil {
|
||||
dst.GitSource = &schema.ResourceJobGitSource{
|
||||
Url: git.GitUrl,
|
||||
Branch: git.GitBranch,
|
||||
Commit: git.GitCommit,
|
||||
Provider: string(git.GitProvider),
|
||||
Tag: git.GitTag,
|
||||
}
|
||||
}
|
||||
|
||||
for _, v := range src.Parameters {
|
||||
var t schema.ResourceJobParameter
|
||||
conv(v, &t)
|
||||
dst.Parameter = append(dst.Parameter, t)
|
||||
}
|
||||
}
|
||||
|
||||
tfroot.Resource.Job[k] = &dst
|
||||
|
||||
// Configure permissions for this resource.
|
||||
if rp := convPermissions(src.Permissions); rp != nil {
|
||||
rp.JobId = fmt.Sprintf("${databricks_job.%s.id}", k)
|
||||
tfroot.Resource.Permissions["job_"+k] = rp
|
||||
}
|
||||
}
|
||||
|
||||
for k, src := range config.Resources.Pipelines {
|
||||
noResources = false
|
||||
var dst schema.ResourcePipeline
|
||||
conv(src, &dst)
|
||||
|
||||
if src.PipelineSpec != nil {
|
||||
for _, v := range src.Libraries {
|
||||
var l schema.ResourcePipelineLibrary
|
||||
conv(v, &l)
|
||||
dst.Library = append(dst.Library, l)
|
||||
}
|
||||
|
||||
for _, v := range src.Clusters {
|
||||
var l schema.ResourcePipelineCluster
|
||||
conv(v, &l)
|
||||
dst.Cluster = append(dst.Cluster, l)
|
||||
}
|
||||
|
||||
for _, v := range src.Notifications {
|
||||
var l schema.ResourcePipelineNotification
|
||||
conv(v, &l)
|
||||
dst.Notification = append(dst.Notification, l)
|
||||
}
|
||||
}
|
||||
|
||||
tfroot.Resource.Pipeline[k] = &dst
|
||||
|
||||
// Configure permissions for this resource.
|
||||
if rp := convPermissions(src.Permissions); rp != nil {
|
||||
rp.PipelineId = fmt.Sprintf("${databricks_pipeline.%s.id}", k)
|
||||
tfroot.Resource.Permissions["pipeline_"+k] = rp
|
||||
}
|
||||
}
|
||||
|
||||
for k, src := range config.Resources.Models {
|
||||
noResources = false
|
||||
var dst schema.ResourceMlflowModel
|
||||
conv(src, &dst)
|
||||
tfroot.Resource.MlflowModel[k] = &dst
|
||||
|
||||
// Configure permissions for this resource.
|
||||
if rp := convPermissions(src.Permissions); rp != nil {
|
||||
rp.RegisteredModelId = fmt.Sprintf("${databricks_mlflow_model.%s.registered_model_id}", k)
|
||||
tfroot.Resource.Permissions["mlflow_model_"+k] = rp
|
||||
}
|
||||
}
|
||||
|
||||
for k, src := range config.Resources.Experiments {
|
||||
noResources = false
|
||||
var dst schema.ResourceMlflowExperiment
|
||||
conv(src, &dst)
|
||||
tfroot.Resource.MlflowExperiment[k] = &dst
|
||||
|
||||
// Configure permissions for this resource.
|
||||
if rp := convPermissions(src.Permissions); rp != nil {
|
||||
rp.ExperimentId = fmt.Sprintf("${databricks_mlflow_experiment.%s.id}", k)
|
||||
tfroot.Resource.Permissions["mlflow_experiment_"+k] = rp
|
||||
}
|
||||
}
|
||||
|
||||
for k, src := range config.Resources.ModelServingEndpoints {
|
||||
noResources = false
|
||||
var dst schema.ResourceModelServing
|
||||
conv(src, &dst)
|
||||
tfroot.Resource.ModelServing[k] = &dst
|
||||
|
||||
// Configure permissions for this resource.
|
||||
if rp := convPermissions(src.Permissions); rp != nil {
|
||||
rp.ServingEndpointId = fmt.Sprintf("${databricks_model_serving.%s.serving_endpoint_id}", k)
|
||||
tfroot.Resource.Permissions["model_serving_"+k] = rp
|
||||
}
|
||||
}
|
||||
|
||||
for k, src := range config.Resources.RegisteredModels {
|
||||
noResources = false
|
||||
var dst schema.ResourceRegisteredModel
|
||||
conv(src, &dst)
|
||||
tfroot.Resource.RegisteredModel[k] = &dst
|
||||
|
||||
// Configure permissions for this resource.
|
||||
if rp := convGrants(src.Grants); rp != nil {
|
||||
rp.Function = fmt.Sprintf("${databricks_registered_model.%s.id}", k)
|
||||
tfroot.Resource.Grants["registered_model_"+k] = rp
|
||||
}
|
||||
}
|
||||
|
||||
for k, src := range config.Resources.QualityMonitors {
|
||||
noResources = false
|
||||
var dst schema.ResourceQualityMonitor
|
||||
conv(src, &dst)
|
||||
tfroot.Resource.QualityMonitor[k] = &dst
|
||||
}
|
||||
|
||||
for k, src := range config.Resources.Clusters {
|
||||
noResources = false
|
||||
var dst schema.ResourceCluster
|
||||
conv(src, &dst)
|
||||
tfroot.Resource.Cluster[k] = &dst
|
||||
}
|
||||
|
||||
// We explicitly set "resource" to nil to omit it from a JSON encoding.
|
||||
// This is required because the terraform CLI requires >= 1 resources defined
|
||||
// if the "resource" property is used in a .tf.json file.
|
||||
if noResources {
|
||||
tfroot.Resource = nil
|
||||
}
|
||||
return tfroot
|
||||
}
|
||||
|
||||
// BundleToTerraformWithDynValue converts resources in a bundle configuration
|
||||
// to the equivalent Terraform JSON representation.
|
||||
func BundleToTerraformWithDynValue(ctx context.Context, root dyn.Value) (*schema.Root, error) {
|
||||
|
|
|
@ -2,7 +2,6 @@ package terraform
|
|||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"reflect"
|
||||
"testing"
|
||||
|
||||
|
@ -21,6 +20,27 @@ import (
|
|||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func produceTerraformConfiguration(t *testing.T, config config.Root) *schema.Root {
|
||||
vin, err := convert.FromTyped(config, dyn.NilValue)
|
||||
require.NoError(t, err)
|
||||
out, err := BundleToTerraformWithDynValue(context.Background(), vin)
|
||||
require.NoError(t, err)
|
||||
return out
|
||||
}
|
||||
|
||||
func convertToResourceStruct[T any](t *testing.T, resource *T, data any) {
|
||||
require.NotNil(t, resource)
|
||||
require.NotNil(t, data)
|
||||
|
||||
// Convert data to a dyn.Value.
|
||||
vin, err := convert.FromTyped(data, dyn.NilValue)
|
||||
require.NoError(t, err)
|
||||
|
||||
// Convert the dyn.Value to a struct.
|
||||
err = convert.ToTyped(resource, vin)
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
func TestBundleToTerraformJob(t *testing.T) {
|
||||
var src = resources.Job{
|
||||
JobSettings: &jobs.JobSettings{
|
||||
|
@ -58,8 +78,9 @@ func TestBundleToTerraformJob(t *testing.T) {
|
|||
},
|
||||
}
|
||||
|
||||
out := BundleToTerraform(&config)
|
||||
resource := out.Resource.Job["my_job"].(*schema.ResourceJob)
|
||||
var resource schema.ResourceJob
|
||||
out := produceTerraformConfiguration(t, config)
|
||||
convertToResourceStruct(t, &resource, out.Resource.Job["my_job"])
|
||||
|
||||
assert.Equal(t, "my job", resource.Name)
|
||||
assert.Len(t, resource.JobCluster, 1)
|
||||
|
@ -68,8 +89,6 @@ func TestBundleToTerraformJob(t *testing.T) {
|
|||
assert.Equal(t, "param1", resource.Parameter[0].Name)
|
||||
assert.Equal(t, "param2", resource.Parameter[1].Name)
|
||||
assert.Nil(t, out.Data)
|
||||
|
||||
bundleToTerraformEquivalenceTest(t, &config)
|
||||
}
|
||||
|
||||
func TestBundleToTerraformJobPermissions(t *testing.T) {
|
||||
|
@ -90,15 +109,14 @@ func TestBundleToTerraformJobPermissions(t *testing.T) {
|
|||
},
|
||||
}
|
||||
|
||||
out := BundleToTerraform(&config)
|
||||
resource := out.Resource.Permissions["job_my_job"].(*schema.ResourcePermissions)
|
||||
var resource schema.ResourcePermissions
|
||||
out := produceTerraformConfiguration(t, config)
|
||||
convertToResourceStruct(t, &resource, out.Resource.Permissions["job_my_job"])
|
||||
|
||||
assert.NotEmpty(t, resource.JobId)
|
||||
assert.Len(t, resource.AccessControl, 1)
|
||||
assert.Equal(t, "jane@doe.com", resource.AccessControl[0].UserName)
|
||||
assert.Equal(t, "CAN_VIEW", resource.AccessControl[0].PermissionLevel)
|
||||
|
||||
bundleToTerraformEquivalenceTest(t, &config)
|
||||
}
|
||||
|
||||
func TestBundleToTerraformJobTaskLibraries(t *testing.T) {
|
||||
|
@ -128,15 +146,14 @@ func TestBundleToTerraformJobTaskLibraries(t *testing.T) {
|
|||
},
|
||||
}
|
||||
|
||||
out := BundleToTerraform(&config)
|
||||
resource := out.Resource.Job["my_job"].(*schema.ResourceJob)
|
||||
var resource schema.ResourceJob
|
||||
out := produceTerraformConfiguration(t, config)
|
||||
convertToResourceStruct(t, &resource, out.Resource.Job["my_job"])
|
||||
|
||||
assert.Equal(t, "my job", resource.Name)
|
||||
require.Len(t, resource.Task, 1)
|
||||
require.Len(t, resource.Task[0].Library, 1)
|
||||
assert.Equal(t, "mlflow", resource.Task[0].Library[0].Pypi.Package)
|
||||
|
||||
bundleToTerraformEquivalenceTest(t, &config)
|
||||
}
|
||||
|
||||
func TestBundleToTerraformForEachTaskLibraries(t *testing.T) {
|
||||
|
@ -172,15 +189,14 @@ func TestBundleToTerraformForEachTaskLibraries(t *testing.T) {
|
|||
},
|
||||
}
|
||||
|
||||
out := BundleToTerraform(&config)
|
||||
resource := out.Resource.Job["my_job"].(*schema.ResourceJob)
|
||||
var resource schema.ResourceJob
|
||||
out := produceTerraformConfiguration(t, config)
|
||||
convertToResourceStruct(t, &resource, out.Resource.Job["my_job"])
|
||||
|
||||
assert.Equal(t, "my job", resource.Name)
|
||||
require.Len(t, resource.Task, 1)
|
||||
require.Len(t, resource.Task[0].ForEachTask.Task.Library, 1)
|
||||
assert.Equal(t, "mlflow", resource.Task[0].ForEachTask.Task.Library[0].Pypi.Package)
|
||||
|
||||
bundleToTerraformEquivalenceTest(t, &config)
|
||||
}
|
||||
|
||||
func TestBundleToTerraformPipeline(t *testing.T) {
|
||||
|
@ -230,8 +246,9 @@ func TestBundleToTerraformPipeline(t *testing.T) {
|
|||
},
|
||||
}
|
||||
|
||||
out := BundleToTerraform(&config)
|
||||
resource := out.Resource.Pipeline["my_pipeline"].(*schema.ResourcePipeline)
|
||||
var resource schema.ResourcePipeline
|
||||
out := produceTerraformConfiguration(t, config)
|
||||
convertToResourceStruct(t, &resource, out.Resource.Pipeline["my_pipeline"])
|
||||
|
||||
assert.Equal(t, "my pipeline", resource.Name)
|
||||
assert.Len(t, resource.Library, 2)
|
||||
|
@ -241,8 +258,6 @@ func TestBundleToTerraformPipeline(t *testing.T) {
|
|||
assert.Equal(t, resource.Notification[1].Alerts, []string{"on-update-failure", "on-flow-failure"})
|
||||
assert.Equal(t, resource.Notification[1].EmailRecipients, []string{"jane@doe.com", "john@doe.com"})
|
||||
assert.Nil(t, out.Data)
|
||||
|
||||
bundleToTerraformEquivalenceTest(t, &config)
|
||||
}
|
||||
|
||||
func TestBundleToTerraformPipelinePermissions(t *testing.T) {
|
||||
|
@ -263,15 +278,14 @@ func TestBundleToTerraformPipelinePermissions(t *testing.T) {
|
|||
},
|
||||
}
|
||||
|
||||
out := BundleToTerraform(&config)
|
||||
resource := out.Resource.Permissions["pipeline_my_pipeline"].(*schema.ResourcePermissions)
|
||||
var resource schema.ResourcePermissions
|
||||
out := produceTerraformConfiguration(t, config)
|
||||
convertToResourceStruct(t, &resource, out.Resource.Permissions["pipeline_my_pipeline"])
|
||||
|
||||
assert.NotEmpty(t, resource.PipelineId)
|
||||
assert.Len(t, resource.AccessControl, 1)
|
||||
assert.Equal(t, "jane@doe.com", resource.AccessControl[0].UserName)
|
||||
assert.Equal(t, "CAN_VIEW", resource.AccessControl[0].PermissionLevel)
|
||||
|
||||
bundleToTerraformEquivalenceTest(t, &config)
|
||||
}
|
||||
|
||||
func TestBundleToTerraformModel(t *testing.T) {
|
||||
|
@ -300,8 +314,9 @@ func TestBundleToTerraformModel(t *testing.T) {
|
|||
},
|
||||
}
|
||||
|
||||
out := BundleToTerraform(&config)
|
||||
resource := out.Resource.MlflowModel["my_model"].(*schema.ResourceMlflowModel)
|
||||
var resource schema.ResourceMlflowModel
|
||||
out := produceTerraformConfiguration(t, config)
|
||||
convertToResourceStruct(t, &resource, out.Resource.MlflowModel["my_model"])
|
||||
|
||||
assert.Equal(t, "name", resource.Name)
|
||||
assert.Equal(t, "description", resource.Description)
|
||||
|
@ -311,8 +326,6 @@ func TestBundleToTerraformModel(t *testing.T) {
|
|||
assert.Equal(t, "k2", resource.Tags[1].Key)
|
||||
assert.Equal(t, "v2", resource.Tags[1].Value)
|
||||
assert.Nil(t, out.Data)
|
||||
|
||||
bundleToTerraformEquivalenceTest(t, &config)
|
||||
}
|
||||
|
||||
func TestBundleToTerraformModelPermissions(t *testing.T) {
|
||||
|
@ -336,15 +349,14 @@ func TestBundleToTerraformModelPermissions(t *testing.T) {
|
|||
},
|
||||
}
|
||||
|
||||
out := BundleToTerraform(&config)
|
||||
resource := out.Resource.Permissions["mlflow_model_my_model"].(*schema.ResourcePermissions)
|
||||
var resource schema.ResourcePermissions
|
||||
out := produceTerraformConfiguration(t, config)
|
||||
convertToResourceStruct(t, &resource, out.Resource.Permissions["mlflow_model_my_model"])
|
||||
|
||||
assert.NotEmpty(t, resource.RegisteredModelId)
|
||||
assert.Len(t, resource.AccessControl, 1)
|
||||
assert.Equal(t, "jane@doe.com", resource.AccessControl[0].UserName)
|
||||
assert.Equal(t, "CAN_READ", resource.AccessControl[0].PermissionLevel)
|
||||
|
||||
bundleToTerraformEquivalenceTest(t, &config)
|
||||
}
|
||||
|
||||
func TestBundleToTerraformExperiment(t *testing.T) {
|
||||
|
@ -362,13 +374,12 @@ func TestBundleToTerraformExperiment(t *testing.T) {
|
|||
},
|
||||
}
|
||||
|
||||
out := BundleToTerraform(&config)
|
||||
resource := out.Resource.MlflowExperiment["my_experiment"].(*schema.ResourceMlflowExperiment)
|
||||
var resource schema.ResourceMlflowExperiment
|
||||
out := produceTerraformConfiguration(t, config)
|
||||
convertToResourceStruct(t, &resource, out.Resource.MlflowExperiment["my_experiment"])
|
||||
|
||||
assert.Equal(t, "name", resource.Name)
|
||||
assert.Nil(t, out.Data)
|
||||
|
||||
bundleToTerraformEquivalenceTest(t, &config)
|
||||
}
|
||||
|
||||
func TestBundleToTerraformExperimentPermissions(t *testing.T) {
|
||||
|
@ -392,15 +403,14 @@ func TestBundleToTerraformExperimentPermissions(t *testing.T) {
|
|||
},
|
||||
}
|
||||
|
||||
out := BundleToTerraform(&config)
|
||||
resource := out.Resource.Permissions["mlflow_experiment_my_experiment"].(*schema.ResourcePermissions)
|
||||
var resource schema.ResourcePermissions
|
||||
out := produceTerraformConfiguration(t, config)
|
||||
convertToResourceStruct(t, &resource, out.Resource.Permissions["mlflow_experiment_my_experiment"])
|
||||
|
||||
assert.NotEmpty(t, resource.ExperimentId)
|
||||
assert.Len(t, resource.AccessControl, 1)
|
||||
assert.Equal(t, "jane@doe.com", resource.AccessControl[0].UserName)
|
||||
assert.Equal(t, "CAN_READ", resource.AccessControl[0].PermissionLevel)
|
||||
|
||||
bundleToTerraformEquivalenceTest(t, &config)
|
||||
}
|
||||
|
||||
func TestBundleToTerraformModelServing(t *testing.T) {
|
||||
|
@ -436,8 +446,9 @@ func TestBundleToTerraformModelServing(t *testing.T) {
|
|||
},
|
||||
}
|
||||
|
||||
out := BundleToTerraform(&config)
|
||||
resource := out.Resource.ModelServing["my_model_serving_endpoint"].(*schema.ResourceModelServing)
|
||||
var resource schema.ResourceModelServing
|
||||
out := produceTerraformConfiguration(t, config)
|
||||
convertToResourceStruct(t, &resource, out.Resource.ModelServing["my_model_serving_endpoint"])
|
||||
|
||||
assert.Equal(t, "name", resource.Name)
|
||||
assert.Equal(t, "model_name", resource.Config.ServedModels[0].ModelName)
|
||||
|
@ -447,8 +458,6 @@ func TestBundleToTerraformModelServing(t *testing.T) {
|
|||
assert.Equal(t, "model_name-1", resource.Config.TrafficConfig.Routes[0].ServedModelName)
|
||||
assert.Equal(t, 100, resource.Config.TrafficConfig.Routes[0].TrafficPercentage)
|
||||
assert.Nil(t, out.Data)
|
||||
|
||||
bundleToTerraformEquivalenceTest(t, &config)
|
||||
}
|
||||
|
||||
func TestBundleToTerraformModelServingPermissions(t *testing.T) {
|
||||
|
@ -490,15 +499,14 @@ func TestBundleToTerraformModelServingPermissions(t *testing.T) {
|
|||
},
|
||||
}
|
||||
|
||||
out := BundleToTerraform(&config)
|
||||
resource := out.Resource.Permissions["model_serving_my_model_serving_endpoint"].(*schema.ResourcePermissions)
|
||||
var resource schema.ResourcePermissions
|
||||
out := produceTerraformConfiguration(t, config)
|
||||
convertToResourceStruct(t, &resource, out.Resource.Permissions["model_serving_my_model_serving_endpoint"])
|
||||
|
||||
assert.NotEmpty(t, resource.ServingEndpointId)
|
||||
assert.Len(t, resource.AccessControl, 1)
|
||||
assert.Equal(t, "jane@doe.com", resource.AccessControl[0].UserName)
|
||||
assert.Equal(t, "CAN_VIEW", resource.AccessControl[0].PermissionLevel)
|
||||
|
||||
bundleToTerraformEquivalenceTest(t, &config)
|
||||
}
|
||||
|
||||
func TestBundleToTerraformRegisteredModel(t *testing.T) {
|
||||
|
@ -519,16 +527,15 @@ func TestBundleToTerraformRegisteredModel(t *testing.T) {
|
|||
},
|
||||
}
|
||||
|
||||
out := BundleToTerraform(&config)
|
||||
resource := out.Resource.RegisteredModel["my_registered_model"].(*schema.ResourceRegisteredModel)
|
||||
var resource schema.ResourceRegisteredModel
|
||||
out := produceTerraformConfiguration(t, config)
|
||||
convertToResourceStruct(t, &resource, out.Resource.RegisteredModel["my_registered_model"])
|
||||
|
||||
assert.Equal(t, "name", resource.Name)
|
||||
assert.Equal(t, "catalog", resource.CatalogName)
|
||||
assert.Equal(t, "schema", resource.SchemaName)
|
||||
assert.Equal(t, "comment", resource.Comment)
|
||||
assert.Nil(t, out.Data)
|
||||
|
||||
bundleToTerraformEquivalenceTest(t, &config)
|
||||
}
|
||||
|
||||
func TestBundleToTerraformRegisteredModelGrants(t *testing.T) {
|
||||
|
@ -554,15 +561,14 @@ func TestBundleToTerraformRegisteredModelGrants(t *testing.T) {
|
|||
},
|
||||
}
|
||||
|
||||
out := BundleToTerraform(&config)
|
||||
resource := out.Resource.Grants["registered_model_my_registered_model"].(*schema.ResourceGrants)
|
||||
var resource schema.ResourceGrants
|
||||
out := produceTerraformConfiguration(t, config)
|
||||
convertToResourceStruct(t, &resource, out.Resource.Grants["registered_model_my_registered_model"])
|
||||
|
||||
assert.NotEmpty(t, resource.Function)
|
||||
assert.Len(t, resource.Grant, 1)
|
||||
assert.Equal(t, "jane@doe.com", resource.Grant[0].Principal)
|
||||
assert.Equal(t, "EXECUTE", resource.Grant[0].Privileges[0])
|
||||
|
||||
bundleToTerraformEquivalenceTest(t, &config)
|
||||
}
|
||||
|
||||
func TestBundleToTerraformDeletedResources(t *testing.T) {
|
||||
|
@ -1154,25 +1160,3 @@ func AssertFullResourceCoverage(t *testing.T, config *config.Root) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
func assertEqualTerraformRoot(t *testing.T, a, b *schema.Root) {
|
||||
ba, err := json.Marshal(a)
|
||||
require.NoError(t, err)
|
||||
bb, err := json.Marshal(b)
|
||||
require.NoError(t, err)
|
||||
assert.JSONEq(t, string(ba), string(bb))
|
||||
}
|
||||
|
||||
func bundleToTerraformEquivalenceTest(t *testing.T, config *config.Root) {
|
||||
t.Run("dyn equivalence", func(t *testing.T) {
|
||||
tf1 := BundleToTerraform(config)
|
||||
|
||||
vin, err := convert.FromTyped(config, dyn.NilValue)
|
||||
require.NoError(t, err)
|
||||
tf2, err := BundleToTerraformWithDynValue(context.Background(), vin)
|
||||
require.NoError(t, err)
|
||||
|
||||
// Compare roots
|
||||
assertEqualTerraformRoot(t, tf1, tf2)
|
||||
})
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue