plugins

package
v1.7.3 Latest Latest
Warning

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

Go to latest
Published: Aug 3, 2017 License: Apache-2.0 Imports: 11 Imported by: 0

Documentation

Index

Constants

View Source
const PluginDescriptorFilename = "plugin.yaml"

Variables

View Source
var (
	IncompleteError  = fmt.Errorf("incomplete plugin descriptor: name, shortDesc and command fields are required")
	InvalidNameError = fmt.Errorf("plugin name can't contain spaces")
)

Functions

func FlagToEnvName

func FlagToEnvName(flagName, prefix string) string

Types

type Description

type Description struct {
	Name      string    `json:"name"`
	ShortDesc string    `json:"shortDesc"`
	LongDesc  string    `json:"longDesc,omitempty"`
	Example   string    `json:"example,omitempty"`
	Command   string    `json:"command"`
	Tree      []*Plugin `json:"tree,omitempty"`
}

PluginDescription holds everything needed to register a plugin as a command. Usually comes from a descriptor file.

type DirectoryPluginLoader

type DirectoryPluginLoader struct {
	Directory string
}

DirectoryPluginLoader is a PluginLoader that loads plugin descriptions from a given directory in the filesystem. Plugins are located in subdirs under the loader "root", where each subdir must contain, at least, a plugin descriptor file called "plugin.yaml" that translates into a PluginDescription.

func (*DirectoryPluginLoader) Load

func (l *DirectoryPluginLoader) Load() (Plugins, error)

Load reads the directory the loader holds and loads plugin descriptions.

type DummyPluginLoader

type DummyPluginLoader struct{}

DummyPluginLoader loads nothing.

func (*DummyPluginLoader) Load

func (l *DummyPluginLoader) Load() (Plugins, error)

type EmptyEnvProvider

type EmptyEnvProvider struct{}

func (*EmptyEnvProvider) Env

func (p *EmptyEnvProvider) Env() (EnvList, error)

type Env

type Env struct {
	N string
	V string
}

Env represents an environment variable with its name and value

func FlagToEnv

func FlagToEnv(flag *pflag.Flag, prefix string) Env

func (Env) String

func (e Env) String() string

type EnvList

type EnvList []Env

EnvList is a list of Env

func (EnvList) Merge

func (e EnvList) Merge(s ...string) EnvList

func (EnvList) Slice

func (e EnvList) Slice() []string

type EnvProvider

type EnvProvider interface {
	Env() (EnvList, error)
}

EnvProvider provides the environment in which the plugin will run.

type ExecPluginRunner

type ExecPluginRunner struct{}

ExecPluginRunner is a PluginRunner that uses Go's os/exec to run plugins.

func (*ExecPluginRunner) Run

func (r *ExecPluginRunner) Run(plugin *Plugin, ctx RunningContext) error

Run takes a given plugin and runs it in a given context using os/exec, returning any error found while running.

type MultiEnvProvider

type MultiEnvProvider []EnvProvider

MultiEnvProvider is an EnvProvider for multiple env providers, returns on first error.

func (MultiEnvProvider) Env

func (p MultiEnvProvider) Env() (EnvList, error)

type MultiPluginLoader

type MultiPluginLoader []PluginLoader

MultiPluginLoader is a PluginLoader that can encapsulate multiple plugin loaders, a successful loading means every encapsulated loader was able to load without errors.

func (MultiPluginLoader) Load

func (l MultiPluginLoader) Load() (Plugins, error)

type OSEnvProvider

type OSEnvProvider struct{}

OSEnvProvider provides current environment from the operating system.

func (*OSEnvProvider) Env

func (p *OSEnvProvider) Env() (EnvList, error)

type Plugin

type Plugin struct {
	Description
	Source
	Context RunningContext `json:"-"`
}

Plugin is the representation of a CLI extension (plugin).

func (Plugin) IsValid

func (p Plugin) IsValid() bool

func (Plugin) Validate

func (p Plugin) Validate() error

type PluginCallerEnvProvider

type PluginCallerEnvProvider struct{}

PluginCallerEnvProvider provides env with the path to the caller binary (usually full path to 'kubectl').

func (*PluginCallerEnvProvider) Env

type PluginDescriptorEnvProvider

type PluginDescriptorEnvProvider struct {
	Plugin *Plugin
}

PluginDescriptorEnvProvider provides env vars with information about the running plugin.

func (*PluginDescriptorEnvProvider) Env

type PluginLoader

type PluginLoader interface {
	Load() (Plugins, error)
}

PluginLoader is capable of loading a list of plugin descriptions.

func PathFromEnvVarPluginLoader

func PathFromEnvVarPluginLoader(envVarName string, subdirs ...string) PluginLoader

PathFromEnvVarPluginLoader is a PluginLoader that loads plugins from one or more directories specified by the provided env var name. In case the env var is not set, the PluginLoader just loads nothing. A list of subdirectories can be provided, which will be appended to each path specified by the env var.

func PluginsEnvVarPluginLoader

func PluginsEnvVarPluginLoader() PluginLoader

PluginsEnvVarPluginLoader is a PluginLoader that loads plugins from one or more directories specified by the KUBECTL_PLUGINS_PATH env var.

func UserDirPluginLoader

func UserDirPluginLoader() PluginLoader

UserDirPluginLoader is a PluginLoader that loads plugins from the "plugins" directory under the user's kubeconfig dir (usually "~/.kube/plugins/").

func XDGDataPluginLoader

func XDGDataPluginLoader() PluginLoader

XDGDataPluginLoader is a PluginLoader that loads plugins from one or more directories specified by the XDG system directory structure spec in the XDG_DATA_DIRS env var, plus the "kubectl/plugins/" suffix. According to the spec, if XDG_DATA_DIRS is not set it defaults to "/usr/local/share:/usr/share".

type PluginRunner

type PluginRunner interface {
	Run(plugin *Plugin, ctx RunningContext) error
}

PluginRunner is capable of running a plugin in a given running context.

type Plugins

type Plugins []*Plugin

Plugins is a list of plugins.

type RunningContext

type RunningContext struct {
	In          io.Reader
	Out         io.Writer
	ErrOut      io.Writer
	Args        []string
	EnvProvider EnvProvider
	WorkingDir  string
}

RunningContext holds the context in which a given plugin is running - the in, out, and err streams, arguments and environment passed to it, and the working directory.

type Source

type Source struct {
	Dir            string `json:"-"`
	DescriptorName string `json:"-"`
}

PluginSource holds the location of a given plugin in the filesystem.

type TolerantMultiPluginLoader

type TolerantMultiPluginLoader []PluginLoader

TolerantMultiPluginLoader is a PluginLoader than encapsulates multiple plugins loaders, but is tolerant to errors while loading from them.

func (TolerantMultiPluginLoader) Load

Jump to

Keyboard shortcuts

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