mirror of
https://github.com/opentffoundation/opentf.git
synced 2026-01-16 11:01:09 -05:00
This puts us on a version that has grpc protocol support. Although we're not actually using that yet, the plugin has handshake changed slightly to allow plugins to declare whether they use the old or new protocols, and so this upgrade allows us to support plugins that were built against newer versions of go-plugin that include this extra field in the handshake. This fixes #15756.
46 lines
1.2 KiB
Go
46 lines
1.2 KiB
Go
package plugin
|
|
|
|
import (
|
|
"io"
|
|
"net"
|
|
)
|
|
|
|
// Protocol is an enum representing the types of protocols.
|
|
type Protocol string
|
|
|
|
const (
|
|
ProtocolInvalid Protocol = ""
|
|
ProtocolNetRPC Protocol = "netrpc"
|
|
ProtocolGRPC Protocol = "grpc"
|
|
)
|
|
|
|
// ServerProtocol is an interface that must be implemented for new plugin
|
|
// protocols to be servers.
|
|
type ServerProtocol interface {
|
|
// Init is called once to configure and initialize the protocol, but
|
|
// not start listening. This is the point at which all validation should
|
|
// be done and errors returned.
|
|
Init() error
|
|
|
|
// Config is extra configuration to be outputted to stdout. This will
|
|
// be automatically base64 encoded to ensure it can be parsed properly.
|
|
// This can be an empty string if additional configuration is not needed.
|
|
Config() string
|
|
|
|
// Serve is called to serve connections on the given listener. This should
|
|
// continue until the listener is closed.
|
|
Serve(net.Listener)
|
|
}
|
|
|
|
// ClientProtocol is an interface that must be implemented for new plugin
|
|
// protocols to be clients.
|
|
type ClientProtocol interface {
|
|
io.Closer
|
|
|
|
// Dispense dispenses a new instance of the plugin with the given name.
|
|
Dispense(string) (interface{}, error)
|
|
|
|
// Ping checks that the client connection is still healthy.
|
|
Ping() error
|
|
}
|