volume

package
v1.6.0 Latest Latest
Warning

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

Go to latest
Published: May 2, 2024 License: Apache-2.0 Imports: 17 Imported by: 1

Documentation

Index

Constants

View Source
const DefaultDisklessStoragePoolName = "DfltDisklessStorPool"

Variables

View Source
var (
	// RemoteAccessPolicyAnywhere allows remote access from anywhere
	RemoteAccessPolicyAnywhere = RemoteAccessPolicy{{}}
	// RemoteAccessPolicyLocalOnly allows access only to the local node, effectively disabling diskless access.
	RemoteAccessPolicyLocalOnly = RemoteAccessPolicy{{FromSame: []string{topology.LinstorNodeKey}}}
)
View Source
var DefaultRemoteAccessPolicy = RemoteAccessPolicyAnywhere

DefaultRemoteAccessPolicy is the access policy used by default when none is specified.

Functions

func ParseLayerList added in v0.8.0

func ParseLayerList(s string) ([]devicelayerkind.DeviceLayerKind, error)

ParseLayerList returns a slice of LayerType from a string of space-separated layers.

func PrunePattern added in v0.17.0

func PrunePattern(sources ...map[string]string) []map[string]string

PrunePattern returns the given list of pattern, removed of any duplicates or patterns which are already covered by a more general pattern.

Some examples

[{a:1}, {a:1}] => [{a:1}]
[{a:1}, {a:2}] => [{a:1}, {a:2}]
[{a:1, b:1}, {a:1}] => [{a:1}]
[{a:1, b:1}, {a:1, b:2}] => [{a:1, b:1}, {a:1, b:2}]
[{a:1}, {a:1, b:1}, {a:1, b:2}] => [{a:1}]

Types

type Assignment

type Assignment struct {
	// Node is the node that the assignment is valid for.
	Node string
	// Path is a location on the Node's filesystem where the volume may be accessed.
	Path string
}

Assignment represents a volume situated on a particular node.

type AttacherDettacher

type AttacherDettacher interface {
	Querier
	Attach(ctx context.Context, volId, node string, rwxBlock bool) error
	Detach(ctx context.Context, volId, node string) error
	NodeAvailable(ctx context.Context, node string) error
	FindAssignmentOnNode(ctx context.Context, volId, node string) (*Assignment, error)
	// Status returns the currently deployed nodes and condition of the given volume
	Status(ctx context.Context, volId string) ([]string, *csi.VolumeCondition, error)
}

AttacherDettacher handles operations relating to volume accessiblity on nodes.

type CreateDeleter

type CreateDeleter interface {
	Querier
	CompatibleVolumeId(name, pvcNamespace, pvcName string) string
	Create(ctx context.Context, vol *Info, params *Parameters, topologies *csi.TopologyRequirement) error
	Delete(ctx context.Context, volId string) error

	// AccessibleTopologies returns the list of key value pairs volume topologies
	// for the volume or nil if not applicable.
	AccessibleTopologies(ctx context.Context, volId string, params *Parameters) ([]*csi.Topology, error)

	// GetLegacyVolumeContext tries to fetch the volume context from legacy properties.
	GetLegacyVolumeParameters(ctx context.Context, volId string) (*Parameters, error)
}

CreateDeleter handles the creation and deletion of volumes.

type Expander added in v0.9.0

type Expander interface {
	NodeExpand(source, target string) error
	ControllerExpand(ctx context.Context, vol *Info) error
}

Expander handles the resizing operations for volumes.

type Info

type Info struct {
	ID            string
	SizeBytes     int64
	ResourceGroup string
	FsType        string
	Properties    map[string]string
	UseQuorum     bool
}

Info provides the everything need to manipulate volumes.

type Mounter added in v0.3.0

type Mounter interface {
	Mount(ctx context.Context, source, target, fsType string, readonly bool, mntOpts []string) error
	Unmount(target string) error
	IsNotMountPoint(target string) (bool, error)
}

Mounter handles the filesystems located on volumes.

type NodeInformer added in v0.10.0

type NodeInformer interface {
	GetNodeTopologies(ctx context.Context, nodename string) (*csi.Topology, error)
}

type Parameters added in v0.8.0

