databricks-cli/internal/bundle
shreyas-goenka 2847533e1e
Add DABs support for Unity Catalog volumes (#1762)
## Changes

This PR adds support for UC volumes to DABs.

### Can I use a UC volume managed by DABs in `artifact_path`?

Yes, but we require the volume to exist before being referenced in
`artifact_path`. Otherwise you'll see an error that the volume does not
exist. For this case, this PR also adds a warning if we detect that the
UC volume is defined in the DAB itself, which informs the user to deploy
the UC volume in a separate deployment first before using it in
`artifact_path`.

We cannot create the UC volume and then upload the artifacts to it in
the same `bundle deploy` because `bundle deploy` always uploads the
artifacts to `artifact_path` before materializing any resources defined
in the bundle. Supporting this in a single deployment requires us to
migrate away from our dependency on the Databricks Terraform provider to
manage the CRUD lifecycle of DABs resources.

### Why do we not support `preset.name_prefix` for UC volumes?

UC volumes will not have a `dev_shreyas_goenka` prefix added in `mode:
development`. Configuring `presets.name_prefix` will be a no-op for UC
volumes. We have decided not to support prefixing for UC resources. This
is because:
1. UC provides its own namespace hierarchy that is independent of DABs.
2. Users can always manually use `${workspace.current_user.short_name}`
to configure the prefixes manually.

Customers often manually set up a UC hierarchy for dev and prod,
including a schema or catalog per developer. Thus, it's often
unnecessary for us to add prefixing in `mode: development` by default
for UC resources.

In retrospect, supporting prefixing for UC schemas and registered models
was a mistake and will be removed in a future release of DABs.

## Tests
Unit, integration test, and manually. 

### Manual Testing cases:
 1. UC volume does not exist:
```
➜  bundle-playground git:(master) ✗ cli bundle deploy
Error: failed to fetch metadata for the UC volume /Volumes/main/caps/my_volume that is configured in the artifact_path: Not Found
```

2. UC Volume does not exist, but is defined in the DAB
```
➜  bundle-playground git:(master) ✗ cli bundle deploy
Error: failed to fetch metadata for the UC volume /Volumes/main/caps/managed_by_dab that is configured in the artifact_path: Not Found

Warning: You might be using a UC volume in your artifact_path that is managed by this bundle but which has not been deployed yet. Please deploy the UC volume in a separate bundle deploy before using it in the artifact_path.
  at resources.volumes.bar
  in databricks.yml:24:7

```

---------

Co-authored-by: Pieter Noordhuis <pieter.noordhuis@databricks.com>
2024-12-02 21:18:07 +00:00
..
bundles Add DABs support for Unity Catalog volumes (#1762) 2024-12-02 21:18:07 +00:00
artifacts_test.go Add DABs support for Unity Catalog volumes (#1762) 2024-12-02 21:18:07 +00:00
basic_test.go Update Spark version in integration tests to 13.3 (#1375) 2024-04-19 11:31:54 +00:00
bind_resource_test.go Update filenames used by bundle generate to use `.<resource-type>.yml` (#1901) 2024-11-20 13:53:25 +01:00
clusters_test.go Added support for creating all-purpose clusters (#1698) 2024-09-23 10:42:34 +00:00
dashboards_test.go Bump github.com/databricks/databricks-sdk-go from 0.49.0 to 0.51.0 (#1878) 2024-11-13 13:40:53 +00:00
deploy_test.go Add DABs support for Unity Catalog volumes (#1762) 2024-12-02 21:18:07 +00:00
deploy_then_remove_resources_test.go Don't merge-in remote resources during depolyments (#1432) 2024-05-15 12:41:44 +00:00
deploy_to_shared_test.go Added integration test to deploy bundle to /Shared root path (#1914) 2024-11-20 12:20:39 +00:00
deployment_state_test.go Added deployment state for bundles (#1267) 2024-03-18 14:41:58 +00:00
destroy_test.go Fix bundle destroy integration test (#1435) 2024-05-16 09:32:55 +00:00
empty_bundle_test.go Use `acc.WorkspaceTest` helper from bundle integration tests (#1181) 2024-02-07 11:18:56 +00:00
environments_test.go Added support for job environments (#1379) 2024-04-22 11:44:34 +00:00
generate_job_test.go Generate correct YAML if custom_tags or spark_conf is used for pipeline or job cluster configuration (#1210) 2024-02-15 15:03:19 +00:00
generate_pipeline_test.go Generate correct YAML if custom_tags or spark_conf is used for pipeline or job cluster configuration (#1210) 2024-02-15 15:03:19 +00:00
helpers.go Fix template initialization when running on Databricks (#1912) 2024-11-20 11:42:23 +00:00
job_metadata_test.go Update Spark version in integration tests to 13.3 (#1375) 2024-04-19 11:31:54 +00:00
local_state_staleness_test.go Update Spark version in integration tests to 13.3 (#1375) 2024-04-19 11:31:54 +00:00
python_wheel_test.go Added E2E test to run Python wheels on interactive cluster created in bundle (#1864) 2024-11-01 14:22:47 +00:00
spark_jar_test.go Run Spark JAR task test on multiple DBR versions (#1665) 2024-08-09 15:13:31 +00:00
validate_test.go Serialize dynamic value for `bundle validate` output (#1499) 2024-06-18 15:04:20 +00:00