plugin

package
v0.0.0-...-9fd48d3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 9, 2025 License: Apache-2.0 Imports: 24 Imported by: 0

Documentation

Index

Constants

View Source
const (
	CloudProvider_GetInstanceInfo_FullMethodName    = "/plugin.CloudProvider/GetInstanceInfo"
	CloudProvider_StopInstance_FullMethodName       = "/plugin.CloudProvider/StopInstance"
	CloudProvider_StartInstance_FullMethodName      = "/plugin.CloudProvider/StartInstance"
	CloudProvider_GetProviderName_FullMethodName    = "/plugin.CloudProvider/GetProviderName"
	CloudProvider_GetProviderVersion_FullMethodName = "/plugin.CloudProvider/GetProviderVersion"
)
View Source
const (
	// CurrentAPIVersion is the current API version
	CurrentAPIVersion = "0.1.0"

	// ProtocolVersion is the protocol version (this should be incremented for breaking changes)
	ProtocolVersion = 1
)

API version constants

Variables

View Source
var CloudProvider_ServiceDesc = grpc.ServiceDesc{
	ServiceName: "plugin.CloudProvider",
	HandlerType: (*CloudProviderServer)(nil),
	Methods: []grpc.MethodDesc{
		{
			MethodName: "GetInstanceInfo",
			Handler:    _CloudProvider_GetInstanceInfo_Handler,
		},
		{
			MethodName: "StopInstance",
			Handler:    _CloudProvider_StopInstance_Handler,
		},
		{
			MethodName: "StartInstance",
			Handler:    _CloudProvider_StartInstance_Handler,
		},
		{
			MethodName: "GetProviderName",
			Handler:    _CloudProvider_GetProviderName_Handler,
		},
		{
			MethodName: "GetProviderVersion",
			Handler:    _CloudProvider_GetProviderVersion_Handler,
		},
	},
	Streams:  []grpc.StreamDesc{},
	Metadata: "cloud_provider.proto",
}

CloudProvider_ServiceDesc is the grpc.ServiceDesc for CloudProvider service. It's only intended for direct use with grpc.RegisterService, and not to be introspected or modified (even as a copy)

View Source
var File_cloud_provider_proto protoreflect.FileDescriptor
View Source
var Handshake = plugin.HandshakeConfig{
	ProtocolVersion:  ProtocolVersion,
	MagicCookieKey:   "SNOOZEBOT_PLUGIN",
	MagicCookieValue: "snoozebot_plugin_v1",
}

Handshake is a common handshake that is shared by plugin and host.

View Source
var PluginMap = map[string]plugin.Plugin{
	"cloud_provider": &CloudProviderPlugin{Impl: nil},
}

PluginMap is the map of plugins we can dispense.

Functions

func DefaultGRPCServerWithTLS

func DefaultGRPCServerWithTLS(tlsConfig *tls.Config) func([]grpc.ServerOption) *grpc.Server

Creates and returns a gRPC server with TLS support

func RegisterCloudProviderServer

func RegisterCloudProviderServer(s grpc.ServiceRegistrar, srv CloudProviderServer)

func ServePluginWithTLS

func ServePluginWithTLS(pluginImpl CloudProvider, tlsOptions *TLSOptions, logger hclog.Logger)

ServePluginWithTLS serves a plugin with TLS support

Types

type BaseProvider

type BaseProvider struct {
	// contains filtered or unexported fields
}

BaseProvider provides common functionality for all cloud providers

func NewBaseProvider

func NewBaseProvider(name, pluginVersion string, logger hclog.Logger) *BaseProvider

NewBaseProvider creates a new base provider

func (*BaseProvider) AddCapability

func (p *BaseProvider) AddCapability(capability string)

AddCapability adds a capability to the provider

func (*BaseProvider) CheckVersionCompatibility

func (p *BaseProvider) CheckVersionCompatibility() (bool, error)

CheckVersionCompatibility checks if the plugin API version is compatible with the host

func (*BaseProvider) GetAPIVersion

func (p *BaseProvider) GetAPIVersion() string

GetAPIVersion returns the API version implemented by the plugin

