open-nomad/plugins/base/server.go
Tim Gross eb06c25d5f
deps: remove deprecated net/context (#13932)
The `golang.org/x/net/context` package was merged into the stdlib as of go
1.7. Update the imports to use the identical stdlib version. Clean up import
blocks for the impacted files to remove unnecessary package aliasing.
2022-07-28 14:46:56 -04:00

87 lines
1.9 KiB
Go

package base
import (
"context"
"fmt"
plugin "github.com/hashicorp/go-plugin"
"github.com/hashicorp/nomad/plugins/base/proto"
)
// basePluginServer wraps a base plugin and exposes it via gRPC.
type basePluginServer struct {
broker *plugin.GRPCBroker
impl BasePlugin
}
func (b *basePluginServer) PluginInfo(context.Context, *proto.PluginInfoRequest) (*proto.PluginInfoResponse, error) {
resp, err := b.impl.PluginInfo()
if err != nil {
return nil, err
}
var ptype proto.PluginType
switch resp.Type {
case PluginTypeDriver:
ptype = proto.PluginType_DRIVER
case PluginTypeDevice:
ptype = proto.PluginType_DEVICE
default:
return nil, fmt.Errorf("plugin is of unknown type: %q", resp.Type)
}
presp := &proto.PluginInfoResponse{
Type: ptype,
PluginApiVersions: resp.PluginApiVersions,
PluginVersion: resp.PluginVersion,
Name: resp.Name,
}
return presp, nil
}
func (b *basePluginServer) ConfigSchema(context.Context, *proto.ConfigSchemaRequest) (*proto.ConfigSchemaResponse, error) {
spec, err := b.impl.ConfigSchema()
if err != nil {
return nil, err
}
presp := &proto.ConfigSchemaResponse{
Spec: spec,
}
return presp, nil
}
func (b *basePluginServer) SetConfig(ctx context.Context, req *proto.SetConfigRequest) (*proto.SetConfigResponse, error) {
info, err := b.impl.PluginInfo()
if err != nil {
return nil, err
}
// Client configuration is filtered based on plugin type
cfg := nomadConfigFromProto(req.GetNomadConfig())
filteredCfg := new(AgentConfig)
if cfg != nil {
switch info.Type {
case PluginTypeDriver:
filteredCfg.Driver = cfg.Driver
}
}
// Build the config request
c := &Config{
ApiVersion: req.GetPluginApiVersion(),
PluginConfig: req.GetMsgpackConfig(),
AgentConfig: filteredCfg,
}
// Set the config
if err := b.impl.SetConfig(c); err != nil {
return nil, fmt.Errorf("SetConfig failed: %v", err)
}
return &proto.SetConfigResponse{}, nil
}