databricks-cli/bundle/tests
Pieter Noordhuis 87dd46a3f8
Use dynamic configuration model in bundles (#1098)
## Changes

This is a fundamental change to how we load and process bundle
configuration. We now depend on the configuration being represented as a
`dyn.Value`. This representation is functionally equivalent to Go's
`any` (it is variadic) and allows us to capture metadata associated with
a value, such as where it was defined (e.g. file, line, and column). It
also allows us to represent Go's zero values properly (e.g. empty
string, integer equal to 0, or boolean false).

Using this representation allows us to let the configuration model
deviate from the typed structure we have been relying on so far
(`config.Root`). We need to deviate from these types when using
variables for fields that are not a string themselves. For example,
using `${var.num_workers}` for an integer `workers` field was impossible
until now (though not implemented in this change).

The loader for a `dyn.Value` includes functionality to capture any and
all type mismatches between the user-defined configuration and the
expected types. These mismatches can be surfaced as validation errors in
future PRs.

Given that many mutators expect the typed struct to be the source of
truth, this change converts between the dynamic representation and the
typed representation on mutator entry and exit. Existing mutators can
continue to modify the typed representation and these modifications are
reflected in the dynamic representation (see `MarkMutatorEntry` and
`MarkMutatorExit` in `bundle/config/root.go`).

Required changes included in this change:
* The existing interpolation package is removed in favor of
`libs/dyn/dynvar`.
* Functionality to merge job clusters, job tasks, and pipeline clusters
are now all broken out into their own mutators.

To be implemented later:
* Allow variable references for non-string types.
* Surface diagnostics about the configuration provided by the user in
the validation output.
* Some mutators use a resource's configuration file path to resolve
related relative paths. These depend on `bundle/config/paths.Path` being
set and populated through `ConfigureConfigFilePath`. Instead, they
should interact with the dynamically typed configuration directly. Doing
this also unlocks being able to differentiate different base paths used
within a job (e.g. a task override with a relative path defined in a
directory other than the base job).

## Tests

