plugin

package
v0.0.0-...-c924774 Latest Latest
Warning

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

Go to latest
Published: May 29, 2024 License: MPL-2.0 Imports: 25 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// The constants below are the names of the plugins that can be dispensed
	// from the plugin server.
	ProviderPluginName    = "provider"
	ProvisionerPluginName = "provisioner"

	// DefaultProtocolVersion is the protocol version assumed for legacy clients that don't specify
	// a particular version during their handshake. This is the version used when Terraform 0.10
	// and 0.11 launch plugins that were built with support for both versions 4 and 5, and must
	// stay unchanged at 4 until we intentionally build plugins that are not compatible with 0.10 and
	// 0.11.
	DefaultProtocolVersion = 4
)

Variables

View Source
var Handshake = plugin.HandshakeConfig{

	ProtocolVersion: DefaultProtocolVersion,

	MagicCookieKey:   "TF_PLUGIN_MAGIC_COOKIE",
	MagicCookieValue: "d602bf8f470bc67ca7faa0386276bbdd4330efaf76d1a219cb4d6991ca9872b2",
}

Handshake is the HandshakeConfig used to configure clients and servers.

View Source
var VersionedPlugins = map[int]plugin.PluginSet{
	5: {
		"provider":    &GRPCProviderPlugin{},
		"provisioner": &GRPCProvisionerPlugin{},
	},
	6: {
		"provider": &plugin6.GRPCProviderPlugin{},
	},
}

VersionedPlugins includes both protocol 5 and 6 because this is the function called in providerFactory (command/meta_providers.go) to set up the initial plugin client config.

Functions

func Serve

func Serve(opts *ServeOpts)

Serve serves a plugin. This function never returns and should be the final function called in the main function of the plugin.

Types

type GRPCProvider

type GRPCProvider struct {
	// PluginClient provides a reference to the plugin.Client which controls the plugin process.
	// This allows the GRPCProvider a way to shutdown the plugin process.
	PluginClient *plugin.Client

	// TestServer contains a grpc.Server to close when the GRPCProvider is being
	// used in an end to end test of a provider.
	TestServer *grpc.Server

	// Addr uniquely identifies the type of provider.
	// Normally executed providers will have this set during initialization,
	// but it may not always be available for alternative execute modes.
	Addr addrs.Provider
	// contains filtered or unexported fields
}

GRPCProvider handles the client, or core side of the plugin rpc connection. The GRPCProvider methods are mostly a translation layer between the tofu providers types and the grpc proto types, directly converting between the two.

func (*GRPCProvider) CallFunction

func (*GRPCProvider) Close

func (p *GRPCProvider) Close() error

closing the grpc connection is final, and tofu will call it at the end of every phase.

func (*GRPCProvider) ConfigureProvider

func (*GRPCProvider) GetFunctions

func (p *GRPCProvider) GetFunctions() (resp providers.GetFunctionsResponse)

func (*GRPCProvider) GetProviderSchema

func (p *GRPCProvider) GetProviderSchema() (resp providers.GetProviderSchemaResponse)

func (*GRPCProvider) PlanResourceChange

func (*GRPCProvider) ReadDataSource

func (*GRPCProvider) ReadResource

func (*GRPCProvider) Stop

func (p *GRPCProvider) Stop() error

type GRPCProviderFunc

type GRPCProviderFunc func() proto.ProviderServer

type GRPCProviderPlugin

type GRPCProviderPlugin struct {
	plugin.Plugin
	GRPCProvider func() proto.ProviderServer
}

GRPCProviderPlugin implements plugin.GRPCPlugin for the go-plugin package.

func (*GRPCProviderPlugin) GRPCClient

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

func (*GRPCProviderPlugin) GRPCServer

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

type GRPCProvisioner

type GRPCProvisioner struct {
	// PluginClient provides a reference to the plugin.Client which controls the plugin process.
	// This allows the GRPCProvider a way to shutdown the plugin process.
	PluginClient *plugin.Client
	// contains filtered or unexported fields
}

provisioners.Interface grpc implementation

func (*GRPCProvisioner) Close

func (p *GRPCProvisioner) Close() error

func (*GRPCProvisioner) GetSchema

func (p *GRPCProvisioner) GetSchema() (resp provisioners.GetSchemaResponse)

func (*GRPCProvisioner) Stop

func (p *GRPCProvisioner) Stop() error

type GRPCProvisionerFunc

type GRPCProvisionerFunc func() proto.ProvisionerServer

type GRPCProvisionerPlugin

type GRPCProvisionerPlugin struct {
	plugin.Plugin
	GRPCProvisioner func() proto.ProvisionerServer
}

GRPCProvisionerPlugin is the plugin.GRPCPlugin implementation.

func (*GRPCProvisionerPlugin) GRPCClient

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

func (*GRPCProvisionerPlugin) GRPCServer

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

type ServeOpts

type ServeOpts struct {
	// Wrapped versions of the above plugins will automatically shimmed and
	// added to the GRPC functions when possible.
	GRPCProviderFunc    GRPCProviderFunc
	GRPCProvisionerFunc GRPCProvisionerFunc
}

ServeOpts are the configurations to serve a plugin.

type UIInput

type UIInput struct {
	Client *rpc.Client
}

UIInput is an implementation of tofu.UIInput that communicates over RPC.

func (*UIInput) Input

func (i *UIInput) Input(ctx context.Context, opts *tofu.InputOpts) (string, error)

type UIInputInputResponse

type UIInputInputResponse struct {
	Value string
	Error *plugin.BasicError
}

type UIInputServer

type UIInputServer struct {
	UIInput tofu.UIInput
}

UIInputServer is a net/rpc compatible structure for serving a UIInputServer. This should not be used directly.

func (*UIInputServer) Input

func (s *UIInputServer) Input(
	opts *tofu.InputOpts,
	reply *UIInputInputResponse) error

type UIOutput

type UIOutput struct {
	Client *rpc.Client
}

UIOutput is an implementatin of tofu.UIOutput that communicates over RPC.

func (*UIOutput) Output

func (o *UIOutput) Output(v string)

type UIOutputServer

type UIOutputServer struct {
	UIOutput tofu.UIOutput
}

UIOutputServer is the RPC server for serving UIOutput.

func (*UIOutputServer) Output

func (s *UIOutputServer) Output(
	v string,
	reply *interface{}) error

Directories

Path Synopsis
Package mock_tfplugin5 is a generated GoMock package.
Package mock_tfplugin5 is a generated GoMock package.

Jump to

Keyboard shortcuts

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