type Parameters struct {
	// ClientList is a list of nodes where the volume should be assigned to disklessly
	// at the time that the volume is first created.
	ClientList []string
	// NodeList is a list of nodes where the volume should be assigned to diskfully
	// at the time that the volume is first created. Specifying this overrides any
	// other automatic placement rules.
	NodeList []string
	// ReplicasOnDifferent is a list that corresponds to the `linstor resource create`
	// option of the same name.
	ReplicasOnDifferent []string
	// ReplicasOnSame is a list that corresponds to the `linstor resource create`
	// option of the same name.
	ReplicasOnSame []string
	// DisklessStoragePool is the diskless storage pool to use for diskless assignments.
	DisklessStoragePool string
	// DoNotPlaceWithRegex corresponds to the `linstor resource create`
	// option of the same name.
	DoNotPlaceWithRegex string
	// FSOpts is a string of filesystem options passed at creation time.
	FSOpts string
	// MountOpts is a string of mount options passed at mount time. Comma
	// separated like in /etc/fstab.
	MountOpts string
	// StoragePool is the storage pool to use for diskful assignments.
	StoragePools []string
	// PlacementCount is the number of replicas of the volume in total.
	PlacementCount int32
	// Disklessonremaining corresponds to the `linstor resource create`
	// option of the same name.
	Disklessonremaining bool
	// Encrypt volumes if true.
	Encryption bool
	// AllowRemoteVolumeAccess if true, volumes may be accessed over the network.
	AllowRemoteVolumeAccess RemoteAccessPolicy
	// LayerList is a list that corresponds to the `linstor resource create`
	// option of the same name.
	LayerList []devicelayerkind.DeviceLayerKind
	// PlacementPolicy determines where volumes are created.
	PlacementPolicy topology.PlacementPolicy
	// PostMountXfsOpts is an optional string of post-mount call
	PostMountXfsOpts string
	// ResourceGroup is the resource-group name in LINSTOR.
	ResourceGroup string
	// Properties are the properties to be set on the resource group.
	Properties map[string]string
	// UsePvcName derives the volume name from the PVC name+namespace, if that information is available.
	UsePvcName bool
	// OverProvision determines how much free capacity is reported.
	// If set, free capacity is calculated by (TotalCapacity * OverProvision) - ReservedCapacity.
	// If not set, the free capacity is taken directly from LINSTOR.
	OverProvision *float64
}

Parameters configuration for linstor volumes.

func NewParameters added in v0.8.0

func NewParameters(params map[string]string, topologyPrefix string) (Parameters, error)

NewParameters parses out the raw parameters we get and sets appropriate zero values

func (*Parameters) DisklessFlag added in v0.10.0

func (params *Parameters) DisklessFlag() (string, error)

DisklessFlag returns the diskless flag passed to resource create calls. It will select the flag matching the top-most layer that supports disk-less resources.

func (*Parameters) ToDiskfullResourceCreate added in v0.16.0

func (params *Parameters) ToDiskfullResourceCreate(id, node string) (lapi.ResourceCreate, error)

ToDiskfullResourceCreate prepares a Info to be deployed by linstor on a node with local storage.

func (*Parameters) ToDisklessResourceCreate added in v0.16.0

func (params *Parameters) ToDisklessResourceCreate(id, node string) (lapi.ResourceCreate, error)

ToDisklessResourceCreate prepares a Info to be deployed by linstor on a node without local storage.

func (*Parameters) ToResourceCreateList added in v0.16.0

func (params *Parameters) ToResourceCreateList(id string) ([]lapi.ResourceCreate, error)

ToResourceCreateList prepares a list of lapi.ResourceCreate to be used to manually assign resources based on the node and client lists of the volume.

func (*Parameters) ToResourceGroupModify added in v0.8.2

func (params *Parameters) ToResourceGroupModify(rg *lapi.ResourceGroup) (lapi.ResourceGroupModify, bool, error)

Convert parameters into a modify-object that reconciles any differences between parameters and resource group

type Querier

type Querier interface {
	// ListAllWithStatus returns a sorted list of volume and their status.
	ListAllWithStatus(ctx context.Context) ([]VolumeStatus, error)
	// FindByID returns nil when volume is not found.
	FindByID(ctx context.Context, ID string) (*Info, error)
	// AllocationSizeKiB returns the number of KiB required to provision required bytes.
	AllocationSizeKiB(requiredBytes, limitBytes int64) (int64, error)
	// CapacityBytes returns the amount of free space, in bytes, in the storage pool specified by the params and topology.
	CapacityBytes(ctx context.Context, pools []string, overProvision *float64, segments map[string]string) (int64, error)
}

Querier retrives various states of volumes.

type RemoteAccessPolicy added in v0.17.0

type RemoteAccessPolicy []RemoteAccessPolicyRule

RemoteAccessPolicy represents a policy for allowing diskless access.

func (RemoteAccessPolicy) AccessibleSegments added in v0.17.0

func (r RemoteAccessPolicy) AccessibleSegments(segments map[string]string) []map[string]string

AccessibleSegments applies the policy to a specific cluster segment.

func (RemoteAccessPolicy) MarshalText added in v0.17.0

func (r RemoteAccessPolicy) MarshalText() (text []byte, err error)

func (*RemoteAccessPolicy) Set added in v0.17.0

func (r *RemoteAccessPolicy) Set(s string) error

Set is used for setting a RemoteAccessPolicy via cli args.

