Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use local Terraform state only when lineage match #1588

Merged
merged 15 commits into from
Jul 18, 2024
Merged

Conversation

shreyas-goenka
Copy link
Contributor

@shreyas-goenka shreyas-goenka commented Jul 10, 2024

Changes

DABs deployments should be isolated if root_path and workspace host are different. This PR fixes a bug where local terraform state gets piggybacked if the same cwd is used to deploy two isolated deployments for the same bundle target. This can happen if:

  1. A user switches to a different identity on the same machine.
  2. The workspace host URL the bundle/target points to is changed.
  3. A user changes the root_path while doing bundle development.

To solve this problem we rely on the lineage field available in the terraform state, which is a uuid identifying unique terraform deployments. There's a 1:1 mapping between a terraform deployment and a bundle deployment.

For more details on how lineage works in terraform, see: https://developer.hashicorp.com/terraform/language/state/backends#manual-state-pull-push

Tests

Manually verified that changing the identity no longer results in the incorrect terraform state being used. Also, new unit tests are added.

@shreyas-goenka
Copy link
Contributor Author

shreyas-goenka commented Jul 10, 2024

Integration tests are passing.

@shreyas-goenka shreyas-goenka marked this pull request as ready for review July 10, 2024 17:44
@shreyas-goenka shreyas-goenka changed the title Invalidate local terraform state only when lineage match Use local terraform state only when lineage match Jul 10, 2024
@pietern pietern changed the title Use local terraform state only when lineage match Use local Terraform state only when lineage match Jul 15, 2024
bundle/deploy/terraform/state_pull.go Outdated Show resolved Hide resolved
bundle/deploy/terraform/state_pull.go Outdated Show resolved Hide resolved
bundle/deploy/terraform/state_pull.go Show resolved Hide resolved
bundle/deploy/terraform/state_pull_test.go Show resolved Hide resolved
bundle/deploy/terraform/state_pull.go Outdated Show resolved Hide resolved
bundle/deploy/terraform/state_pull.go Outdated Show resolved Hide resolved
bundle/deploy/terraform/state_pull.go Outdated Show resolved Hide resolved
bundle/deploy/terraform/state_pull.go Outdated Show resolved Hide resolved
@shreyas-goenka shreyas-goenka added this pull request to the merge queue Jul 18, 2024
Merged via the queue into main with commit 5b65358 Jul 18, 2024
5 checks passed
@shreyas-goenka shreyas-goenka deleted the fix/tf-lineage branch July 18, 2024 09:52
andrewnester added a commit that referenced this pull request Jul 18, 2024
CLI:
 * [Fix] Do not buffer files in memory when downloading ([#1599](#1599)).

Bundles:
 * Allow artifacts (JARs, wheels) to be uploaded to UC Volumes ([#1591](#1591)).
 * Upgrade TF provider to 1.48.3 ([#1600](#1600)).
 * Fixed job name normalisation for bundle generate ([#1601](#1601)).

Internal:
 * Add UUID to uniquely identify a deployment state ([#1595](#1595)).
 * Track multiple locations associated with a `dyn.Value` ([#1510](#1510)).
 * Attribute Terraform API requests the CLI ([#1598](#1598)).
 * Use local Terraform state only when lineage match ([#1588](#1588)).
 * Implement readahead cache for Workspace API calls ([#1582](#1582)).

Dependency updates:
 * Bump github.com/databricks/databricks-sdk-go from 0.43.0 to 0.43.2 ([#1594](#1594)).
@andrewnester andrewnester mentioned this pull request Jul 18, 2024
andrewnester added a commit that referenced this pull request Jul 18, 2024
CLI:
 * Do not buffer files in memory when downloading ([#1599](#1599)).

Bundles:
 * Allow artifacts (JARs, wheels) to be uploaded to UC Volumes ([#1591](#1591)).
 * Upgrade TF provider to 1.48.3 ([#1600](#1600)).
 * Fixed job name normalisation for bundle generate ([#1601](#1601)).

Internal:
 * Add UUID to uniquely identify a deployment state ([#1595](#1595)).
 * Track multiple locations associated with a `dyn.Value` ([#1510](#1510)).
 * Attribute Terraform API requests the CLI ([#1598](#1598)).
 * Implement readahead cache for Workspace API calls ([#1582](#1582)).
 * Use local Terraform state only when lineage match ([#1588](#1588)).

Dependency updates:
 * Bump github.com/databricks/databricks-sdk-go from 0.43.0 to 0.43.2 ([#1594](#1594)).
@andrewnester andrewnester mentioned this pull request Jul 18, 2024
github-merge-queue bot pushed a commit that referenced this pull request Jul 18, 2024
CLI:
* Do not buffer files in memory when downloading
([#1599](#1599)).

Bundles:
* Allow artifacts (JARs, wheels) to be uploaded to UC Volumes
([#1591](#1591)).
* Upgrade TF provider to 1.48.3
([#1600](#1600)).
* Fixed job name normalisation for bundle generate
([#1601](#1601)).

Internal:
* Add UUID to uniquely identify a deployment state
([#1595](#1595)).
* Track multiple locations associated with a `dyn.Value`
([#1510](#1510)).
* Attribute Terraform API requests the CLI
([#1598](#1598)).
* Implement readahead cache for Workspace API calls
([#1582](#1582)).
* Use local Terraform state only when lineage match
([#1588](#1588)).
* Add read-only mode for extension aware workspace filer
([#1609](#1609)).


Dependency updates:
* Bump github.com/databricks/databricks-sdk-go from 0.43.0 to 0.43.2
([#1594](#1594)).
witi83 pushed a commit to witi83/databricks-cli that referenced this pull request Jul 29, 2024
## Changes
DABs deployments should be isolated if `root_path` and workspace host
are different. This PR fixes a bug where local terraform state gets
piggybacked if the same cwd is used to deploy two isolated deployments
for the same bundle target. This can happen if:
1. A user switches to a different identity on the same machine. 
2. The workspace host URL the bundle/target points to is changed.
3. A user changes the `root_path` while doing bundle development.

To solve this problem we rely on the lineage field available in the
terraform state, which is a uuid identifying unique terraform
deployments. There's a 1:1 mapping between a terraform deployment and a
bundle deployment.

For more details on how lineage works in terraform, see:
https://developer.hashicorp.com/terraform/language/state/backends#manual-state-pull-push

## Tests
Manually verified that changing the identity no longer results in the
incorrect terraform state being used. Also, new unit tests are added.
witi83 pushed a commit to witi83/databricks-cli that referenced this pull request Jul 29, 2024
CLI:
* Do not buffer files in memory when downloading
([databricks#1599](databricks#1599)).

Bundles:
* Allow artifacts (JARs, wheels) to be uploaded to UC Volumes
([databricks#1591](databricks#1591)).
* Upgrade TF provider to 1.48.3
([databricks#1600](databricks#1600)).
* Fixed job name normalisation for bundle generate
([databricks#1601](databricks#1601)).

Internal:
* Add UUID to uniquely identify a deployment state
([databricks#1595](databricks#1595)).
* Track multiple locations associated with a `dyn.Value`
([databricks#1510](databricks#1510)).
* Attribute Terraform API requests the CLI
([databricks#1598](databricks#1598)).
* Implement readahead cache for Workspace API calls
([databricks#1582](databricks#1582)).
* Use local Terraform state only when lineage match
([databricks#1588](databricks#1588)).
* Add read-only mode for extension aware workspace filer
([databricks#1609](databricks#1609)).


Dependency updates:
* Bump github.com/databricks/databricks-sdk-go from 0.43.0 to 0.43.2
([databricks#1594](databricks#1594)).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants