Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/data-sources/registered_model.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,6 @@ The following attributes are exported:

The following resources are often used in the same context:

* [databricks_registered_model](../resources/schema.md) resource to manage models within Unity Catalog.
* [databricks_registered_model](../resources/registered_model.md) resource to manage models within Unity Catalog.
* [databricks_model_serving](../resources/model_serving.md) to serve this model on a Databricks serving endpoint.
* [databricks_mlflow_experiment](../resources/mlflow_experiment.md) to manage [MLflow experiments](https://docs.databricks.com/data/data-sources/mlflow-experiment.html) in Databricks.
64 changes: 64 additions & 0 deletions docs/data-sources/registered_model_versions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
---
subcategory: "Unity Catalog"
---
# databricks_registered_model_versions Data Source

-> This resource can only be used with a workspace-level provider!

This resource allows you to get information about versions of [Model in Unity Catalog](https://docs.databricks.com/en/mlflow/models-in-uc.html).

## Example Usage

```hcl
data "databricks_registered_model_versions" "this" {
full_name = "main.default.my_model"
}
```

## Argument Reference

The following arguments are supported:

* `full_name` - (Required) The fully-qualified name of the registered model (`catalog_name.schema_name.name`).

## Attribute Reference

The following attributes are exported:

* `model_versions` - list of objects describing the model versions. Each object consists of following attributes:
* `aliases` - the list of aliases associated with this model. Each item is object consisting of following attributes:
* `alias_name` - string with the name of alias
* `version_num` - associated model version
* `catalog_name` - The name of the catalog where the schema and the registered model reside.
* `comment` - The comment attached to the registered model.
* `created_at` - the Unix timestamp at the model's creation
* `created_by` - the identifier of the user who created the model
* `full_name` - The fully-qualified name of the registered model (`catalog_name.schema_name.name`).
* `id` - The unique identifier of the model version
* `metastore_id` - the unique identifier of the metastore
* `model_version_dependencies` - block describing model version dependencies, for feature-store packaged models. Consists of following attributes:
* `dependencies` - list of dependencies consisting of following attributes:
* `function` - A function that is dependent on a SQL object:
* `function_full_name` - Full name of the dependent function
* `table` - A table that is dependent on a SQL object
* `table_full_name` - Full name of the dependent table
* `name` - The name of the registered model.
* `owner` - Name of the registered model owner.
* `run_id` - MLflow run ID used when creating the model version, if `source` was generated by an experiment run stored in an MLflow tracking server
* `run_workspace_id` - ID of the Databricks workspace containing the MLflow run that generated this model version, if applicable
* `schema_name` - The name of the schema where the registered model resides.
* `source` - URI indicating the location of the source artifacts (files) for the model version.
* `status` - Current status of the model version.
* `storage_location` - The storage location under which model version data files are stored.
* `updated_at` - the timestamp of the last time changes were made to the model
* `updated_by` - the identifier of the user who updated the model last time
* `version` - Integer model version number, used to reference the model version in API requests.

## Related Resources

The following resources are often used in the same context:

* [databricks_registered_model](registered_model.md) data source to retrieve information about a model within Unity Catalog.
* [databricks_registered_model](../resources/registered.md) resource to manage models within Unity Catalog.
* [databricks_model_serving](../resources/model_serving.md) to serve this model on a Databricks serving endpoint.
* [databricks_mlflow_experiment](../resources/mlflow_experiment.md) to manage [MLflow experiments](https://docs.databricks.com/data/data-sources/mlflow-experiment.html) in Databricks.
6 changes: 6 additions & 0 deletions internal/acceptance/registered_model_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,15 @@ func TestUcAccRegisteredModel(t *testing.T) {
data "databricks_registered_model" "model" {
full_name = databricks_registered_model.model.id
}
data "databricks_registered_model_versions" "model_versions" {
full_name = databricks_registered_model.model.id
}
output "model" {
value = data.databricks_registered_model.model
}
output "model_versions" {
value = data.databricks_registered_model_versions.model_versions
}
`,
},
)
Expand Down
1 change: 1 addition & 0 deletions internal/providers/pluginfw/pluginfw_rollout_utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ var pluginFwOnlyResources = []func() resource.Resource{
// List of data sources that have been onboarded to the plugin framework - not migrated from sdkv2.
var pluginFwOnlyDataSources = []func() datasource.DataSource{
registered_model.DataSourceRegisteredModel,
registered_model.DataSourceRegisteredModelVersions,
notificationdestinations.DataSourceNotificationDestinations,
catalog.DataSourceFunctions,
// TODO: Add DataSourceCluster into migratedDataSources after fixing unit tests.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
package registered_model

import (
"context"
"fmt"

"github.com/databricks/terraform-provider-databricks/common"
pluginfwcommon "github.com/databricks/terraform-provider-databricks/internal/providers/pluginfw/common"
"github.com/databricks/terraform-provider-databricks/internal/providers/pluginfw/converters"
"github.com/databricks/terraform-provider-databricks/internal/providers/pluginfw/tfschema"
"github.com/databricks/terraform-provider-databricks/internal/service/catalog_tf"
"github.com/hashicorp/terraform-plugin-framework/datasource"
"github.com/hashicorp/terraform-plugin-framework/datasource/schema"
"github.com/hashicorp/terraform-plugin-framework/types"
)

func DataSourceRegisteredModelVersions() datasource.DataSource {
return &RegisteredModelVersionsDataSource{}
}

var _ datasource.DataSourceWithConfigure = &RegisteredModelVersionsDataSource{}

type RegisteredModelVersionsDataSource struct {
Client *common.DatabricksClient
}

type RegisteredModelVersionsData struct {
FullName types.String `tfsdk:"full_name"`
ModelVersions []catalog_tf.ModelVersionInfo `tfsdk:"model_versions" tf:"optional,computed"`
}

func (d *RegisteredModelVersionsDataSource) Metadata(ctx context.Context, req datasource.MetadataRequest, resp *datasource.MetadataResponse) {
resp.TypeName = "databricks_registered_model_versions"
}

func (d *RegisteredModelVersionsDataSource) Schema(ctx context.Context, req datasource.SchemaRequest, resp *datasource.SchemaResponse) {
attrs, blocks := tfschema.DataSourceStructToSchemaMap(RegisteredModelVersionsData{}, nil)
resp.Schema = schema.Schema{
Attributes: attrs,
Blocks: blocks,
}
}

func (d *RegisteredModelVersionsDataSource) Configure(_ context.Context, req datasource.ConfigureRequest, resp *datasource.ConfigureResponse) {
if d.Client == nil {
d.Client = pluginfwcommon.ConfigureDataSource(req, resp)
}
}

func (d *RegisteredModelVersionsDataSource) Read(ctx context.Context, req datasource.ReadRequest, resp *datasource.ReadResponse) {
w, diags := d.Client.GetWorkspaceClient()
resp.Diagnostics.Append(diags...)
if resp.Diagnostics.HasError() {
return
}

var registeredModelVersions RegisteredModelVersionsData
diags = req.Config.Get(ctx, &registeredModelVersions)
resp.Diagnostics.Append(diags...)
if resp.Diagnostics.HasError() {
return
}
modelFullName := registeredModelVersions.FullName.ValueString()
modelVersions, err := w.ModelVersions.ListByFullName(ctx, modelFullName)
if err != nil {
resp.Diagnostics.AddError(fmt.Sprintf("failed to list model versions for registered model %s", modelFullName), err.Error())
return
}
for _, modelVersionSdk := range modelVersions.ModelVersions {
var modelVersion catalog_tf.ModelVersionInfo
resp.Diagnostics.Append(converters.GoSdkToTfSdkStruct(ctx, modelVersionSdk, &modelVersion)...)
if resp.Diagnostics.HasError() {
return
}
registeredModelVersions.ModelVersions = append(registeredModelVersions.ModelVersions, modelVersion)
}
resp.Diagnostics.Append(resp.State.Set(ctx, registeredModelVersions)...)
}