Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
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
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Plan: 0 to add, 0 to change, 0 to delete, 1 unchanged
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
update experiments.my_experiment

Plan: 0 to add, 1 to change, 0 to delete, 0 unchanged
5 changes: 5 additions & 0 deletions acceptance/bundle/deploy/experiments/basic/out.test.toml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

198 changes: 198 additions & 0 deletions acceptance/bundle/deploy/experiments/basic/output.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,198 @@

=== create the experiment
>>> export EXPERIMENT_ARTIFACT_LOCATION=s3://original-[UNIQUE_NAME]

>>> export EXPERIMENT_NAME_PREFIX=original

>>> envsubst

>>> [CLI] bundle plan
create experiments.my_experiment

Plan: 1 to add, 0 to change, 0 to delete, 0 unchanged

>>> [CLI] bundle deploy
Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/experiment-basic-[UNIQUE_NAME]/default/files...
Deploying resources...
Updating deployment state...
Deployment complete!

>>> [CLI] experiments get-experiment [NUMID]
{
"name": "/Users/[USERNAME]/original-[UNIQUE_NAME]",
"artifact_location": "s3://original-[UNIQUE_NAME]",
"tags": [
{
"key": "k1",
"value": "v1"
},
{
"key": "mlflow.ownerId",
"value": "[USERID]"
},
{
"key": "mlflow.experiment.sourceName",
"value": "/Users/[USERNAME]/original-[UNIQUE_NAME]"
},
{
"key": "mlflow.ownerId",
"value": "[USERID]"
},
{
"key": "mlflow.ownerEmail",
"value": "[USERNAME]"
},
{
"key": "mlflow.experimentType",
"value": "MLFLOW_EXPERIMENT"
}
]
}

=== update the name
>>> export EXPERIMENT_NAME_PREFIX=new-name

>>> envsubst

>>> [CLI] bundle plan
update experiments.my_experiment

Plan: 0 to add, 1 to change, 0 to delete, 0 unchanged

>>> [CLI] bundle deploy
Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/experiment-basic-[UNIQUE_NAME]/default/files...
Deploying resources...
Updating deployment state...
Deployment complete!

>>> [CLI] experiments get-experiment [NUMID]
{
"name": "/Users/[USERNAME]/new-name-[UNIQUE_NAME]",
"artifact_location": "s3://original-[UNIQUE_NAME]",
"tags": [
{
"key": "k1",
"value": "v1"
},
{
"key": "mlflow.ownerId",
"value": "[USERID]"
},
{
"key": "mlflow.experiment.sourceName",
"value": "/Users/[USERNAME]/new-name-[UNIQUE_NAME]"
},
{
"key": "mlflow.ownerId",
"value": "[USERID]"
},
{
"key": "mlflow.ownerEmail",
"value": "[USERNAME]"
},
{
"key": "mlflow.experimentType",
"value": "MLFLOW_EXPERIMENT"
}
]
}

=== updating the artifact location should cause a recreation
>>> export EXPERIMENT_ARTIFACT_LOCATION=s3://new-[UNIQUE_NAME]

>>> envsubst

>>> [CLI] bundle plan
recreate experiments.my_experiment

Plan: 1 to add, 0 to change, 1 to delete, 0 unchanged

>>> [CLI] bundle deploy
Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/experiment-basic-[UNIQUE_NAME]/default/files...
Deploying resources...
Updating deployment state...
Deployment complete!

>>> [CLI] experiments get-experiment [NUMID]
{
"name": "/Users/[USERNAME]/new-name-[UNIQUE_NAME]",
"artifact_location": "s3://new-[UNIQUE_NAME]",
"tags": [
{
"key": "k1",
"value": "v1"
},
{
"key": "mlflow.ownerId",
"value": "[USERID]"
},
{
"key": "mlflow.experiment.sourceName",
"value": "/Users/[USERNAME]/new-name-[UNIQUE_NAME]"
},
{
"key": "mlflow.ownerId",
"value": "[USERID]"
},
{
"key": "mlflow.ownerEmail",
"value": "[USERNAME]"
},
{
"key": "mlflow.experimentType",
"value": "MLFLOW_EXPERIMENT"
}
]
}