func (*BaseProvider) GetManifest

func (p *BaseProvider) GetManifest() *version.PluginManifest

GetManifest returns the plugin manifest

func (*BaseProvider) GetProviderName

func (p *BaseProvider) GetProviderName() string

GetProviderName returns the name of the cloud provider

func (*BaseProvider) GetProviderVersion

func (p *BaseProvider) GetProviderVersion() string

GetProviderVersion returns the version of the cloud provider plugin

func (*BaseProvider) HasCapability

func (p *BaseProvider) HasCapability(capability string) bool

HasCapability checks if the provider has a capability

func (*BaseProvider) SetManifest

func (p *BaseProvider) SetManifest(manifest *version.PluginManifest)

SetManifest sets the plugin manifest

func (*BaseProvider) Shutdown

func (p *BaseProvider) Shutdown()

Shutdown performs any cleanup when the plugin is being unloaded

type CloudProvider

type CloudProvider interface {
	// GetAPIVersion returns the API version implemented by the plugin
	GetAPIVersion() string

	// GetInstanceInfo gets information about the current instance
	GetInstanceInfo(ctx context.Context) (*InstanceInfo, error)

	// StopInstance stops the current instance
	StopInstance(ctx context.Context) error

	// StartInstance starts the current instance
	StartInstance(ctx context.Context) error

	// GetProviderName returns the name of the cloud provider
	GetProviderName() string

	// GetProviderVersion returns the version of the cloud provider plugin
	GetProviderVersion() string

	// ListInstances lists all instances
	ListInstances(ctx context.Context) ([]*InstanceInfo, error)

	// Shutdown is called when the plugin is being unloaded
	Shutdown()
}

CloudProvider is the interface that we expose for cloud provider plugins

type CloudProviderClient

type CloudProviderClient interface {
	GetInstanceInfo(ctx context.Context, in *GetInstanceInfoRequest, opts ...grpc.CallOption) (*GetInstanceInfoResponse, error)
	StopInstance(ctx context.Context, in *StopInstanceRequest, opts ...grpc.CallOption) (*StopInstanceResponse, error)
	StartInstance(ctx context.Context, in *StartInstanceRequest, opts ...grpc.CallOption) (*StartInstanceResponse, error)
	GetProviderName(ctx context.Context, in *GetProviderNameRequest, opts ...grpc.CallOption) (*GetProviderNameResponse, error)
	GetProviderVersion(ctx context.Context, in *GetProviderVersionRequest, opts ...grpc.CallOption) (*GetProviderVersionResponse, error)
}

CloudProviderClient is the client API for CloudProvider service.

For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.

type CloudProviderPlugin

type CloudProviderPlugin struct {
	// Concrete implementation, written in Go. This is only used for plugins
	// that are written in Go.
	Impl CloudProvider
}

CloudProviderPlugin is the implementation of plugin.Plugin so we can serve/consume this.

func (*CloudProviderPlugin) Client

func (p *CloudProviderPlugin) Client(*plugin.MuxBroker, *rpc.Client) (interface{}, error)

Client implements plugin.Plugin interface for consuming

func (*CloudProviderPlugin) GRPCClient

func (p *CloudProviderPlugin) GRPCClient(ctx context.Context, broker *plugin.GRPCBroker, c *grpc.ClientConn) (interface{}, error)

GRPCClient returns the client for this plugin.

func (*CloudProviderPlugin) GRPCServer

func (p *CloudProviderPlugin) GRPCServer(broker *plugin.GRPCBroker, s *grpc.Server) error

GRPCServer registers this plugin for serving with a gRPC server.

func (*CloudProviderPlugin) Server

func (p *CloudProviderPlugin) Server(*plugin.MuxBroker) (interface{}, error)

Server implements plugin.Plugin interface for serving

type CloudProviderServer

type CloudProviderServer interface {
	GetInstanceInfo(context.Context, *GetInstanceInfoRequest) (*GetInstanceInfoResponse, error)
	StopInstance(context.Context, *StopInstanceRequest) (*StopInstanceResponse, error)
	StartInstance(context.Context, *StartInstanceRequest) (*StartInstanceResponse, error)
	GetProviderName(context.Context, *GetProviderNameRequest) (*GetProviderNameResponse, error)
	GetProviderVersion(context.Context, *GetProviderVersionRequest) (*GetProviderVersionResponse, error)
	// contains filtered or unexported methods
}

