d0e2badbae
The result will still pass gofmtcheck and won't trigger additional changes if someone isn't using goimports, but it will avoid the piecemeal imports changes we've been seeing.
84 lines
2.1 KiB
Go
84 lines
2.1 KiB
Go
package plugin
|
|
|
|
import (
|
|
"context"
|
|
"net/rpc"
|
|
"sync/atomic"
|
|
|
|
"google.golang.org/grpc"
|
|
|
|
log "github.com/hashicorp/go-hclog"
|
|
plugin "github.com/hashicorp/go-plugin"
|
|
"github.com/hashicorp/vault/logical"
|
|
"github.com/hashicorp/vault/logical/plugin/pb"
|
|
)
|
|
|
|
var _ plugin.Plugin = (*BackendPlugin)(nil)
|
|
var _ plugin.GRPCPlugin = (*BackendPlugin)(nil)
|
|
var _ plugin.Plugin = (*GRPCBackendPlugin)(nil)
|
|
var _ plugin.GRPCPlugin = (*GRPCBackendPlugin)(nil)
|
|
|
|
// BackendPlugin is the plugin.Plugin implementation
|
|
type BackendPlugin struct {
|
|
*GRPCBackendPlugin
|
|
}
|
|
|
|
// GRPCBackendPlugin is the plugin.Plugin implementation that only supports GRPC
|
|
// transport
|
|
type GRPCBackendPlugin struct {
|
|
Factory logical.Factory
|
|
MetadataMode bool
|
|
Logger log.Logger
|
|
|
|
// Embeding this will disable the netRPC protocol
|
|
plugin.NetRPCUnsupportedPlugin
|
|
}
|
|
|
|
// Server gets called when on plugin.Serve()
|
|
func (b *BackendPlugin) Server(broker *plugin.MuxBroker) (interface{}, error) {
|
|
return &backendPluginServer{
|
|
factory: b.Factory,
|
|
broker: broker,
|
|
// We pass the logger down into the backend so go-plugin will forward
|
|
// logs for us.
|
|
logger: b.Logger,
|
|
}, nil
|
|
}
|
|
|
|
// Client gets called on plugin.NewClient()
|
|
func (b BackendPlugin) Client(broker *plugin.MuxBroker, c *rpc.Client) (interface{}, error) {
|
|
return &backendPluginClient{
|
|
client: c,
|
|
broker: broker,
|
|
metadataMode: b.MetadataMode,
|
|
}, nil
|
|
}
|
|
|
|
func (b GRPCBackendPlugin) GRPCServer(broker *plugin.GRPCBroker, s *grpc.Server) error {
|
|
pb.RegisterBackendServer(s, &backendGRPCPluginServer{
|
|
broker: broker,
|
|
factory: b.Factory,
|
|
// We pass the logger down into the backend so go-plugin will forward
|
|
// logs for us.
|
|
logger: b.Logger,
|
|
})
|
|
return nil
|
|
}
|
|
|
|
func (b *GRPCBackendPlugin) GRPCClient(ctx context.Context, broker *plugin.GRPCBroker, c *grpc.ClientConn) (interface{}, error) {
|
|
ret := &backendGRPCPluginClient{
|
|
client: pb.NewBackendClient(c),
|
|
clientConn: c,
|
|
broker: broker,
|
|
cleanupCh: make(chan struct{}),
|
|
doneCtx: ctx,
|
|
metadataMode: b.MetadataMode,
|
|
}
|
|
|
|
// Create the value and set the type
|
|
ret.server = new(atomic.Value)
|
|
ret.server.Store((*grpc.Server)(nil))
|
|
|
|
return ret, nil
|
|
}
|