databricks-cli/bundle/deploy/terraform/interpolate_test.go

101 lines
3.5 KiB
Go

package terraform
import (
"context"
"testing"
"github.com/databricks/cli/bundle"
"github.com/databricks/cli/bundle/config"
"github.com/databricks/cli/bundle/config/resources"
"github.com/databricks/databricks-sdk-go/service/jobs"
"github.com/databricks/databricks-sdk-go/service/ml"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestInterpolate(t *testing.T) {
b := &bundle.Bundle{
Config: config.Root{
Bundle: config.Bundle{
Name: "example",
},
Resources: config.Resources{
Jobs: map[string]*resources.Job{
"my_job": {
JobSettings: &jobs.JobSettings{
Tags: map[string]string{
"other_pipeline": "${resources.pipelines.other_pipeline.id}",
"other_job": "${resources.jobs.other_job.id}",
"other_model": "${resources.models.other_model.id}",
"other_experiment": "${resources.experiments.other_experiment.id}",
"other_model_serving": "${resources.model_serving_endpoints.other_model_serving.id}",
"other_registered_model": "${resources.registered_models.other_registered_model.id}",
"other_schema": "${resources.schemas.other_schema.id}",
"other_cluster": "${resources.clusters.other_cluster.id}",
"other_dashboard": "${resources.dashboards.other_dashboard.id}",
"other_app": "${resources.apps.other_app.id}",
},
Tasks: []jobs.Task{
{
TaskKey: "my_task",
NotebookTask: &jobs.NotebookTask{
BaseParameters: map[string]string{
"model_name": "${resources.models.my_model.name}",
},
},
},
},
},
},
},
Models: map[string]*resources.MlflowModel{
"my_model": {
Model: &ml.Model{
Name: "my_model",
},
},
},
},
},
}
diags := bundle.Apply(context.Background(), b, Interpolate())
require.NoError(t, diags.Error())
j := b.Config.Resources.Jobs["my_job"]
assert.Equal(t, "${databricks_pipeline.other_pipeline.id}", j.Tags["other_pipeline"])
assert.Equal(t, "${databricks_job.other_job.id}", j.Tags["other_job"])
assert.Equal(t, "${databricks_mlflow_model.other_model.id}", j.Tags["other_model"])
assert.Equal(t, "${databricks_mlflow_experiment.other_experiment.id}", j.Tags["other_experiment"])
assert.Equal(t, "${databricks_model_serving.other_model_serving.id}", j.Tags["other_model_serving"])
assert.Equal(t, "${databricks_registered_model.other_registered_model.id}", j.Tags["other_registered_model"])
assert.Equal(t, "${databricks_schema.other_schema.id}", j.Tags["other_schema"])
assert.Equal(t, "${databricks_cluster.other_cluster.id}", j.Tags["other_cluster"])
assert.Equal(t, "${databricks_dashboard.other_dashboard.id}", j.Tags["other_dashboard"])
assert.Equal(t, "${databricks_app.other_app.id}", j.Tags["other_app"])
m := b.Config.Resources.Models["my_model"]
assert.Equal(t, "my_model", m.Model.Name)
}
func TestInterpolateUnknownResourceType(t *testing.T) {
b := &bundle.Bundle{
Config: config.Root{
Resources: config.Resources{
Jobs: map[string]*resources.Job{
"my_job": {
JobSettings: &jobs.JobSettings{
Tags: map[string]string{
"other_unknown": "${resources.unknown.other_unknown.id}",
},
},
},
},
},
},
}
diags := bundle.Apply(context.Background(), b, Interpolate())
assert.ErrorContains(t, diags.Error(), `reference does not exist: ${resources.unknown.other_unknown.id}`)
}