Documentation
¶
Overview ¶
Package grpc provides gRPC-based plugin runtime using HashiCorp go-plugin.
This enables native Go plugins to run as separate processes, communicating with the host via gRPC. Useful for I/O-heavy plugins that benefit from native performance and direct system access.
Index ¶
- Variables
- func ServePlugin(impl GKPluginInterface)
- type CallRequest
- type CallResponse
- type GKPluginInterface
- type GKPluginPlugin
- type GKPluginRPCClient
- type GKPluginRPCServer
- func (s *GKPluginRPCServer) Call(req CallRequest, resp *CallResponse) error
- func (s *GKPluginRPCServer) GKRegister(args interface{}, resp *plugin.GKRegistration) error
- func (s *GKPluginRPCServer) Init(config map[string]string, resp *interface{}) error
- func (s *GKPluginRPCServer) Shutdown(args interface{}, resp *interface{}) error
- type GRPCPlugin
Constants ¶
This section is empty.
Variables ¶
var Handshake = goplugin.HandshakeConfig{
ProtocolVersion: 1,
MagicCookieKey: "GOATKIT_PLUGIN",
MagicCookieValue: "goatkit-v1",
}
Handshake is the shared handshake config for host and plugins. Plugins must use the same values to connect.
var PluginMap = map[string]goplugin.Plugin{ "gkplugin": &GKPluginPlugin{}, }
PluginMap is the map of plugin types we support.
Functions ¶
func ServePlugin ¶
func ServePlugin(impl GKPluginInterface)
ServePlugin is called by plugin executables to serve the plugin. Plugin main() should call this with their implementation.
Types ¶
type CallRequest ¶
type CallRequest struct {
Function string
Args json.RawMessage
}
CallRequest is the RPC request for Call.
type CallResponse ¶
type CallResponse struct {
Result json.RawMessage
Error string
}
CallResponse is the RPC response for Call.
type GKPluginInterface ¶
type GKPluginInterface interface {
GKRegister() (*plugin.GKRegistration, error)
Init(config map[string]string) error
Call(fn string, args json.RawMessage) (json.RawMessage, error)
Shutdown() error
}
GKPluginInterface is the interface that gRPC plugins implement. This is the RPC interface - the actual implementation runs in the plugin process.
type GKPluginPlugin ¶
type GKPluginPlugin struct {
goplugin.Plugin
Impl GKPluginInterface
}
GKPluginPlugin is the go-plugin.Plugin implementation.
type GKPluginRPCClient ¶
type GKPluginRPCClient struct {
// contains filtered or unexported fields
}
GKPluginRPCClient is the RPC client implementation (host side).
func (*GKPluginRPCClient) Call ¶
func (c *GKPluginRPCClient) Call(fn string, args json.RawMessage) (json.RawMessage, error)
func (*GKPluginRPCClient) GKRegister ¶
func (c *GKPluginRPCClient) GKRegister() (*plugin.GKRegistration, error)
func (*GKPluginRPCClient) Shutdown ¶
func (c *GKPluginRPCClient) Shutdown() error
type GKPluginRPCServer ¶
type GKPluginRPCServer struct {
Impl GKPluginInterface
}
GKPluginRPCServer is the RPC server implementation (plugin side).
func (*GKPluginRPCServer) Call ¶
func (s *GKPluginRPCServer) Call(req CallRequest, resp *CallResponse) error
func (*GKPluginRPCServer) GKRegister ¶
func (s *GKPluginRPCServer) GKRegister(args interface{}, resp *plugin.GKRegistration) error
func (*GKPluginRPCServer) Init ¶
func (s *GKPluginRPCServer) Init(config map[string]string, resp *interface{}) error
func (*GKPluginRPCServer) Shutdown ¶
func (s *GKPluginRPCServer) Shutdown(args interface{}, resp *interface{}) error
type GRPCPlugin ¶
type GRPCPlugin struct {
// contains filtered or unexported fields
}
GRPCPlugin wraps a go-plugin client to implement plugin.Plugin.
func LoadGRPCPlugin ¶
func LoadGRPCPlugin(execPath string, host plugin.HostAPI) (*GRPCPlugin, error)
LoadGRPCPlugin loads a gRPC plugin from an executable path.
func (*GRPCPlugin) Call ¶
func (p *GRPCPlugin) Call(ctx context.Context, fn string, args json.RawMessage) (json.RawMessage, error)
Call implements plugin.Plugin.
func (*GRPCPlugin) GKRegister ¶
func (p *GRPCPlugin) GKRegister() plugin.GKRegistration
GKRegister implements plugin.Plugin.