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  }