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

[Internal] Add ConvertToAttribute() to convert blocks in a resource/data source schema to attributes #4284

Merged
merged 8 commits into from
Dec 5, 2024

Conversation

mgyucht
Copy link
Contributor

@mgyucht mgyucht commented Dec 2, 2024

Changes

Blocks in the Plugin Framework cannot be computed. Terraform checks that the number of blocks in the plan matches the number in the config (https://github.com/hashicorp/terraform/blob/81441564dd29b4aa5fb9576323ef90b9787d1967/internal/plans/objchange/plan_valid.go#L115). Today, for compatibility with existing resources in the TF provider implemented with the SDKv2, we treat nested structures as lists with a single element. As a result, this precludes any nested structures from being read-only (since those would be converted into ListNestedBlocks, which cannot be computed). This blocks databricks_app from being implemented on the plugin framework, as its app_status and compute_status fields
are objects and not primitives. Note that TF recommends computing computed-only blocks to attributes here. Other useful discussions can be found here and here. The migration guide for blocks can be found here.

As an intermediate step, we add ConvertToAttribute() in CustomizableSchema. This allows resource maintainers to convert specific, known read-only blocks to attributes in accordance with the migration guide, which then can be marked as read-only.

As blocks can contain other blocks, this method also recursively converts nested blocks into nested attributes.

This is based on #4283, so we should wait for that PR to merge & rebase this before merging this.

Tests

Unit tests validate that ListNestedBlocks are converted to ListNestedAttributes and that SingleNestedBlocks are converted to SingleNestedAttributes.

@mgyucht mgyucht requested review from a team as code owners December 2, 2024 09:15
@mgyucht mgyucht requested review from renaudhartert-db and removed request for a team December 2, 2024 09:16
@mgyucht mgyucht temporarily deployed to test-trigger-is December 2, 2024 09:16 — with GitHub Actions Inactive
@mgyucht mgyucht temporarily deployed to test-trigger-is December 2, 2024 09:16 — with GitHub Actions Inactive
# Conflicts:
#	internal/providers/pluginfw/tfschema/attribute_builder.go
#	internal/providers/pluginfw/tfschema/customizable_schema_test.go
@mgyucht mgyucht temporarily deployed to test-trigger-is December 3, 2024 10:07 — with GitHub Actions Inactive
@mgyucht mgyucht temporarily deployed to test-trigger-is December 3, 2024 10:08 — with GitHub Actions Inactive
@mgyucht mgyucht changed the title [WIP][Internal] Add ConvertToAttribute() to convert blocks in a resource/data source schema to attributes [Internal] Add ConvertToAttribute() to convert blocks in a resource/data source schema to attributes Dec 3, 2024
// navigateSchemaWithCallback navigates through schema attributes and executes callback on the target, panics if path does not exist or invalid.
func navigateSchemaWithCallback(s *BaseSchemaBuilder, cb func(BaseSchemaBuilder) BaseSchemaBuilder, path ...string) (BaseSchemaBuilder, error) {
func navigateSchemaWithCallback(s *BaseSchemaBuilder, cb func(BaseSchemaBuilder) BaseSchemaBuilder, path ...string) {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changed this to not return anything to make it clear that it is updating a mutable BaseSchemaBuilder.

@mgyucht mgyucht temporarily deployed to test-trigger-is December 3, 2024 13:32 — with GitHub Actions Inactive
Copy link

github-actions bot commented Dec 3, 2024

If integration tests don't run automatically, an authorized user can run them manually by following the instructions below:

Trigger:
go/deco-tests-run/terraform

Inputs:

  • PR number: 4284
  • Commit SHA: 5fa8a83d90a7fd607742d9d4e5136bb16f2e4b32

Checks will be approved automatically on success.

@mgyucht mgyucht temporarily deployed to test-trigger-is December 3, 2024 13:33 — with GitHub Actions Inactive
@eng-dev-ecosystem-bot
Copy link
Collaborator

Test Details: go/deco-tests/12157952686

@mgyucht mgyucht added this pull request to the merge queue Dec 5, 2024
Merged via the queue into main with commit cc49ffd Dec 5, 2024
12 checks passed
@mgyucht mgyucht deleted the add-convert-to-attribute branch December 5, 2024 08:19
tanmay-db added a commit that referenced this pull request Dec 10, 2024
### New Features and Improvements

 * Add `databricks_credential` resource ([#4219](#4219)).
 * Allow to filter jobs by name in `databricks_jobs` data source ([#3395](#3395)).

### Bug Fixes

 * Add client side validation for `volume_type` ([#4289](#4289)).
 * Add missing H2 header in `mws_network_connectivity_configs.md` and optimization in `data_mws_network_connectivity_configs` ([#4256](#4256)).
 * Forced send `auto_stop_mins` for `databricks_sql_endpoint` resource ([#4265](#4265)).
 * Handle deleted cluster gracefully ([#4280](#4280)).
 * Remove config drift if Azure SP is used in `databricks_credential` ([#4294](#4294)).
 * Use correct domain for Azure Gov and China ([#4274](#4274)).
 * don't start cluster if `warehouse_id` is specified for `databricks_sql_table` resource ([#4259](#4259)).

### Documentation

 * Document import support for `databricks_notification_destination` ([#4276](#4276)).
 * Update documentation for importing some MWS resources ([#4281](#4281)).
 * Update mws_log_delivery.md to add time_sleep ([#4258](#4258)).

### Internal Changes

 * Add ConvertToAttribute() to convert blocks in a resource/data source schema to attributes ([#4284](#4284)).
 * Bump Go SDK and generate TF structs ([#4300](#4300)).
 * Generate effective fields based of isServiceProposedIfEmpty ([#4282](#4282)).
 * Ignore Databricks Go SDK updates by dependabot ([#4253](#4253)).
 * Move TFSDK model template to universe ([#4303](#4303)).
 * Remove unused configuration from blocks ([#4283](#4283)).
 * Use isServiceProposedIfEmpty annotations for effective fields ([#4270](#4270)).
 * Use tf_v1 genkit mode ([#4278](#4278)).

### Dependency Updates

 * Bump github.com/stretchr/testify from 1.9.0 to 1.10.0 ([#4269](#4269)).
 * Bump github.com/zclconf/go-cty from 1.15.0 to 1.15.1 ([#4273](#4273)).

### Exporter

 * Fix generation of references to users for user directories ([#4297](#4297)).
 * better handling of online tables/vsis in listing ([#4288](#4288)).
github-merge-queue bot pushed a commit that referenced this pull request Dec 10, 2024
### New Features and Improvements

* Add `databricks_credential` resource
([#4219](#4219)).
* Allow to filter jobs by name in `databricks_jobs` data source
([#3395](#3395)).


### Bug Fixes

* Add client side validation for `volume_type`
([#4289](#4289)).
* Add missing H2 header in `mws_network_connectivity_configs.md` and
optimization in `data_mws_network_connectivity_configs`
([#4256](#4256)).
* Forced send `auto_stop_mins` for `databricks_sql_endpoint` resource
([#4265](#4265)).
* Handle deleted cluster gracefully
([#4280](#4280)).
* Remove config drift if Azure SP is used in `databricks_credential`
([#4294](#4294)).
* Use correct domain for Azure Gov and China
([#4274](#4274)).
* don't start cluster if `warehouse_id` is specified for
`databricks_sql_table` resource
([#4259](#4259)).


### Documentation

* Document import support for `databricks_notification_destination`
([#4276](#4276)).
* Update documentation for importing some MWS resources
([#4281](#4281)).
* Update mws_log_delivery.md to add time_sleep
([#4258](#4258)).


### Internal Changes

* Add ConvertToAttribute() to convert blocks in a resource/data source
schema to attributes
([#4284](#4284)).
* Bump Go SDK and generate TF structs
([#4300](#4300)).
* Generate effective fields based of isServiceProposedIfEmpty
([#4282](#4282)).
* Ignore Databricks Go SDK updates by dependabot
([#4253](#4253)).
* Move TFSDK model template to universe
([#4303](#4303)).
* Remove unused configuration from blocks
([#4283](#4283)).
* Use isServiceProposedIfEmpty annotations for effective fields
([#4270](#4270)).
* Use tf_v1 genkit mode
([#4278](#4278)).


### Dependency Updates

* Bump github.com/stretchr/testify from 1.9.0 to 1.10.0
([#4269](#4269)).
* Bump github.com/zclconf/go-cty from 1.15.0 to 1.15.1
([#4273](#4273)).


### Exporter

* Fix generation of references to users for user directories
([#4297](#4297)).
* better handling of online tables/vsis in listing
([#4288](#4288)).
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.

3 participants