csimanager

package
v1.5.10 Latest Latest
Warning

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

Go to latest
Published: Oct 30, 2023 License: MPL-2.0 Imports: 18 Imported by: 36

Documentation

Overview

* 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)

Index

Constants

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

Variables

This section is empty.

Functions

This section is empty.

Types

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

	// WaitForPlugin waits for the plugin to become available,
	// or until its context is canceled or times out.
	WaitForPlugin(ctx context.Context, pluginType, pluginID string) error

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

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

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 MockCSIManager added in v1.4.14

type MockCSIManager struct {
	VM *MockVolumeManager

	NextWaitForPluginErr    error
	NextManagerForPluginErr error
}

func (*MockCSIManager) ManagerForPlugin added in v1.4.14

func (m *MockCSIManager) ManagerForPlugin(_ context.Context, pluginID string) (VolumeManager, error)

func (*MockCSIManager) PluginManager added in v1.4.14

func (m *MockCSIManager) PluginManager() pluginmanager.PluginManager

func (*MockCSIManager) Shutdown added in v1.4.14

func (m *MockCSIManager) Shutdown()

func (*MockCSIManager) WaitForPlugin added in v1.4.14

func (m *MockCSIManager) WaitForPlugin(_ context.Context, pluginType, pluginID string) error

type MockExpandVolumeCall added in v1.4.14

type MockExpandVolumeCall struct {
	VolID, RemoteID, AllocID string
	UsageOpts                *UsageOptions
	Capacity                 *csi.CapacityRange
}

type MockVolumeManager added in v1.4.14

type MockVolumeManager struct {
	CallCounter *testutil.CallCounter

	Mounts map[string]bool // lazy set

	NextMountVolumeErr   error
	NextUnmountVolumeErr error

	NextExpandVolumeErr  error
	LastExpandVolumeCall *MockExpandVolumeCall
}

func (*MockVolumeManager) ExpandVolume added in v1.4.14

func (m *MockVolumeManager) ExpandVolume(_ context.Context, volID, remoteID, allocID string, usageOpts *UsageOptions, capacity *csi.CapacityRange) (int64, error)

func (*MockVolumeManager) ExternalID added in v1.4.14

func (m *MockVolumeManager) ExternalID() string

func (*MockVolumeManager) HasMount added in v1.4.14

func (m *MockVolumeManager) HasMount(_ context.Context, mountInfo *MountInfo) (bool, error)

func (*MockVolumeManager) MountVolume added in v1.4.14

func (m *MockVolumeManager) MountVolume(_ context.Context, vol *nstructs.CSIVolume, alloc *nstructs.Allocation, usageOpts *UsageOptions, publishContext map[string]string) (*MountInfo, error)

func (*MockVolumeManager) UnmountVolume added in v1.4.14

func (m *MockVolumeManager) UnmountVolume(_ context.Context, volID, remoteID, allocID string, usageOpts *UsageOptions) error

type MountInfo

type MountInfo struct {
	Source   string
	IsDevice bool
}

func (*MountInfo) Copy added in v1.3.14

func (mi *MountInfo) Copy() *MountInfo

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 structs.CSIVolumeAttachmentMode
	AccessMode     structs.CSIVolumeAccessMode
	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 VolumeManager added in v1.4.13

type VolumeManager 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
	HasMount(ctx context.Context, mountInfo *MountInfo) (bool, error)
	ExternalID() string
}

Jump to

Keyboard shortcuts

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