Version: v0.0.0-...-51f9457 Latest Latest

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

Go to latest
Published: Jul 9, 2021 License: Apache-2.0 Imports: 28 Imported by: 0



Package host implements the plugin hosting functionality.



This section is empty.


View Source
var ErrAborted = errors.Reason("the admission plugin is terminating").Err()

ErrAborted is returned by CheckAdmission promise when the plugin terminates.

View Source
var ErrTerminated = errors.Reason("terminated with 0 exit code").Err()

ErrTerminated is returned by PluginProcess.Err() if the plugin process exited with 0 exit code.


This section is empty.


type AdmissionPlugin

type AdmissionPlugin struct {
	// contains filtered or unexported fields

AdmissionPlugin launches and communicates with an admission plugin.

It is instantiated by the CIPD client if it detects there's an admission plugin configured.

Implements plugin.AdmissionPlugin interface.

func NewAdmissionPlugin

func NewAdmissionPlugin(ctx context.Context, host *Host, args []string) *AdmissionPlugin

NewAdmissionPlugin returns a host-side representation of an admission plugin.

The returned *AdmissionPlugin can be used right away to enqueue admission checks. The plugin subprocess will lazily be started on the first CheckAdmission call. All enqueued checks will eventually be processed by the plugin or rejected if the plugin fails to start.

The context is used for logging from the plugin.

func (*AdmissionPlugin) CheckAdmission

func (p *AdmissionPlugin) CheckAdmission(pin common.Pin) plugin.Promise

CheckAdmission enqueues an admission check to be performed by the plugin.

The plugin will be asked if it's OK to deploy a package with the given pin hosted on the CIPD service used by the running CIPD client.

Returns a promise which is resolved when the result is available. If such check is already pending (or has been done before), returns an existing (perhaps already resolved) promise.

func (*AdmissionPlugin) ClearCache

func (p *AdmissionPlugin) ClearCache()

ClearCache drops all resolved promises to free up some memory.

func (*AdmissionPlugin) Close

func (p *AdmissionPlugin) Close(ctx context.Context)

Close terminates the plugin (if it was running) and aborts all pending checks.

Tries to gracefully terminate the plugin, killing it with SIGKILL on the context timeout or after 5 sec.

Note that calling Close is not necessary if the plugin host itself terminates. The plugin subprocess will be terminated by the host in this case.

type Controller

type Controller struct {
	Admissions protocol.AdmissionsServer // non-nil for deployment admission plugins

Controller lives in the host process and manages communication with a plugin.

Each instance of a plugin has a Controller associated with it. The controller exposes a subset of gRPC services that the particular plugin is allowed to call. That way it's possible to have different kinds of plugins by exposing different services to them.

type Host

type Host struct {
	// PluginsContext is used for asynchronous logging from plugins.
	// If not set, all logs from plugins will be ignored.
	PluginsContext context.Context
	// contains filtered or unexported fields

Host launches plugin subprocesses and accepts connections from them.

Implements plugin.Host interface.

func (*Host) Close

func (h *Host) Close(ctx context.Context)

Close terminates all plugins and releases all resources.

Waits for the plugins to terminate gracefully. On context deadline kills them with SIGKILL.

It is a part of plugin.Host interface.

func (*Host) Config

func (h *Host) Config() plugin.Config

Config returns the config passed to Initialize or a default one.

func (*Host) Initialize

func (h *Host) Initialize(cfg plugin.Config) error

Initialize is called when the CIPD client starts before any other call.

It is a part of plugin.Host interface.

func (*Host) LaunchPlugin

func (h *Host) LaunchPlugin(ctx context.Context, args []string, ctrl *Controller) (*PluginProcess, error)

LaunchPlugin launches a plugin subprocesses.

Does not wait for it to connect. Returns a handle that can be used to control the process.

Uses the given context for logging from the plugin.

func (*Host) NewAdmissionPlugin

func (h *Host) NewAdmissionPlugin(cmdLine []string) (plugin.AdmissionPlugin, error)

NewAdmissionPlugin returns a handle to an admission plugin.

It is a part of plugin.Host interface.

type PluginProcess

type PluginProcess struct {
	// contains filtered or unexported fields

PluginProcess represents a plugin subprocess.

func (*PluginProcess) Done

func (p *PluginProcess) Done() <-chan struct{}

Done returns a channel that closes when the plugin terminates.

func (*PluginProcess) Err

func (p *PluginProcess) Err() error

Err returns an error if the plugin terminated (gracefully or not).

Valid only if Done() is already closed, nil otherwise.

func (*PluginProcess) Terminate

func (p *PluginProcess) Terminate(ctx context.Context) error

Terminate tries to gracefully terminate the plugin process, killing it with SIGKILL on the context expiration or after 5 sec.

Returns the same value as Err(). Does nothing if the process is already terminated.

type Promise

type Promise struct {
	// contains filtered or unexported fields

Promise is a pending or finished result of an admission check.

Implements plugin.Promise interface.

func (*Promise) Wait

func (p *Promise) Wait(ctx context.Context) error

Wait blocks until the promise is fulfilled or the context expires.

Returns nil if the admission check passed.

Jump to

Keyboard shortcuts

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