CloudProviderServer is the server API for CloudProvider service. All implementations must embed UnimplementedCloudProviderServer for forward compatibility.

type GRPCCloudProviderClient

type GRPCCloudProviderClient struct {
	// contains filtered or unexported fields
}

GRPCCloudProviderClient is an implementation of CloudProvider that talks over gRPC.

func (*GRPCCloudProviderClient) GetInstanceInfo

func (m *GRPCCloudProviderClient) GetInstanceInfo(ctx context.Context) (*CloudInstanceInfo, error)

func (*GRPCCloudProviderClient) GetProviderName

func (m *GRPCCloudProviderClient) GetProviderName() string

func (*GRPCCloudProviderClient) GetProviderVersion

func (m *GRPCCloudProviderClient) GetProviderVersion() string

func (*GRPCCloudProviderClient) ListInstances

func (m *GRPCCloudProviderClient) ListInstances(ctx context.Context) ([]*CloudInstanceInfo, error)

func (*GRPCCloudProviderClient) Shutdown

func (m *GRPCCloudProviderClient) Shutdown()

func (*GRPCCloudProviderClient) StartInstance

func (m *GRPCCloudProviderClient) StartInstance(ctx context.Context) error

func (*GRPCCloudProviderClient) StopInstance

func (m *GRPCCloudProviderClient) StopInstance(ctx context.Context) error

type GRPCCloudProviderPlugin

type GRPCCloudProviderPlugin struct {
	CloudProviderPlugin
	TLSConfig *tls.Config
}

GRPCCloudProviderPlugin is a wrapper for the CloudProviderPlugin that adds TLS support to the gRPC connection

func (*GRPCCloudProviderPlugin) GRPCClient

func (p *GRPCCloudProviderPlugin) GRPCClient(ctx context.Context, broker *plugin.GRPCBroker, c *grpc.ClientConn) (interface{}, error)

GRPCClient returns the client for this plugin with TLS support

func (*GRPCCloudProviderPlugin) GRPCServer

func (p *GRPCCloudProviderPlugin) GRPCServer(broker *plugin.GRPCBroker, s *grpc.Server) error

GRPCServer registers the plugin for serving with a gRPC server with TLS support

type GRPCCloudProviderServer

type GRPCCloudProviderServer struct {
	// This is the real implementation
	Impl CloudProvider
	UnimplementedCloudProviderServer
}

GRPCCloudProviderServer is the gRPC server that GRPCCloudProviderClient talks to.

func (*GRPCCloudProviderServer) GetInstanceInfo

func (*GRPCCloudProviderServer) GetProviderName

func (*GRPCCloudProviderServer) GetProviderVersion

func (*GRPCCloudProviderServer) ListInstances

func (m *GRPCCloudProviderServer) ListInstances(ctx context.Context, req *ListInstancesRequest) (*ListInstancesResponse, error)

func (*GRPCCloudProviderServer) Shutdown

func (m *GRPCCloudProviderServer) Shutdown(ctx context.Context, req *ShutdownRequest) (*ShutdownResponse, error)

func (*GRPCCloudProviderServer) StartInstance

func (*GRPCCloudProviderServer) StopInstance

type GetInstanceInfoRequest

type GetInstanceInfoRequest struct {
	// contains filtered or unexported fields
}

func (*GetInstanceInfoRequest) Descriptor deprecated

func (*GetInstanceInfoRequest) Descriptor() ([]byte, []int)

Deprecated: Use GetInstanceInfoRequest.ProtoReflect.Descriptor instead.

func (*GetInstanceInfoRequest) ProtoMessage

func (*GetInstanceInfoRequest) ProtoMessage()

func (*GetInstanceInfoRequest) ProtoReflect

func (x *GetInstanceInfoRequest) ProtoReflect() protoreflect.Message

func (*GetInstanceInfoRequest) Reset