=== adding a new tag should be a no-op
>>> envsubst

>>> [CLI] bundle plan

>>> [CLI] bundle deploy
Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/experiment-basic-[UNIQUE_NAME]/default/files...
Deploying resources...
Updating deployment state...
Deployment complete!

>>> [CLI] experiments get-experiment [NUMID]
{
"name": "/Users/[USERNAME]/new-name-[UNIQUE_NAME]",
"artifact_location": "s3://new-[UNIQUE_NAME]",
"tags": [
{
"key": "k1",
"value": "v1"
},
{
"key": "mlflow.ownerId",
"value": "[USERID]"
},
{
"key": "mlflow.experiment.sourceName",
"value": "/Users/[USERNAME]/new-name-[UNIQUE_NAME]"
},
{
"key": "mlflow.ownerId",
"value": "[USERID]"
},
{
"key": "mlflow.ownerEmail",
"value": "[USERNAME]"
},
{
"key": "mlflow.experimentType",
"value": "MLFLOW_EXPERIMENT"
}
]
}

>>> [CLI] bundle destroy --auto-approve
The following resources will be deleted:
delete experiment my_experiment

All files and directories at the following location will be deleted: /Workspace/Users/[USERNAME]/.bundle/experiment-basic-[UNIQUE_NAME]/default

Deleting files...
Destroy complete!
37 changes: 37 additions & 0 deletions acceptance/bundle/deploy/experiments/basic/script
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
cleanup() {
trace $CLI bundle destroy --auto-approve
}

trap cleanup EXIT

title "create the experiment"
trace export EXPERIMENT_ARTIFACT_LOCATION="s3://original-${UNIQUE_NAME}"
trace export EXPERIMENT_NAME_PREFIX="original"
trace envsubst < templates/one_tag.tmpl > databricks.yml
trace $CLI bundle plan
trace $CLI bundle deploy
experiment_id=$($CLI bundle summary --output json | jq -r '.resources.experiments.my_experiment.id')
trace $CLI experiments get-experiment $experiment_id | jq '.experiment | {name, artifact_location, tags}'

title "update the name"
trace export EXPERIMENT_NAME_PREFIX="new-name"
trace envsubst < templates/one_tag.tmpl > databricks.yml
trace $CLI bundle plan
trace $CLI bundle deploy
experiment_id=$($CLI bundle summary --output json | jq -r '.resources.experiments.my_experiment.id')
trace $CLI experiments get-experiment $experiment_id | jq '.experiment | {name, artifact_location, tags}'

title "updating the artifact location should cause a recreation"
trace export EXPERIMENT_ARTIFACT_LOCATION="s3://new-${UNIQUE_NAME}"
trace envsubst < templates/one_tag.tmpl > databricks.yml
trace $CLI bundle plan
trace $CLI bundle deploy
experiment_id=$($CLI bundle summary --output json | jq -r '.resources.experiments.my_experiment.id')
trace $CLI experiments get-experiment $experiment_id | jq '.experiment | {name, artifact_location, tags}'

title "adding a new tag should be a no-op"
trace envsubst < templates/two_tag.tmpl > databricks.yml
trace $CLI bundle plan > out.plan.$DATABRICKS_BUNDLE_ENGINE.txt
trace $CLI bundle deploy
experiment_id=$($CLI bundle summary --output json | jq -r '.resources.experiments.my_experiment.id')
trace $CLI experiments get-experiment $experiment_id | jq '.experiment | {name, artifact_location, tags}'
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
bundle:
name: experiment-basic-$UNIQUE_NAME

resources:
experiments:
my_experiment:
artifact_location: $EXPERIMENT_ARTIFACT_LOCATION
name: /Users/${CURRENT_USER_NAME}/${EXPERIMENT_NAME_PREFIX}-${UNIQUE_NAME}
tags:
- key: "k1"
value: "v1"
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
bundle:
name: experiment-basic-$UNIQUE_NAME

