2018-08-13 17:52:59 +00:00
|
|
|
package base
|
2018-08-10 17:50:09 +00:00
|
|
|
|
|
|
|
import (
|
2018-08-13 17:52:59 +00:00
|
|
|
"context"
|
2018-08-10 17:50:09 +00:00
|
|
|
"fmt"
|
|
|
|
|
|
|
|
"github.com/hashicorp/nomad/plugins/base/proto"
|
|
|
|
"github.com/hashicorp/nomad/plugins/shared/hclspec"
|
|
|
|
)
|
|
|
|
|
2018-08-13 17:29:29 +00:00
|
|
|
// BasePluginClient implements the client side of a remote base plugin, using
|
2018-08-10 17:50:09 +00:00
|
|
|
// gRPC to communicate to the remote plugin.
|
2018-08-13 17:29:29 +00:00
|
|
|
type BasePluginClient struct {
|
|
|
|
Client proto.BasePluginClient
|
2018-11-13 01:09:27 +00:00
|
|
|
|
|
|
|
// DoneCtx is closed when the plugin exits
|
|
|
|
DoneCtx context.Context
|
2018-08-10 17:50:09 +00:00
|
|
|
}
|
|
|
|
|
2018-08-13 17:29:29 +00:00
|
|
|
func (b *BasePluginClient) PluginInfo() (*PluginInfoResponse, error) {
|
2018-11-13 01:09:27 +00:00
|
|
|
presp, err := b.Client.PluginInfo(b.DoneCtx, &proto.PluginInfoRequest{})
|
2018-08-10 17:50:09 +00:00
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
var ptype string
|
|
|
|
switch presp.GetType() {
|
|
|
|
case proto.PluginType_DRIVER:
|
|
|
|
ptype = PluginTypeDriver
|
|
|
|
case proto.PluginType_DEVICE:
|
|
|
|
ptype = PluginTypeDevice
|
|
|
|
default:
|
|
|
|
return nil, fmt.Errorf("plugin is of unknown type: %q", presp.GetType().String())
|
|
|
|
}
|
|
|
|
|
|
|
|
resp := &PluginInfoResponse{
|
|
|
|
Type: ptype,
|
|
|
|
PluginApiVersion: presp.GetPluginApiVersion(),
|
|
|
|
PluginVersion: presp.GetPluginVersion(),
|
|
|
|
Name: presp.GetName(),
|
|
|
|
}
|
|
|
|
|
|
|
|
return resp, nil
|
|
|
|
}
|
|
|
|
|
2018-08-13 17:29:29 +00:00
|
|
|
func (b *BasePluginClient) ConfigSchema() (*hclspec.Spec, error) {
|
2018-11-13 01:09:27 +00:00
|
|
|
presp, err := b.Client.ConfigSchema(b.DoneCtx, &proto.ConfigSchemaRequest{})
|
2018-08-10 17:50:09 +00:00
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
return presp.GetSpec(), nil
|
|
|
|
}
|
|
|
|
|
2018-10-30 01:34:34 +00:00
|
|
|
func (b *BasePluginClient) SetConfig(data []byte, config *ClientAgentConfig) error {
|
2018-08-10 17:50:09 +00:00
|
|
|
// Send the config
|
2018-11-13 01:09:27 +00:00
|
|
|
_, err := b.Client.SetConfig(b.DoneCtx, &proto.SetConfigRequest{
|
2018-08-10 17:50:09 +00:00
|
|
|
MsgpackConfig: data,
|
2018-10-17 02:21:15 +00:00
|
|
|
NomadConfig: config.toProto(),
|
2018-08-10 17:50:09 +00:00
|
|
|
})
|
|
|
|
|
|
|
|
return err
|
|
|
|
}
|