hashicorp / terraform-plugin-go

A low-level Go binding for the Terraform protocol for integrations to be built on top of.
Mozilla Public License 2.0
128 stars 33 forks source link

tfprotov5+tfprotov6: Require FunctionServer in ProviderServer and MoveResourceState in ResourceServer #388

Closed bflad closed 6 months ago

bflad commented 7 months ago

Closes #353 Closes #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 commented 7 months ago

Submitted https://github.com/hashicorp/terraform-provider-corner/pull/223 to make CI happier 😄

bflad commented 7 months ago

Looks like this will need to be done over two releases because terraform-plugin-mux required calling MoveResourceState, which required directly referencing the temporary ResourceServerWithMoveResourceState interface. This PR will be updated to contain MoveResourceState method in both interfaces, then we can remove ResourceServerWithMoveResourceState later.

Maybe it can be a takeaway for future prerelease RPCs to only implement them in mux if absolutely necessary. The problem is that hashicorp/aws and other large providers tend to be a target for those features and use mux. We could consider whether mux should still remain a separate Go module, instead moving all those packages under the scope of this Go module. Mux is stable enough, low level enough, and also allows breaking changes. We would just need to sort out with the web platform team the website documentation since it references the terraform-plugin-mux repository directly.

bflad commented 7 months ago

Updated this PR to reinstate ResourceServerWithMoveResourceServer a little longer. Created https://github.com/hashicorp/terraform-plugin-go/issues/389 for eventual followup once this is released and terraform-plugin-mux is upgraded and released.

bflad commented 6 months ago

Given this functionality is now GA in Terraform 1.8 and the interfaces have been out for a month+, going to update and merge this for release at any time.

github-actions[bot] commented 5 months ago

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. If you have found a problem that seems related to this change, please open a new issue and complete the issue template so we can capture all the details necessary to investigate further.