func (*RemoteAccessPolicy) String added in v0.17.0

func (r *RemoteAccessPolicy) String() string

String is used for settings a RemoteAccessPolicy via cli args.

func (*RemoteAccessPolicy) UnmarshalText added in v0.17.0

func (r *RemoteAccessPolicy) UnmarshalText(text []byte) error

type RemoteAccessPolicyRule added in v0.17.0

type RemoteAccessPolicyRule struct {
	FromSame []string `yaml:"fromSame,omitempty"`
}

type Snapshot added in v1.2.0

type Snapshot struct {
	csi.Snapshot
	Remote string
}

type SnapshotCreateDeleter added in v0.8.0

type SnapshotCreateDeleter interface {
	// CompatibleSnapshotId returns an ID unique to the suggested name
	CompatibleSnapshotId(name string) string
	SnapCreate(ctx context.Context, id string, sourceVolId string, params *SnapshotParameters) (*Snapshot, error)
	SnapDelete(ctx context.Context, snap *Snapshot) error
	// FindSnapByID searches the snapshot in the backend
	// It returns:
	// * the snapshot, nil if not found
	// * true, if the snapshot is either in progress or successful
	// * any error encountered
	FindSnapByID(ctx context.Context, id string) (*Snapshot, bool, error)
	FindSnapsBySource(ctx context.Context, sourceVol *Info, start, limit int) ([]*Snapshot, error)
	// List Snapshots should return a sorted list of snapshots.
	ListSnaps(ctx context.Context, start, limit int) ([]*Snapshot, error)
	// VolFromSnap creates a new volume based on the provided snapshot.
	VolFromSnap(ctx context.Context, snap *Snapshot, vol *Info, params *Parameters, snapParams *SnapshotParameters, topologies *csi.TopologyRequirement) error
	// DeleteTemporarySnapshotID deletes the temporary snapshot ID.
	DeleteTemporarySnapshotID(ctx context.Context, id string) error
}

SnapshotCreateDeleter handles the creation and deletion of snapshots.

type SnapshotParameters added in v0.18.0

type SnapshotParameters struct {
	Type                     SnapshotType `json:"type,omitempty"`
	AllowIncremental         bool         `json:"allow-incremental"`
	RemoteName               string       `json:"remote-name,omitempty"`
	DeleteLocal              bool         `json:"delete-local,omitempty"`
	S3Endpoint               string       `json:"s3-endpoint,omitempty"`
	S3Bucket                 string       `json:"s3-bucket,omitempty"`
	S3SigningRegion          string       `json:"s3-signing-region,omitempty"`
	S3UsePathStyle           bool         `json:"s3-use-path-style"`
	S3AccessKey              string       `json:"-"`
	S3SecretKey              string       `json:"-"`
	LinstorTargetUrl         string       `json:"linstor-target-url,omitempty"`
	LinstorTargetClusterID   string       `json:"linstor-target-cluster-id,omitempty"`
	LinstorTargetStoragePool string       `json:"linstor-target-storage-pool,omitempty"`
}

func NewSnapshotParameters added in v0.18.0

func NewSnapshotParameters(params, secrets map[string]string) (*SnapshotParameters, error)

func (*SnapshotParameters) String added in v0.18.0

func (s *SnapshotParameters) String() string

type SnapshotType added in v0.18.0

type SnapshotType int
const (
	SnapshotTypeInCluster SnapshotType = iota
	SnapshotTypeS3
	SnapshotTypeLinstor
)

func SnapshotTypeString added in v0.18.0

func SnapshotTypeString(s string) (SnapshotType, error)

SnapshotTypeString retrieves an enum value from the enum constants string name. Throws an error if the param is not part of the enum.

func SnapshotTypeValues added in v0.18.0

func SnapshotTypeValues() []SnapshotType

SnapshotTypeValues returns all values of the enum

func (SnapshotType) IsASnapshotType added in v0.18.0

func (i SnapshotType) IsASnapshotType() bool

IsASnapshotType returns "true" if the value is listed in the enum definition. "false" otherwise

func (SnapshotType) String added in v0.18.0

func (i SnapshotType) String() string

type VolumeStats added in v0.8.0

type VolumeStats struct {
	AvailableBytes  int64
	TotalBytes      int64
	UsedBytes       int64
	AvailableInodes int64
	TotalInodes     int64
	UsedInodes      int64
}

VolumeStats provides details about filesystem usage.

type VolumeStatter added in v0.8.0

type VolumeStatter interface {
	// GetVolumeStats determines filesystem usage.
	GetVolumeStats(path string) (VolumeStats, error)
}

VolumeStatter provides info about volume/filesystem usage.

type VolumeStatus added in v1.2.3

type VolumeStatus struct {
	Info
	Nodes      []string
	Conditions *csi.VolumeCondition
}

Jump to

Keyboard shortcuts

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