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

tfprotov5+tfprotov6: Copy MoveResourceState method into ResourceServer #363

Closed
bflad opened this issue Jan 12, 2024 · 2 comments · Fixed by #388
Closed

tfprotov5+tfprotov6: Copy MoveResourceState method into ResourceServer #363

bflad opened this issue Jan 12, 2024 · 2 comments · Fixed by #388
Assignees
Labels
breaking-change This will impact or improve our compatibility posture enhancement New feature or request
Milestone

Comments

@bflad
Copy link
Contributor

bflad commented Jan 12, 2024

terraform-plugin-go version

v0.21.0 (not yet released)

Description

The upcoming v0.21.0 release will contain the tfprotov5 and tfprotov6 package ResourceServerWithMoveResourceState temporary interface, which contains the MoveResourceState RPC function handler. Rather than immediately requiring all downstream SDK implementations to implement this functionality immediately by requiring MoveResourceState as part of ResourceServer, it seems ideal if we can stagger the releases between introducing and supporting the new MoveResourceState bits then having a followup release that makes the implementation required with the "breaking change" to match the intended design of this Go module to always require all provider implementations to fully implement the protocol.

For provider developers, this type of terraform-plugin-go change previously surfaced as confusing missing method XXX when updating only some dependencies of terraform-plugin-framework, terraform-plugin-mux, terraform-plugin-sdk, or terraform-plugin-testing where terraform-plugin-go required the additional ResourceServer bits, but with the newer setup there can at least be better chance that particular update issue won't occur for them and changelog can reference the minimum SDK versions.

Proposal

Move the MoveResourceState method from ResourceServerWithMoveResourceState to ResourceServer. Remove temporary ResourceServerWithMoveResourceState interface, logic referencing it, and associated error diagnostics when it was missing in the server implementations.

References

@bflad bflad added enhancement New feature or request breaking-change This will impact or improve our compatibility posture labels Jan 12, 2024
@bflad bflad added this to the v0.22.0 milestone Jan 12, 2024
@bflad bflad self-assigned this Jan 12, 2024
bflad added a commit that referenced this issue Jan 12, 2024
Reference: #363

The next version of the plugin protocol (5.5/6.5) includes support for moving resource state. This change introduces the initial implementation of that support including:

- Updated Protocol Buffers definitions
- Re-generated Protocol Buffers Go code
- Initial implementations of `tfprotov5` and `tfprotov6` package abstractions and wiring between those abstractions and the Protocol Buffers generated Go code
- Initial implementations of `tfprotov5/tf5server` and `tfprotov6/tf6server` for the new `MoveResourceState` RPC

This temporarily will not require `ProviderServer` implementations to include `MoveResourceState` implementation, however that change will occur in a subsequent release.
bflad added a commit that referenced this issue Jan 12, 2024
Reference: #362
Reference: #363

The next version of the plugin protocol (5.5/6.5) includes support for moving resource state. This change introduces the initial implementation of that support including:

- Updated Protocol Buffers definitions
- Re-generated Protocol Buffers Go code
- Initial implementations of `tfprotov5` and `tfprotov6` package abstractions and wiring between those abstractions and the Protocol Buffers generated Go code
- Initial implementations of `tfprotov5/tf5server` and `tfprotov6/tf6server` for the new `MoveResourceState` RPC

This temporarily will not require `ProviderServer` implementations to include `MoveResourceState` implementation, however that change will occur in a subsequent release.
bflad added a commit that referenced this issue Jan 17, 2024
Reference: #362
Reference: #363

The next version of the plugin protocol (5.5/6.5) includes support for moving resource state. This change introduces the initial implementation of that support including:

- Updated Protocol Buffers definitions
- Re-generated Protocol Buffers Go code
- Initial implementations of `tfprotov5` and `tfprotov6` package abstractions and wiring between those abstractions and the Protocol Buffers generated Go code
- Initial implementations of `tfprotov5/tf5server` and `tfprotov6/tf6server` for the new `MoveResourceState` RPC

This temporarily will not require `ProviderServer` implementations to include `MoveResourceState` implementation, however that change will occur in a subsequent release.
@bflad bflad modified the milestones: v0.22.0, v0.23.0 Feb 21, 2024
bflad added a commit that referenced this issue Mar 11, 2024
…eResourceState in ResourceServer

Reference: #353
Reference: #363

This removes the temporary handling to smoothly release the new Terraform 1.8 and later RPC handling for provider servers. These changes codify this Go module's desired design that it reflects the protocol via its required implementations.
@bflad
Copy link
Contributor Author

bflad commented Mar 12, 2024

Per #388 (comment), this issue is going to be changed into just copying the MoveResourceState method into the ResourceServer interface and a separate issue created for the actual ResourceServerWithMoveResourceState interface removal.

@bflad bflad changed the title tfprotov5+tfprotov6: Move MoveResourceState method into ResourceServer tfprotov5+tfprotov6: Copy MoveResourceState method into ResourceServer Mar 12, 2024
bflad added a commit that referenced this issue Apr 22, 2024
…eResourceState in ResourceServer (#388)

Reference: #353
Reference: #363

This removes the temporary handling to smoothly release the new Terraform 1.8 and later RPC handling for provider servers. These changes codify this Go module's desired design that it reflects the protocol via its required implementations.
Copy link

I'm going to lock this issue because it has been closed for 30 days ⏳. This helps our maintainers find and focus on the active issues.
If you have found a problem that seems similar to this, please open a new issue and complete the issue template so we can capture all the details necessary to investigate further.

@github-actions github-actions bot locked as resolved and limited conversation to collaborators May 23, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
breaking-change This will impact or improve our compatibility posture enhancement New feature or request
Projects
None yet
1 participant