func (x *GetInstanceInfoRequest) Reset()

func (*GetInstanceInfoRequest) String

func (x *GetInstanceInfoRequest) String() string

type GetInstanceInfoResponse

type GetInstanceInfoResponse struct {
	Id         string                 `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
	Name       string                 `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
	Type       string                 `protobuf:"bytes,3,opt,name=type,proto3" json:"type,omitempty"`
	Region     string                 `protobuf:"bytes,4,opt,name=region,proto3" json:"region,omitempty"`
	Zone       string                 `protobuf:"bytes,5,opt,name=zone,proto3" json:"zone,omitempty"`
	State      string                 `protobuf:"bytes,6,opt,name=state,proto3" json:"state,omitempty"`
	LaunchTime *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=launch_time,json=launchTime,proto3" json:"launch_time,omitempty"`
	// contains filtered or unexported fields
}

func (*GetInstanceInfoResponse) Descriptor deprecated

func (*GetInstanceInfoResponse) Descriptor() ([]byte, []int)

Deprecated: Use GetInstanceInfoResponse.ProtoReflect.Descriptor instead.

func (*GetInstanceInfoResponse) GetId

func (x *GetInstanceInfoResponse) GetId() string

func (*GetInstanceInfoResponse) GetLaunchTime

func (x *GetInstanceInfoResponse) GetLaunchTime() *timestamppb.Timestamp

func (*GetInstanceInfoResponse) GetName

func (x *GetInstanceInfoResponse) GetName() string

func (*GetInstanceInfoResponse) GetRegion

func (x *GetInstanceInfoResponse) GetRegion() string

func (*GetInstanceInfoResponse) GetState

func (x *GetInstanceInfoResponse) GetState() string

func (*GetInstanceInfoResponse) GetType

func (x *GetInstanceInfoResponse) GetType() string

func (*GetInstanceInfoResponse) GetZone

func (x *GetInstanceInfoResponse) GetZone() string

func (*GetInstanceInfoResponse) ProtoMessage

func (*GetInstanceInfoResponse) ProtoMessage()

func (*GetInstanceInfoResponse) ProtoReflect

func (x *GetInstanceInfoResponse) ProtoReflect() protoreflect.Message

func (*GetInstanceInfoResponse) Reset

func (x *GetInstanceInfoResponse) Reset()

func (*GetInstanceInfoResponse) String

func (x *GetInstanceInfoResponse) String() string

type GetProviderNameRequest

type GetProviderNameRequest struct {
	// contains filtered or unexported fields
}

func (*GetProviderNameRequest) Descriptor deprecated

func (*GetProviderNameRequest) Descriptor() ([]byte, []int)

Deprecated: Use GetProviderNameRequest.ProtoReflect.Descriptor instead.

func (*GetProviderNameRequest) ProtoMessage

func (*GetProviderNameRequest) ProtoMessage()

func (*GetProviderNameRequest) ProtoReflect

func (x *GetProviderNameRequest) ProtoReflect() protoreflect.Message

func (*GetProviderNameRequest) Reset

func (x *GetProviderNameRequest) Reset()

func (*GetProviderNameRequest) String

func (x *GetProviderNameRequest) String() string

type GetProviderNameResponse

type GetProviderNameResponse struct {
	ProviderName string `protobuf:"bytes,1,opt,name=provider_name,json=providerName,proto3" json:"provider_name,omitempty"`
	// contains filtered or unexported fields
}

func (*GetProviderNameResponse) Descriptor deprecated

func (*GetProviderNameResponse) Descriptor() ([]byte, []int)

Deprecated: Use GetProviderNameResponse.ProtoReflect.Descriptor instead.

func (*GetProviderNameResponse) GetProviderName

func (x *GetProviderNameResponse) GetProviderName() string

func (*GetProviderNameResponse) ProtoMessage

func (*GetProviderNameResponse) ProtoMessage()

func (*GetProviderNameResponse) ProtoReflect

func (x *GetProviderNameResponse) ProtoReflect() protoreflect.Message

func (*GetProviderNameResponse) Reset

func (x *GetProviderNameResponse) Reset()