* Existing unit tests pass (some have been modified to accommodate)
* Integration tests pass
2024-02-16 19:41:58 +00:00
..
autoload_git Renamed `environments` to `targets` in bundle configuration (#670) 2023-08-17 15:22:32 +00:00
basic First look for databricks.yml before falling back to bundle.yml (#580) 2023-07-18 12:16:34 +02:00
bundle Use dynamic configuration model in bundles (#1098) 2024-02-16 19:41:58 +00:00
bundle_permissions Added support for top-level permissions (#928) 2023-11-13 11:29:40 +00:00
conflicting_resource_ids Require include glob patterns to be explicitly defined (#602) 2023-07-25 10:00:46 +02:00
environment_overrides Use dynamic configuration model in bundles (#1098) 2024-02-16 19:41:58 +00:00
environments_autoload_git Renamed `environments` to `targets` in bundle configuration (#670) 2023-08-17 15:22:32 +00:00
environments_job_and_pipeline Renamed `environments` to `targets` in bundle configuration (#670) 2023-08-17 15:22:32 +00:00
environments_override_job_cluster Renamed `environments` to `targets` in bundle configuration (#670) 2023-08-17 15:22:32 +00:00
git_branch_validation Fix bundle git branch validation (#645) 2023-08-07 17:29:02 +00:00
include_default Require include glob patterns to be explicitly defined (#602) 2023-07-25 10:00:46 +02:00
include_invalid First look for databricks.yml before falling back to bundle.yml (#580) 2023-07-18 12:16:34 +02:00
include_multiple Require include glob patterns to be explicitly defined (#602) 2023-07-25 10:00:46 +02:00
include_with_glob First look for databricks.yml before falling back to bundle.yml (#580) 2023-07-18 12:16:34 +02:00
interpolation First look for databricks.yml before falling back to bundle.yml (#580) 2023-07-18 12:16:34 +02:00
interpolation_target Renamed `environments` to `targets` in bundle configuration (#670) 2023-08-17 15:22:32 +00:00
job_and_pipeline Renamed `environments` to `targets` in bundle configuration (#670) 2023-08-17 15:22:32 +00:00
job_with_spark_conf Test existing behavior when loading non-string spark conf values (#1071) 2023-12-18 11:22:22 +00:00
model_serving_endpoint Support Model Serving Endpoints in bundles (#682) 2023-09-07 21:54:31 +00:00
override_job_cluster Renamed `environments` to `targets` in bundle configuration (#670) 2023-08-17 15:22:32 +00:00
override_job_tasks Enable environment overrides for job tasks (#779) 2023-09-18 14:13:50 +00:00
override_pipeline_cluster Enable target overrides for pipeline clusters (#792) 2023-09-21 19:21:20 +00:00
override_sync Allow target overrides for sync section (#856) 2023-10-10 15:18:18 +00:00
override_sync_no_root Allow target overrides for sync section (#856) 2023-10-10 15:18:18 +00:00
registered_model Support Unity Catalog Registered Models in bundles (#846) 2023-10-16 15:32:49 +00:00
relative_path_with_includes Make resource and artifact paths in bundle config relative to config folder (#708) 2023-09-04 09:55:01 +00:00
run_as Use dynamic configuration model in bundles (#1098) 2024-02-16 19:41:58 +00:00
target_empty Renamed `environments` to `targets` in bundle configuration (#670) 2023-08-17 15:22:32 +00:00
target_overrides Renamed `environments` to `targets` in bundle configuration (#670) 2023-08-17 15:22:32 +00:00
variables Fixed instance pool resolving by name (#1102) 2024-01-05 10:50:53 +00:00
yaml_anchors First look for databricks.yml before falling back to bundle.yml (#580) 2023-07-18 12:16:34 +02:00
README.md Move mutator interface to top level bundle package (#105) 2022-11-28 10:59:43 +01:00
basic_test.go Move mutator interface to top level bundle package (#105) 2022-11-28 10:59:43 +01:00
bundle_permissions_test.go Added support for top-level permissions (#928) 2023-11-13 11:29:40 +00:00
conflicting_resource_ids_test.go Log the bundle root configuration file if applicable (#657) 2023-08-11 12:28:05 +00:00
environment_git_test.go Renamed `environments` to `targets` in bundle configuration (#670) 2023-08-17 15:22:32 +00:00
environment_overrides_test.go Use dynamic configuration model in bundles (#1098) 2024-02-16 19:41:58 +00:00
environments_job_and_pipeline_test.go Renamed `environments` to `targets` in bundle configuration (#670) 2023-08-17 15:22:32 +00:00
environments_override_job_cluster_test.go Renamed `environments` to `targets` in bundle configuration (#670) 2023-08-17 15:22:32 +00:00
git_test.go Renamed `environments` to `targets` in bundle configuration (#670) 2023-08-17 15:22:32 +00:00
include_test.go Log the bundle root configuration file if applicable (#657) 2023-08-11 12:28:05 +00:00
interpolation_test.go Use dynamic configuration model in bundles (#1098) 2024-02-16 19:41:58 +00:00
job_and_pipeline_test.go Renamed `environments` to `targets` in bundle configuration (#670) 2023-08-17 15:22:32 +00:00
job_with_spark_conf_test.go Use dynamic configuration model in bundles (#1098) 2024-02-16 19:41:58 +00:00
loader.go Use dynamic configuration model in bundles (#1098) 2024-02-16 19:41:58 +00:00
model_serving_endpoint_test.go Support Model Serving Endpoints in bundles (#682) 2023-09-07 21:54:31 +00:00
override_job_cluster_test.go Renamed `environments` to `targets` in bundle configuration (#670) 2023-08-17 15:22:32 +00:00
override_job_tasks_test.go Enable environment overrides for job tasks (#779) 2023-09-18 14:13:50 +00:00
override_pipeline_cluster_test.go Enable target overrides for pipeline clusters (#792) 2023-09-21 19:21:20 +00:00
override_sync_test.go Use dynamic configuration model in bundles (#1098) 2024-02-16 19:41:58 +00:00
registered_model_test.go Support Unity Catalog Registered Models in bundles (#846) 2023-10-16 15:32:49 +00:00
relative_path_with_includes_test.go Use dynamic configuration model in bundles (#1098) 2024-02-16 19:41:58 +00:00
run_as_test.go Use dynamic configuration model in bundles (#1098) 2024-02-16 19:41:58 +00:00
suggest_target_test.go List available targets when incorrect target passed (#756) 2023-09-08 15:37:55 +00:00
target_empty_test.go Renamed `environments` to `targets` in bundle configuration (#670) 2023-08-17 15:22:32 +00:00
target_overrides_test.go Renamed `environments` to `targets` in bundle configuration (#670) 2023-08-17 15:22:32 +00:00
variables_test.go Use dynamic configuration model in bundles (#1098) 2024-02-16 19:41:58 +00:00
yaml_anchors_test.go Revert "Rename jobs -> workflows" (#118) 2022-12-01 22:39:15 +01:00

README.md

Bundle configuration tests

Every test here uses an example bundle configuration. Each bundle configuration is located in a dedicated subdirectory.