mirror of
https://github.com/opentofu/opentofu.git
synced 2025-01-02 12:17:39 -06:00
b40a4fb741
This is part of a general effort to move all of Terraform's non-library package surface under internal in order to reinforce that these are for internal use within Terraform only. If you were previously importing packages under this prefix into an external codebase, you could pin to an earlier release tag as an interim solution until you've make a plan to achieve the same functionality some other way.
64 lines
1.9 KiB
Go
64 lines
1.9 KiB
Go
package plugin6
|
|
|
|
import (
|
|
"github.com/hashicorp/go-plugin"
|
|
proto "github.com/hashicorp/terraform/internal/tfplugin6"
|
|
)
|
|
|
|
const (
|
|
// The constants below are the names of the plugins that can be dispensed
|
|
// from the plugin server.
|
|
ProviderPluginName = "provider"
|
|
|
|
// DefaultProtocolVersion is the protocol version assumed for legacy clients
|
|
// that don't specify a particular version during their handshake. Since we
|
|
// explicitly set VersionedPlugins in Serve, this number does not need to
|
|
// change with the protocol version and can effectively stay 4 forever
|
|
// (unless we need the "biggest hammer" approach to break all provider
|
|
// compatibility).
|
|
DefaultProtocolVersion = 4
|
|
)
|
|
|
|
// Handshake is the HandshakeConfig used to configure clients and servers.
|
|
var Handshake = plugin.HandshakeConfig{
|
|
// The ProtocolVersion is the version that must match between TF core
|
|
// and TF plugins.
|
|
ProtocolVersion: DefaultProtocolVersion,
|
|
|
|
// The magic cookie values should NEVER be changed.
|
|
MagicCookieKey: "TF_PLUGIN_MAGIC_COOKIE",
|
|
MagicCookieValue: "d602bf8f470bc67ca7faa0386276bbdd4330efaf76d1a219cb4d6991ca9872b2",
|
|
}
|
|
|
|
type GRPCProviderFunc func() proto.ProviderServer
|
|
|
|
// ServeOpts are the configurations to serve a plugin.
|
|
type ServeOpts struct {
|
|
GRPCProviderFunc GRPCProviderFunc
|
|
}
|
|
|
|
// Serve serves a plugin. This function never returns and should be the final
|
|
// function called in the main function of the plugin.
|
|
func Serve(opts *ServeOpts) {
|
|
plugin.Serve(&plugin.ServeConfig{
|
|
HandshakeConfig: Handshake,
|
|
VersionedPlugins: pluginSet(opts),
|
|
GRPCServer: plugin.DefaultGRPCServer,
|
|
})
|
|
}
|
|
|
|
func pluginSet(opts *ServeOpts) map[int]plugin.PluginSet {
|
|
plugins := map[int]plugin.PluginSet{}
|
|
|
|
// add the new protocol versions if they're configured
|
|
if opts.GRPCProviderFunc != nil {
|
|
plugins[6] = plugin.PluginSet{}
|
|
if opts.GRPCProviderFunc != nil {
|
|
plugins[6]["provider"] = &GRPCProviderPlugin{
|
|
GRPCProvider: opts.GRPCProviderFunc,
|
|
}
|
|
}
|
|
}
|
|
return plugins
|
|
}
|