func (*GetProviderNameResponse) String

func (x *GetProviderNameResponse) String() string

type GetProviderVersionRequest

type GetProviderVersionRequest struct {
	// contains filtered or unexported fields
}

func (*GetProviderVersionRequest) Descriptor deprecated

func (*GetProviderVersionRequest) Descriptor() ([]byte, []int)

Deprecated: Use GetProviderVersionRequest.ProtoReflect.Descriptor instead.

func (*GetProviderVersionRequest) ProtoMessage

func (*GetProviderVersionRequest) ProtoMessage()

func (*GetProviderVersionRequest) ProtoReflect

func (*GetProviderVersionRequest) Reset

func (x *GetProviderVersionRequest) Reset()

func (*GetProviderVersionRequest) String

func (x *GetProviderVersionRequest) String() string

type GetProviderVersionResponse

type GetProviderVersionResponse struct {
	ProviderVersion string `protobuf:"bytes,1,opt,name=provider_version,json=providerVersion,proto3" json:"provider_version,omitempty"`
	// contains filtered or unexported fields
}

func (*GetProviderVersionResponse) Descriptor deprecated

func (*GetProviderVersionResponse) Descriptor() ([]byte, []int)

Deprecated: Use GetProviderVersionResponse.ProtoReflect.Descriptor instead.

func (*GetProviderVersionResponse) GetProviderVersion

func (x *GetProviderVersionResponse) GetProviderVersion() string

func (*GetProviderVersionResponse) ProtoMessage

func (*GetProviderVersionResponse) ProtoMessage()

func (*GetProviderVersionResponse) ProtoReflect

func (*GetProviderVersionResponse) Reset

func (x *GetProviderVersionResponse) Reset()

func (*GetProviderVersionResponse) String

func (x *GetProviderVersionResponse) String() string

type InstanceInfo

type InstanceInfo struct {
	ID         string
	Name       string
	Type       string
	Region     string
	Zone       string
	State      string
	LaunchTime time.Time
}

InstanceInfo contains information about a cloud instance

type SecurePlugin

type SecurePlugin struct {
	PluginName    string
	PluginCmd     *exec.Cmd
	TLSConfig     *tls.Config
	Logger        hclog.Logger
	Client        *plugin.Client
	CloudProvider CloudProvider
}

SecurePlugin is a wrapper for a plugin with TLS support

func NewSecurePlugin

func NewSecurePlugin(pluginName string, pluginPath string, tlsOptions *TLSOptions, logger hclog.Logger) (*SecurePlugin, error)

NewSecurePlugin creates a new secure plugin

func (*SecurePlugin) GetCloudProvider

func (p *SecurePlugin) GetCloudProvider() CloudProvider

GetCloudProvider returns the cloud provider

func (*SecurePlugin) Start

func (p *SecurePlugin) Start() error

Start starts the plugin

func (*SecurePlugin) Stop

func (p *SecurePlugin) Stop()

Stop stops the plugin

type StartInstanceRequest

type StartInstanceRequest struct {
	// contains filtered or unexported fields
}

func (*StartInstanceRequest) Descriptor deprecated

func (*StartInstanceRequest) Descriptor() ([]byte, []int)

Deprecated: Use StartInstanceRequest.ProtoReflect.Descriptor instead.

func (*StartInstanceRequest) ProtoMessage

func (*StartInstanceRequest) ProtoMessage()

func (*StartInstanceRequest) ProtoReflect

func (x *StartInstanceRequest) ProtoReflect() protoreflect.Message

func (*StartInstanceRequest) Reset

func (x *StartInstanceRequest) Reset()

func (*StartInstanceRequest) String

func (x *StartInstanceRequest) String() string

type StartInstanceResponse

type StartInstanceResponse struct {
	Success      bool   `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"`
	ErrorMessage string `protobuf:"bytes,2,opt,name=error_message,json=errorMessage,proto3" json:"error_message,omitempty"`
	// contains filtered or unexported fields
}

func (*StartInstanceResponse) Descriptor deprecated

func (*StartInstanceResponse) Descriptor() ([]byte, []int)

