eb06c25d5f
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.
87 lines
1.9 KiB
Go
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
|
|
}
|