github.com/databricks/cli@v0.203.0/bundle/deploy/terraform/convert_test.go (about) 1 package terraform 2 3 import ( 4 "testing" 5 6 "github.com/databricks/cli/bundle/config" 7 "github.com/databricks/cli/bundle/config/resources" 8 "github.com/databricks/databricks-sdk-go/service/compute" 9 "github.com/databricks/databricks-sdk-go/service/jobs" 10 "github.com/databricks/databricks-sdk-go/service/ml" 11 "github.com/databricks/databricks-sdk-go/service/pipelines" 12 "github.com/stretchr/testify/assert" 13 "github.com/stretchr/testify/require" 14 ) 15 16 func TestConvertJob(t *testing.T) { 17 var src = resources.Job{ 18 JobSettings: &jobs.JobSettings{ 19 Name: "my job", 20 JobClusters: []jobs.JobCluster{ 21 { 22 JobClusterKey: "key", 23 NewCluster: &compute.ClusterSpec{ 24 SparkVersion: "10.4.x-scala2.12", 25 }, 26 }, 27 }, 28 GitSource: &jobs.GitSource{ 29 GitProvider: jobs.GitProviderGitHub, 30 GitUrl: "https://github.com/foo/bar", 31 }, 32 }, 33 } 34 35 var config = config.Root{ 36 Resources: config.Resources{ 37 Jobs: map[string]*resources.Job{ 38 "my_job": &src, 39 }, 40 }, 41 } 42 43 out := BundleToTerraform(&config) 44 assert.Equal(t, "my job", out.Resource.Job["my_job"].Name) 45 assert.Len(t, out.Resource.Job["my_job"].JobCluster, 1) 46 assert.Equal(t, "https://github.com/foo/bar", out.Resource.Job["my_job"].GitSource.Url) 47 assert.Nil(t, out.Data) 48 } 49 50 func TestConvertJobPermissions(t *testing.T) { 51 var src = resources.Job{ 52 Permissions: []resources.Permission{ 53 { 54 Level: "CAN_VIEW", 55 UserName: "jane@doe.com", 56 }, 57 }, 58 } 59 60 var config = config.Root{ 61 Resources: config.Resources{ 62 Jobs: map[string]*resources.Job{ 63 "my_job": &src, 64 }, 65 }, 66 } 67 68 out := BundleToTerraform(&config) 69 assert.NotEmpty(t, out.Resource.Permissions["job_my_job"].JobId) 70 assert.Len(t, out.Resource.Permissions["job_my_job"].AccessControl, 1) 71 72 p := out.Resource.Permissions["job_my_job"].AccessControl[0] 73 assert.Equal(t, "jane@doe.com", p.UserName) 74 assert.Equal(t, "CAN_VIEW", p.PermissionLevel) 75 } 76 77 func TestConvertJobTaskLibraries(t *testing.T) { 78 var src = resources.Job{ 79 JobSettings: &jobs.JobSettings{ 80 Name: "my job", 81 Tasks: []jobs.Task{ 82 { 83 TaskKey: "key", 84 Libraries: []compute.Library{ 85 { 86 Pypi: &compute.PythonPyPiLibrary{ 87 Package: "mlflow", 88 }, 89 }, 90 }, 91 }, 92 }, 93 }, 94 } 95 96 var config = config.Root{ 97 Resources: config.Resources{ 98 Jobs: map[string]*resources.Job{ 99 "my_job": &src, 100 }, 101 }, 102 } 103 104 out := BundleToTerraform(&config) 105 assert.Equal(t, "my job", out.Resource.Job["my_job"].Name) 106 require.Len(t, out.Resource.Job["my_job"].Task, 1) 107 require.Len(t, out.Resource.Job["my_job"].Task[0].Library, 1) 108 assert.Equal(t, "mlflow", out.Resource.Job["my_job"].Task[0].Library[0].Pypi.Package) 109 } 110 111 func TestConvertPipeline(t *testing.T) { 112 var src = resources.Pipeline{ 113 PipelineSpec: &pipelines.PipelineSpec{ 114 Name: "my pipeline", 115 Libraries: []pipelines.PipelineLibrary{ 116 { 117 Notebook: &pipelines.NotebookLibrary{ 118 Path: "notebook path", 119 }, 120 }, 121 { 122 File: &pipelines.FileLibrary{ 123 Path: "file path", 124 }, 125 }, 126 }, 127 }, 128 } 129 130 var config = config.Root{ 131 Resources: config.Resources{ 132 Pipelines: map[string]*resources.Pipeline{ 133 "my_pipeline": &src, 134 }, 135 }, 136 } 137 138 out := BundleToTerraform(&config) 139 assert.Equal(t, "my pipeline", out.Resource.Pipeline["my_pipeline"].Name) 140 assert.Len(t, out.Resource.Pipeline["my_pipeline"].Library, 2) 141 assert.Nil(t, out.Data) 142 } 143 144 func TestConvertPipelinePermissions(t *testing.T) { 145 var src = resources.Pipeline{ 146 Permissions: []resources.Permission{ 147 { 148 Level: "CAN_VIEW", 149 UserName: "jane@doe.com", 150 }, 151 }, 152 } 153 154 var config = config.Root{ 155 Resources: config.Resources{ 156 Pipelines: map[string]*resources.Pipeline{ 157 "my_pipeline": &src, 158 }, 159 }, 160 } 161 162 out := BundleToTerraform(&config) 163 assert.NotEmpty(t, out.Resource.Permissions["pipeline_my_pipeline"].PipelineId) 164 assert.Len(t, out.Resource.Permissions["pipeline_my_pipeline"].AccessControl, 1) 165 166 p := out.Resource.Permissions["pipeline_my_pipeline"].AccessControl[0] 167 assert.Equal(t, "jane@doe.com", p.UserName) 168 assert.Equal(t, "CAN_VIEW", p.PermissionLevel) 169 } 170 171 func TestConvertModel(t *testing.T) { 172 var src = resources.MlflowModel{ 173 Model: &ml.Model{ 174 Name: "name", 175 Description: "description", 176 Tags: []ml.ModelTag{ 177 { 178 Key: "k1", 179 Value: "v1", 180 }, 181 { 182 Key: "k2", 183 Value: "v2", 184 }, 185 }, 186 }, 187 } 188 189 var config = config.Root{ 190 Resources: config.Resources{ 191 Models: map[string]*resources.MlflowModel{ 192 "my_model": &src, 193 }, 194 }, 195 } 196 197 out := BundleToTerraform(&config) 198 assert.Equal(t, "name", out.Resource.MlflowModel["my_model"].Name) 199 assert.Equal(t, "description", out.Resource.MlflowModel["my_model"].Description) 200 assert.Len(t, out.Resource.MlflowModel["my_model"].Tags, 2) 201 assert.Equal(t, "k1", out.Resource.MlflowModel["my_model"].Tags[0].Key) 202 assert.Equal(t, "v1", out.Resource.MlflowModel["my_model"].Tags[0].Value) 203 assert.Equal(t, "k2", out.Resource.MlflowModel["my_model"].Tags[1].Key) 204 assert.Equal(t, "v2", out.Resource.MlflowModel["my_model"].Tags[1].Value) 205 assert.Nil(t, out.Data) 206 } 207 208 func TestConvertModelPermissions(t *testing.T) { 209 var src = resources.MlflowModel{ 210 Permissions: []resources.Permission{ 211 { 212 Level: "CAN_READ", 213 UserName: "jane@doe.com", 214 }, 215 }, 216 } 217 218 var config = config.Root{ 219 Resources: config.Resources{ 220 Models: map[string]*resources.MlflowModel{ 221 "my_model": &src, 222 }, 223 }, 224 } 225 226 out := BundleToTerraform(&config) 227 assert.NotEmpty(t, out.Resource.Permissions["mlflow_model_my_model"].RegisteredModelId) 228 assert.Len(t, out.Resource.Permissions["mlflow_model_my_model"].AccessControl, 1) 229 230 p := out.Resource.Permissions["mlflow_model_my_model"].AccessControl[0] 231 assert.Equal(t, "jane@doe.com", p.UserName) 232 assert.Equal(t, "CAN_READ", p.PermissionLevel) 233 } 234 235 func TestConvertExperiment(t *testing.T) { 236 var src = resources.MlflowExperiment{ 237 Experiment: &ml.Experiment{ 238 Name: "name", 239 }, 240 } 241 242 var config = config.Root{ 243 Resources: config.Resources{ 244 Experiments: map[string]*resources.MlflowExperiment{ 245 "my_experiment": &src, 246 }, 247 }, 248 } 249 250 out := BundleToTerraform(&config) 251 assert.Equal(t, "name", out.Resource.MlflowExperiment["my_experiment"].Name) 252 assert.Nil(t, out.Data) 253 } 254 255 func TestConvertExperimentPermissions(t *testing.T) { 256 var src = resources.MlflowExperiment{ 257 Permissions: []resources.Permission{ 258 { 259 Level: "CAN_READ", 260 UserName: "jane@doe.com", 261 }, 262 }, 263 } 264 265 var config = config.Root{ 266 Resources: config.Resources{ 267 Experiments: map[string]*resources.MlflowExperiment{ 268 "my_experiment": &src, 269 }, 270 }, 271 } 272 273 out := BundleToTerraform(&config) 274 assert.NotEmpty(t, out.Resource.Permissions["mlflow_experiment_my_experiment"].ExperimentId) 275 assert.Len(t, out.Resource.Permissions["mlflow_experiment_my_experiment"].AccessControl, 1) 276 277 p := out.Resource.Permissions["mlflow_experiment_my_experiment"].AccessControl[0] 278 assert.Equal(t, "jane@doe.com", p.UserName) 279 assert.Equal(t, "CAN_READ", p.PermissionLevel) 280 281 }