Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
tfsdk: Introduce new ProviderServer functions, deprecate existing (#294)
Reference: #22 Provider developers have a few reasons to directly need a tfprotov6.ProviderServer implementation: - When implementing acceptance testing with terraform-plugin-sdk helper/resource. - When using terraform-plugin-mux tf6muxserver.NewMuxServer(). - When using terraform-plugin-mux tf6to5server.DowngradeServer(). The current `NewProtocol6Server(Provider)` function enables these use cases, however the implementation is less than ergonomic for provider developers as a wrapping function is required in all cases: ```go // helper/resource acceptance testing resource.TestCase{ ProtoV6ProviderFactories: map[string]func() (tfprotov6.ProviderServer, error){ "example": func() (tfprotov6.ProviderServer, error) { return tfsdk.NewProtocol6Server(New()), nil }, }, // ... } // tf6muxserver.NewMuxServer() providers := []func() tfprotov6.ProviderServer{ func() tfprotov6.ProviderServer { return tfsdk.NewProtocol6Server(provider1.New()) }, func() tfprotov6.ProviderServer { return tfsdk.NewProtocol6Server(provider2.New()) }, } muxServer, err := tf6muxserver.NewMuxServer(ctx, providers...) // tf6to5server.DowngradeServer() downgradeServer, err := tf6to5server.DowngradeServer(ctx, func() tfprotov6.ProviderServer { return tfsdk.NewProtocol6Server(provider.New()) }) ``` The new functions simplify these implementations and get provider developers closer to not directly importing terraform-plugin-go (with a few other targeted changes, such as type aliases), e.g. ```go // helper/resource acceptance testing resource.TestCase{ ProtoV6ProviderFactories: map[string]func() (tfprotov6.ProviderServer, error){ "example": tfsdk.NewProtocol6ProviderServerWithError(New()), }, // ... } // tf6muxserver.NewMuxServer() providers := []func() tfprotov6.ProviderServer{ tfsdk.NewProtocol6ProviderServer(provider1.New()), tfsdk.NewProtocol6ProviderServer(provider2.New()), } muxServer, err := tf6muxserver.NewMuxServer(ctx, providers...) // tf6to5server.DowngradeServer() downgradeServer, err := tf6to5server.DowngradeServer(ctx, tfsdk.NewProtocol6ProviderServer(provider.New())) ``` This change prefers deprecation over straight replacement to give some lead time for various documentation updates across multiple projects. The naming is less than ideal, however it feels necessary to remain generic instead of picking any particular details related to their current usage (e.g. "NewTestServer") as this can/will change over time. The "Protocol6" naming is important should a new major protocol version 7 be released, which this framework must support.
- Loading branch information