resources:
experiments:
my_experiment:
artifact_location: $EXPERIMENT_ARTIFACT_LOCATION
name: /Users/${CURRENT_USER_NAME}/${EXPERIMENT_NAME_PREFIX}-${UNIQUE_NAME}
tags:
- key: "k1"
value: "v1"
- key: "k2"
value: "v2"
10 changes: 10 additions & 0 deletions acceptance/bundle/deploy/experiments/basic/test.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
Cloud = true
Local = true

[[Repls]]
Old = '\d{3,}'
New = "[NUMID]"

# Test both terraform and direct deployment engines
[EnvMatrix]
DATABRICKS_BUNDLE_ENGINE = ["terraform", "direct-exp"]
2 changes: 1 addition & 1 deletion acceptance/bundle/deploy/mlops-stacks/out.test.toml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 0 additions & 2 deletions acceptance/bundle/deploy/mlops-stacks/test.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ Local=false

Badness = "the newly initialized bundle from the 'mlops-stacks' template contains two validation warnings in the configuration"

EnvMatrix.DATABRICKS_BUNDLE_ENGINE = ["terraform"] # uses 'experiments' resource

Ignore = [
"config.json"
]
Expand Down
21 changes: 21 additions & 0 deletions acceptance/bundle/refschema/out.fields.txt
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,27 @@ resources.database_instances.*.state database.DatabaseInstanceState ALL
resources.database_instances.*.stopped bool ALL
resources.database_instances.*.uid string ALL
resources.database_instances.*.url string INPUT
resources.experiments.*.artifact_location string ALL
resources.experiments.*.creation_time int64 REMOTE
resources.experiments.*.experiment_id string REMOTE
resources.experiments.*.id string INPUT
resources.experiments.*.last_update_time int64 REMOTE
resources.experiments.*.lifecycle resources.Lifecycle INPUT
resources.experiments.*.lifecycle.prevent_destroy bool INPUT
resources.experiments.*.lifecycle_stage string REMOTE
resources.experiments.*.modified_status string INPUT
resources.experiments.*.name string ALL
resources.experiments.*.permissions []resources.MlflowExperimentPermission INPUT
resources.experiments.*.permissions[*] resources.MlflowExperimentPermission INPUT
resources.experiments.*.permissions[*].group_name string INPUT
resources.experiments.*.permissions[*].level resources.MlflowExperimentPermissionLevel INPUT
resources.experiments.*.permissions[*].service_principal_name string INPUT
resources.experiments.*.permissions[*].user_name string INPUT
resources.experiments.*.tags []ml.ExperimentTag ALL
resources.experiments.*.tags[*] ml.ExperimentTag ALL
resources.experiments.*.tags[*].key string ALL
resources.experiments.*.tags[*].value string ALL
resources.experiments.*.url string INPUT
resources.jobs.*.budget_policy_id string INPUT STATE
resources.jobs.*.continuous *jobs.Continuous INPUT STATE
resources.jobs.*.continuous.pause_status jobs.PauseStatus INPUT STATE
Expand Down
1 change: 1 addition & 0 deletions bundle/direct/dresources/all.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
var SupportedResources = map[string]any{
"jobs": (*ResourceJob)(nil),
"pipelines": (*ResourcePipeline)(nil),
"experiments": (*ResourceExperiment)(nil),
"schemas": (*ResourceSchema)(nil),
"volumes": (*ResourceVolume)(nil),
"models": (*ResourceMlflowModel)(nil),
Expand Down
12 changes: 12 additions & 0 deletions bundle/direct/dresources/all_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,18 @@ var testConfig map[string]any = map[string]any{
Name: "main.myschema.my_synced_table",
},
},
"experiments": &resources.MlflowExperiment{
CreateExperiment: ml.CreateExperiment{
Name: "my-experiment",
Tags: []ml.ExperimentTag{
{
Key: "my-tag",
Value: "my-value",
},
},
ArtifactLocation: "s3://my-bucket/my-experiment",
},
},
"models": &resources.MlflowModel{
CreateModelRequest: ml.CreateModelRequest{
Name: "my_mlflow_model",
Expand Down
Loading
Loading