hashicorp / terraform-plugin-go

A low-level Go binding for the Terraform protocol for integrations to be built on top of.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

tfprotov5+tfprotov6: Copy MoveResourceState method into ResourceServer

bflad opened this issue · comments

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

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.

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.