27bb03bbc0
* adding copyright header * fix fmt and a test
86 lines
1.6 KiB
Go
86 lines
1.6 KiB
Go
// Copyright (c) HashiCorp, Inc.
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
package dbplugin
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/hashicorp/go-plugin"
|
|
"github.com/hashicorp/vault/sdk/helper/pluginutil"
|
|
)
|
|
|
|
// Serve is called from within a plugin and wraps the provided
|
|
// Database implementation in a databasePluginRPCServer object and starts a
|
|
// RPC server.
|
|
func Serve(db Database) {
|
|
plugin.Serve(ServeConfig(db))
|
|
}
|
|
|
|
func ServeConfig(db Database) *plugin.ServeConfig {
|
|
err := pluginutil.OptionallyEnableMlock()
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return nil
|
|
}
|
|
|
|
// pluginSets is the map of plugins we can dispense.
|
|
pluginSets := map[int]plugin.PluginSet{
|
|
5: {
|
|
"database": &GRPCDatabasePlugin{
|
|
Impl: db,
|
|
},
|
|
},
|
|
}
|
|
|
|
conf := &plugin.ServeConfig{
|
|
HandshakeConfig: HandshakeConfig,
|
|
VersionedPlugins: pluginSets,
|
|
GRPCServer: plugin.DefaultGRPCServer,
|
|
}
|
|
|
|
return conf
|
|
}
|
|
|
|
func ServeMultiplex(factory Factory) {
|
|
plugin.Serve(ServeConfigMultiplex(factory))
|
|
}
|
|
|
|
func ServeConfigMultiplex(factory Factory) *plugin.ServeConfig {
|
|
err := pluginutil.OptionallyEnableMlock()
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return nil
|
|
}
|
|
|
|
db, err := factory()
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return nil
|
|
}
|
|
|
|
database := db.(Database)
|
|
|
|
// pluginSets is the map of plugins we can dispense.
|
|
pluginSets := map[int]plugin.PluginSet{
|
|
5: {
|
|
"database": &GRPCDatabasePlugin{
|
|
Impl: database,
|
|
},
|
|
},
|
|
6: {
|
|
"database": &GRPCDatabasePlugin{
|
|
FactoryFunc: factory,
|
|
},
|
|
},
|
|
}
|
|
|
|
conf := &plugin.ServeConfig{
|
|
HandshakeConfig: HandshakeConfig,
|
|
VersionedPlugins: pluginSets,
|
|
GRPCServer: plugin.DefaultGRPCServer,
|
|
}
|
|
|
|
return conf
|
|
}
|