Skip to content
Open
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
1 change: 1 addition & 0 deletions .nextchanges/bundles/registered-model-aliases.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* Fixes [#4012](https://github.com/databricks/cli/issues/4012): registered model `aliases` are now set in Unity Catalog on deploy instead of being silently ignored. A model without an `aliases` section keeps the aliases set outside the bundle (for example by MLflow), and `aliases: []` removes them.
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
bundle:
name: test-bundle-$UNIQUE_NAME

resources:
registered_models:
model1:
name: $MODEL_NAME
catalog_name: main
schema_name: default
comment: Managed by the bundle
aliases:
- alias_name: test
version_num: 1
- alias_name: staging
version_num: 2
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Cloud = false
EnvMatrix.DMS = [""]
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@

=== A model created outside the bundle, with versions 1 and 2 registered the way mlflow.register_model does
>>> [CLI] registered-models create --json {"name": "test-registered-model-[UNIQUE_NAME]", "catalog_name": "main", "schema_name": "default"}
{
"full_name": "main.default.test-registered-model-[UNIQUE_NAME]"
}

>>> [CLI] api post /api/2.0/mlflow/unity-catalog/model-versions/create --json {"name": "main.default.test-registered-model-[UNIQUE_NAME]", "source": "dbfs:/tmp/model"}
{
"version": "1"
}

>>> [CLI] api post /api/2.0/mlflow/unity-catalog/model-versions/create --json {"name": "main.default.test-registered-model-[UNIQUE_NAME]", "source": "dbfs:/tmp/model"}
{
"version": "2"
}

=== Bind reports the comment and aliases the deploy will set
>>> musterr [CLI] bundle deployment bind model1 main.default.test-registered-model-[UNIQUE_NAME]
Plan: update resources.registered_models.model1

Changes detected:
~ aliases: null -> [{"alias_name":"test","version_num":1},{"alias_name":"staging","version_num":2}]
~ comment: null -> "Managed by the bundle"

Error: this bind operation requires user confirmation, but the current console does not support prompting.
To proceed, use --auto-approve after reviewing the plan above.


>>> [CLI] bundle deployment bind model1 main.default.test-registered-model-[UNIQUE_NAME] --auto-approve
Successfully bound registered_model with an id 'main.default.test-registered-model-[UNIQUE_NAME]'
Run 'bundle deploy' to deploy changes to your workspace

=== Deploy sets them
>>> [CLI] bundle deploy
Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/test-bundle-[UNIQUE_NAME]/default/files...
Updated registered_models.model1
Files: 2 uploaded, 0 deleted
Resources: 0 created, 1 changed, 0 deleted, 0 unchanged

>>> print_requests.py //unity-catalog/models
{
"method": "PATCH",
"path": "/api/2.1/unity-catalog/models/main.default.test-registered-model-[UNIQUE_NAME]",
"body": {
"catalog_name": "main",
"comment": "Managed by the bundle",
"name": "test-registered-model-[UNIQUE_NAME]",
"schema_name": "default"
}
}
{
"method": "PUT",
"path": "/api/2.1/unity-catalog/models/main.default.test-registered-model-[UNIQUE_NAME]/aliases/test",
"body": {
"version_num": 1
}
}
{
"method": "PUT",
"path": "/api/2.1/unity-catalog/models/main.default.test-registered-model-[UNIQUE_NAME]/aliases/staging",
"body": {
"version_num": 2
}
}

>>> [CLI] registered-models get main.default.test-registered-model-[UNIQUE_NAME] --include-aliases
{
"comment": "Managed by the bundle",
"aliases": [
{
"alias_name": "test",
"version_num": 1
},
{
"alias_name": "staging",
"version_num": 2
}
]
}

=== Redeploy is a no-op
>>> [CLI] bundle plan
Plan: 0 to add, 0 to change, 0 to delete, 1 unchanged

>>> [CLI] bundle deployment unbind model1

>>> [CLI] bundle destroy --auto-approve
All files and directories at the following location will be deleted: /Workspace/Users/[USERNAME]/.bundle/test-bundle-[UNIQUE_NAME]/default

Destroy: 0 deleted

>>> [CLI] registered-models delete main.default.test-registered-model-[UNIQUE_NAME]
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
MODEL_NAME="test-registered-model-$UNIQUE_NAME"
export MODEL_NAME
envsubst < databricks.yml.tmpl > databricks.yml
MODEL="main.default.$MODEL_NAME"

title "A model created outside the bundle, with versions 1 and 2 registered the way mlflow.register_model does"
trace $CLI registered-models create --json "{\"name\": \"$MODEL_NAME\", \"catalog_name\": \"main\", \"schema_name\": \"default\"}" | jq '{full_name}'
for _ in 1 2; do
trace $CLI api post /api/2.0/mlflow/unity-catalog/model-versions/create --json "{\"name\": \"$MODEL\", \"source\": \"dbfs:/tmp/model\"}" | jq '.model_version | {version}'
done

cleanup() {
trace $CLI registered-models delete "$MODEL"
}
trap cleanup EXIT

title "Bind reports the comment and aliases the deploy will set"
trace musterr $CLI bundle deployment bind model1 "$MODEL"
trace $CLI bundle deployment bind model1 "$MODEL" --auto-approve

title "Deploy sets them"
rm -f "$OUT_REQUESTS"
trace $CLI bundle deploy
trace print_requests.py //unity-catalog/models
trace $CLI registered-models get "$MODEL" --include-aliases | jq '{comment, aliases: [.aliases[]? | {alias_name, version_num}]}'

title "Redeploy is a no-op"
trace $CLI bundle plan

trace $CLI bundle deployment unbind model1
trace $CLI bundle destroy --auto-approve
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Binding an existing model and deploying sets the aliases the config declares (#4012).
# Local only: the aliases need registered model versions, which the test registers through the
# fake server rather than with MLflow.
Cloud = false
RecordRequests = true

Env.MSYS_NO_PATHCONV = "1"
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
bundle:
name: registered-model-aliases-$UNIQUE_NAME

resources:
registered_models:
model1:
name: model-aliases-$UNIQUE_NAME
catalog_name: main
schema_name: default
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Cloud = false
EnvMatrix.DMS = ["", "true"]
EnvMatrix.READPLAN = ["", "1"]
Loading
Loading