From 591b10804cf5a5203285cdc311d31033109e1d4a Mon Sep 17 00:00:00 2001 From: James Bardin Date: Fri, 8 Dec 2023 18:04:02 +0000 Subject: [PATCH] backport of commit a9cc3baf1a87081548c6f79d16359cbf3a53615f --- internal/command/meta_providers.go | 42 ++++++++++++++++-------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/internal/command/meta_providers.go b/internal/command/meta_providers.go index 836026d6d2f3..64c98f966c1a 100644 --- a/internal/command/meta_providers.go +++ b/internal/command/meta_providers.go @@ -378,20 +378,26 @@ func providerFactory(meta *providercache.CachedProvider) providers.Factory { // store the client so that the plugin can kill the child process protoVer := client.NegotiatedVersion() - switch protoVer { - case 5: - p := raw.(*tfplugin.GRPCProvider) - p.PluginClient = client - p.Addr = meta.Provider - return p, nil - case 6: - p := raw.(*tfplugin6.GRPCProvider) - p.PluginClient = client - p.Addr = meta.Provider - return p, nil - default: - panic("unsupported protocol version") - } + return finalizeFactoryPlugin(raw, protoVer, meta.Provider, client), nil + } +} + +// finalizeFactoryPlugin completes the setup of a plugin dispensed by the rpc +// client to be returned by the plugin factory. +func finalizeFactoryPlugin(rawPlugin any, protoVersion int, addr addrs.Provider, client *plugin.Client) providers.Interface { + switch protoVersion { + case 5: + p := rawPlugin.(*tfplugin.GRPCProvider) + p.PluginClient = client + p.Addr = addr + return p + case 6: + p := rawPlugin.(*tfplugin6.GRPCProvider) + p.PluginClient = client + p.Addr = addr + return p + default: + panic("unsupported protocol version") } } @@ -460,13 +466,9 @@ func unmanagedProviderFactory(provider addrs.Provider, reattach *plugin.Reattach // go-plugin), so client.NegotiatedVersion() always returns 0. We // assume that an unmanaged provider reporting protocol version 0 is // actually using proto v5 for backwards compatibility. - p := raw.(*tfplugin.GRPCProvider) - p.PluginClient = client - return p, nil + return finalizeFactoryPlugin(raw, 5, provider, client), nil case 6: - p := raw.(*tfplugin6.GRPCProvider) - p.PluginClient = client - return p, nil + return finalizeFactoryPlugin(raw, 6, provider, client), nil default: return nil, fmt.Errorf("unsupported protocol version %d", protoVer) }