-
Notifications
You must be signed in to change notification settings - Fork 94
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
tfsdk: Initial ResourceWithUpgradeState implementation #292
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
bflad
added
enhancement
New feature or request
sdkv2-parity
Issues tracking feature parity with terraform-plugin-sdk v2 and PRs working towards it.
labels
Apr 18, 2022
bflad
added a commit
that referenced
this pull request
Apr 18, 2022
detro
reviewed
Apr 19, 2022
Reference: #42 Reference: #228 Support provider defined `UpgradeResourceState` RPC handling, by introducing an optional `ResourceWithUpgradeState` interface type, with an `UpgradeState` method. Each underlying state version upgrade implementation is expected to consume the prior state, perform any necessary data manipulations, then respond with the upgraded state. This framework implementation differs from the terraform-plugin-sdk implementation: - State upgraders are specified via a mapping, rather than a slice with underlying version field. This should prevent certain classes of coding issues. - State upgraders must be wholly contained from the prior state version to the current schema version. The framework does not loop through each successive version because attempting to recreate the `tfprotov6.RawState` for each intermediate version request would be very problematic. For example, terraform-plugin-go does not implement functionality for marshalling a `RawState`. Provider developers can use their own coding techniques to reduce code duplications when multiple versions need the same logic. - Specifying the full prior schema is now an optional implementation detail. Working with the lower level data types is more challenging, however this has been a repeated feature request. There are some quirks and potential future enhancements to the framework `UpgradeResourceState` handling: - Past and current versions Terraform CLI will call `UpgradeResourceState` even if the state version matches the current schema version. This implementation keeps the framework's prior logic to roundtrip the existing state into the upgraded state. It may be possible to stop this Terraform CLI behavior with protocol version 6, although the logic would need to remain for backwards compatibility. - It may be possible to help provider developers simplify logic by attempting to automatically populate compatible parts of the upgraded state from the prior state. This can potentially be done at a later time.
bflad
force-pushed
the
bflad-UpgradeResourceState
branch
from
April 19, 2022 14:16
8121366
to
58c7313
Compare
detro
approved these changes
Apr 20, 2022
bflad
added a commit
to hashicorp/terraform-website
that referenced
this pull request
Apr 21, 2022
bflad
added a commit
to hashicorp/terraform-website
that referenced
this pull request
Apr 21, 2022
13 tasks
Associated terraform.io update: hashicorp/terraform-website#2255 |
bflad
added a commit
to hashicorp/terraform-website
that referenced
this pull request
Apr 28, 2022
thiskevinwang
pushed a commit
to hashicorp/terraform-docs-common
that referenced
this pull request
Apr 29, 2022
thiskevinwang
pushed a commit
to hashicorp/terraform-docs-common
that referenced
this pull request
Apr 29, 2022
Reference: hashicorp/terraform-plugin-framework#42 Reference: hashicorp/terraform-plugin-framework#292 git mv file
I'm going to lock this pull request because it has been closed for 30 days ⏳. This helps our maintainers find and focus on the active contributions. |
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Labels
enhancement
New feature or request
sdkv2-parity
Issues tracking feature parity with terraform-plugin-sdk v2 and PRs working towards it.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Closes #42
Reference: #228
Support provider defined
UpgradeResourceState
RPC handling, by introducing an optionalResourceWithUpgradeState
interface type, with anUpgradeState
method. Each underlying state version upgrade implementation is expected to consume the prior state, perform any necessary data manipulations, then respond with the upgraded state.This framework implementation differs from the terraform-plugin-sdk implementation:
tfprotov6.RawState
for each intermediate version request would be very problematic. For example, terraform-plugin-go does not implement functionality for marshalling aRawState
. Provider developers can use their own coding techniques to reduce code duplications when multiple versions need the same logic.There are some quirks and potential future enhancements to the framework
UpgradeResourceState
handling:UpgradeResourceState
even if the state version matches the current schema version. This implementation keeps the framework's prior logic to roundtrip the existing state into the upgraded state. It may be possible to stop this Terraform CLI behavior with protocol version 6, although the logic would need to remain for backwards compatibility.