Deprecated: Use StartInstanceResponse.ProtoReflect.Descriptor instead.

func (*StartInstanceResponse) GetErrorMessage

func (x *StartInstanceResponse) GetErrorMessage() string

func (*StartInstanceResponse) GetSuccess

func (x *StartInstanceResponse) GetSuccess() bool

func (*StartInstanceResponse) ProtoMessage

func (*StartInstanceResponse) ProtoMessage()

func (*StartInstanceResponse) ProtoReflect

func (x *StartInstanceResponse) ProtoReflect() protoreflect.Message

func (*StartInstanceResponse) Reset

func (x *StartInstanceResponse) Reset()

func (*StartInstanceResponse) String

func (x *StartInstanceResponse) String() string

type StopInstanceRequest

type StopInstanceRequest struct {
	// contains filtered or unexported fields
}

func (*StopInstanceRequest) Descriptor deprecated

func (*StopInstanceRequest) Descriptor() ([]byte, []int)

Deprecated: Use StopInstanceRequest.ProtoReflect.Descriptor instead.

func (*StopInstanceRequest) ProtoMessage

func (*StopInstanceRequest) ProtoMessage()

func (*StopInstanceRequest) ProtoReflect

func (x *StopInstanceRequest) ProtoReflect() protoreflect.Message

func (*StopInstanceRequest) Reset

func (x *StopInstanceRequest) Reset()

func (*StopInstanceRequest) String

func (x *StopInstanceRequest) String() string

type StopInstanceResponse

type StopInstanceResponse struct {
	Success      bool   `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"`
	ErrorMessage string `protobuf:"bytes,2,opt,name=error_message,json=errorMessage,proto3" json:"error_message,omitempty"`
	// contains filtered or unexported fields
}

func (*StopInstanceResponse) Descriptor deprecated

func (*StopInstanceResponse) Descriptor() ([]byte, []int)

Deprecated: Use StopInstanceResponse.ProtoReflect.Descriptor instead.

func (*StopInstanceResponse) GetErrorMessage

func (x *StopInstanceResponse) GetErrorMessage() string

func (*StopInstanceResponse) GetSuccess

func (x *StopInstanceResponse) GetSuccess() bool

func (*StopInstanceResponse) ProtoMessage

func (*StopInstanceResponse) ProtoMessage()

func (*StopInstanceResponse) ProtoReflect

func (x *StopInstanceResponse) ProtoReflect() protoreflect.Message

func (*StopInstanceResponse) Reset

func (x *StopInstanceResponse) Reset()

func (*StopInstanceResponse) String

func (x *StopInstanceResponse) String() string

type TLSOptions

type TLSOptions struct {
	Enabled    bool   // Whether to use TLS
	CertDir    string // Directory for certificates
	CACert     string // CA certificate file
	CertFile   string // Certificate file
	KeyFile    string // Private key file
	SkipVerify bool   // Skip certificate verification (not recommended for production)
}

TLSOptions contains TLS configuration options

type UnimplementedCloudProviderServer

type UnimplementedCloudProviderServer struct{}

UnimplementedCloudProviderServer must be embedded to have forward compatible implementations.

NOTE: this should be embedded by value instead of pointer to avoid a nil pointer dereference when methods are called.

func (UnimplementedCloudProviderServer) GetInstanceInfo

func (UnimplementedCloudProviderServer) GetProviderName

func (UnimplementedCloudProviderServer) GetProviderVersion

func (UnimplementedCloudProviderServer) StartInstance

func (UnimplementedCloudProviderServer) StopInstance

type UnsafeCloudProviderServer

type UnsafeCloudProviderServer interface {
	// contains filtered or unexported methods
}

UnsafeCloudProviderServer may be embedded to opt out of forward compatibility for this service. Use of this interface is not recommended, as added methods to CloudProviderServer will result in compilation errors.

Directories

Path Synopsis
credentials
Package credentials provides standardized credential handling for cloud providers
Package credentials provides standardized credential handling for cloud providers
Package version provides versioning utilities for the Snoozebot plugin system
Package version provides versioning utilities for the Snoozebot plugin system

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL