* csimanager manages locally running CSI Plugins on a Nomad host, and provides a few different interfaces.

It provides: - a pluginmanager.PluginManager implementation that is used to fingerprint and

heartbeat local node plugins

- (TODO) a csimanager.AttachmentWaiter implementation that can be used to wait for an

external CSIVolume to be attached to the node before returning

- (TODO) a csimanager.NodeController implementation that is used to manage the node-local

portions of the CSI specification, and encompassess volume staging/publishing

- (TODO) a csimanager.VolumeChecker implementation that can be used by hooks to ensure

their volumes are healthy(ish)



View Source
const (
	DefaultMountActionTimeout = 2 * time.Minute
	StagingDirName            = "staging"
	AllocSpecificDirName      = "per-alloc"


This section is empty.


This section is empty.


type Config

type Config struct {
	Logger                hclog.Logger
	DynamicRegistry       dynamicplugins.Registry
	UpdateNodeCSIInfoFunc UpdateNodeCSIInfoFunc
	PluginResyncPeriod    time.Duration
	TriggerNodeEvent      TriggerNodeEvent

type Manager

type Manager interface {
	// PluginManager returns a PluginManager for use by the node fingerprinter.
	PluginManager() pluginmanager.PluginManager

	// MounterForPlugin returns a VolumeMounter for the plugin ID associated
	// with the volume.	Returns an error if this plugin isn't registered.
	MounterForPlugin(ctx context.Context, pluginID string) (VolumeMounter, error)

	// Shutdown shuts down the Manager and unmounts any locally attached volumes.

func New

func New(config *Config) Manager

New returns a new PluginManager that will handle managing CSI plugins from the dynamicRegistry from the provided Config.

type MountInfo

type MountInfo struct {
	Source   string
	IsDevice bool

type TriggerNodeEvent

type TriggerNodeEvent func(*structs.NodeEvent)

type UpdateNodeCSIInfoFunc

type UpdateNodeCSIInfoFunc func(string, *structs.CSIInfo)

UpdateNodeCSIInfoFunc is the callback used to update the node from fingerprinting

type UsageOptions

type UsageOptions struct {
	ReadOnly       bool
	AttachmentMode string
	AccessMode     string
	MountOptions   *structs.CSIMountOptions

func (*UsageOptions) ToFS

func (u *UsageOptions) ToFS() string

ToFS is used by a VolumeManager to construct the path to where a volume should be staged/published. It should always return a string that is easy enough to manage as a filesystem path segment (e.g avoid starting the string with a special character).

type VolumeMounter

type VolumeMounter interface {
	MountVolume(ctx context.Context, vol *structs.CSIVolume, alloc *structs.Allocation, usageOpts *UsageOptions, publishContext map[string]string) (*MountInfo, error)
	UnmountVolume(ctx context.Context, volID, remoteID, allocID string, usageOpts *UsageOptions) error