util

package
v1.1.0 Latest Latest
Warning

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

Go to latest
Published: Jul 12, 2019 License: Apache-2.0 Imports: 24 Imported by: 0

Documentation

Index

Constants

View Source
const (
	CephConfigPath = "/etc/ceph/ceph.conf"
)
View Source
const (
	// MiB - MebiByte size
	MiB = 1024 * 1024
)

remove this once kubernetes v1.14.0 release is done https://github.com/kubernetes/cloud-provider/blob/master/volume/helpers/rounding.go

View Source
const (
	// PluginFolder defines location of plugins
	PluginFolder = "/var/lib/kubelet/plugins"
)

Variables

This section is empty.

Functions

func CreateObject

func CreateObject(monitors string, cr *Credentials, poolName, namespace, objectName string) error

CreateObject creates the object name passed in and returns ErrObjectExists if the provided object is already present in rados

func ExecCommand

func ExecCommand(program string, args ...string) (stdout, stderr []byte, err error)

ExecCommand executes passed in program with args and returns separate stdout and stderr streams

func GenerateVolID

func GenerateVolID(monitors string, cr *Credentials, pool, clusterID, objUUID string, volIDVersion uint16) (string, error)

GenerateVolID generates a volume ID based on passed in parameters and version, to be returned to the CO system

func GetK8sNamespace

func GetK8sNamespace() string

GetK8sNamespace returns pod namespace. if pod namespace is empty it returns default namespace

func GetMonValFromSecret

func GetMonValFromSecret(secrets map[string]string) (string, error)

func GetOMapValue

func GetOMapValue(monitors string, cr *Credentials, poolName, namespace, oMapName, oMapKey string) (string, error)

GetOMapValue gets the value for the given key from the named omap

func GetPoolID

func GetPoolID(monitors string, cr *Credentials, poolName string) (int64, error)

GetPoolID searches a list of pools in a cluster and returns the ID of the pool that matches the passed in poolName parameter

func GetPoolName

func GetPoolName(monitors string, cr *Credentials, poolID int64) (string, error)

GetPoolName lists all pools in a ceph cluster, and matches the pool whose pool ID is equal to the requested poolID parameter

func Mons

func Mons(pathToConfig, clusterID string) (string, error)

func NewK8sClient

func NewK8sClient() *k8s.Clientset

NewK8sClient create kubernetes client

func RemoveOMapKey

func RemoveOMapKey(monitors string, cr *Credentials, poolName, namespace, oMapName, oMapKey string) error

RemoveOMapKey removes the omap key from the given omap name

func RemoveObject

func RemoveObject(monitors string, cr *Credentials, poolName, namespace, oMapName string) error

RemoveObject removes the entire omap name passed in and returns ErrObjectNotFound is provided omap is not found in rados

func RoundUpToMiB

func RoundUpToMiB(size int64) int64

RoundUpToMiB rounds up given quantity upto chunks of MiB

func SetOMapKeyValue

func SetOMapKeyValue(monitors string, cr *Credentials, poolName, namespace, oMapName, oMapKey, keyValue string) error

SetOMapKeyValue sets the given key and value into the provided Ceph omap name

func StripSecretInArgs

func StripSecretInArgs(args []string) []string

StripSecretInArgs strips values of either "--key" or "secret=". `args` is left unchanged. Expects only one occurrence of either "--key" or "secret=".

func ValidateDriverName

func ValidateDriverName(driverName string) error

ValidateDriverName validates the driver name

func WriteCephConfig

func WriteCephConfig() error

WriteCephConfig writes out a basic ceph.conf file, making it easy to use ceph related CLIs

Types

type CSIIdentifier

type CSIIdentifier struct {
	LocationID      int64
	EncodingVersion uint16
	ClusterID       string
	ObjectUUID      string
}

CSIIdentifier contains the elements that form a CSI ID to be returned by the CSI plugin, and contains enough information to decompose and extract required cluster and pool information to locate the volume that relates to the CSI ID.

The CSI identifier is composed as elaborated in the comment against ComposeCSIID and thus, DecomposeCSIID is the inverse of the same function.

The CSIIdentifier structure carries the following fields,

  • LocationID: 64 bit integer identifier determining the location of the volume on the Ceph cluster. It is the ID of the poolname or fsname, for RBD or CephFS backed volumes respectively.
  • EncodingVersion: Carries the version number of the encoding scheme used to encode the CSI ID, and is preserved for any future proofing w.r.t changes in the encoding scheme, and to retain ability to parse backward compatible encodings.
  • ClusterID: Is a unique ID per cluster that the CSI instance is serving and is restricted to lengths that can be accommodated in the encoding scheme.
  • ObjectUUID: Is the on-disk uuid of the object (image/snapshot) name, for the CSI volume that corresponds to this CSI ID.

func (CSIIdentifier) ComposeCSIID

func (ci CSIIdentifier) ComposeCSIID() (string, error)

func (*CSIIdentifier) DecomposeCSIID

func (ci *CSIIdentifier) DecomposeCSIID(composedCSIID string) (err error)

DecomposeCSIID composes a CSIIdentifier from passed in string

type CSIJournal

type CSIJournal struct {
	// contains filtered or unexported fields
}

func NewCSISnapshotJournal

func NewCSISnapshotJournal() *CSIJournal

CSISnapshotSnapshot returns an instance of snapshot keys

func NewCSIVolumeJournal

func NewCSIVolumeJournal() *CSIJournal

CSIVolumeJournal returns an instance of volume keys

func (*CSIJournal) CheckReservation

func (cj *CSIJournal) CheckReservation(monitors string, cr *Credentials, pool, reqName, parentName string) (string, error)

CheckReservation checks if given request name contains a valid reservation - If there is a valid reservation, then the corresponding UUID for the volume/snapshot is returned - If there is a reservation that is stale (or not fully cleaned up), it is garbage collected using the UndoReservation call, as appropriate - If a snapshot is being checked, then its source is matched to the parentName that is provided

NOTE: As the function manipulates omaps, it should be called with a lock against the request name held, to prevent parallel operations from modifying the state of the omaps for this request name.

Return values:

  • string: Contains the UUID that was reserved for the passed in reqName, empty if there was no reservation found
  • error: non-nil in case of any errors

func (*CSIJournal) GetObjectUUIDData

func (cj *CSIJournal) GetObjectUUIDData(monitors string, cr *Credentials, pool, objectUUID string, snapSource bool) (string, string, error)

GetObjectUUIDData fetches all keys from a UUID directory Return values:

  • string: Contains the request name for the passed in UUID
  • string: Contains the parent image name for the passed in UUID, if it is a snapshot
  • error: non-nil in case of any errors

func (*CSIJournal) NamingPrefix

func (cj *CSIJournal) NamingPrefix() string

NamingPrefix returns the value of naming prefix from the journal keys

func (*CSIJournal) ReserveName

func (cj *CSIJournal) ReserveName(monitors string, cr *Credentials, pool, reqName, parentName string) (string, error)

ReserveName adds respective entries to the csiDirectory omaps, post generating a target UUIDDirectory for use. Further, these functions update the UUIDDirectory omaps, to store back pointers to the CSI generated request names.

NOTE: As the function manipulates omaps, it should be called with a lock against the request name held, to prevent parallel operations from modifying the state of the omaps for this request name.

Return values:

  • string: Contains the UUID that was reserved for the passed in reqName
  • error: non-nil in case of any errors

func (*CSIJournal) SetCSIDirectorySuffix

func (cj *CSIJournal) SetCSIDirectorySuffix(suffix string)

SetCSIDirectorySuffix sets the given suffix for the csiDirectory omap

func (*CSIJournal) SetNamespace

func (cj *CSIJournal) SetNamespace(ns string)

SetNamespace sets the namespace in which all RADOS objects would be created

func (*CSIJournal) UndoReservation

func (cj *CSIJournal) UndoReservation(monitors string, cr *Credentials, pool, volName, reqName string) error

UndoReservation undoes a reservation, in the reverse order of ReserveName - The UUID directory is cleaned up before the VolName key in the csiDirectory is cleaned up

NOTE: Ensure that the Ceph volume (image or FS subvolume) backing the reservation is cleaned up prior to cleaning up the reservation

NOTE: As the function manipulates omaps, it should be called with a lock against the request name held, to prevent parallel operations from modifying the state of the omaps for this request name.

type CacheEntryNotFound

type CacheEntryNotFound struct {
	// contains filtered or unexported fields
}

CacheEntryNotFound is an error type for "Not Found" cache errors

type CachePersister

type CachePersister interface {
	Create(identifier string, data interface{}) error
	Get(identifier string, data interface{}) error
	ForAll(pattern string, destObj interface{}, f ForAllFunc) error
	Delete(identifier string) error
}

CachePersister interface implemented for store

func CreatePersistanceStorage

func CreatePersistanceStorage(sPath, metaDataStore, driverName string) (CachePersister, error)

CreatePersistanceStorage creates storage path and initializes new cache

func NewCachePersister

func NewCachePersister(metadataStore, driverName string) (CachePersister, error)

NewCachePersister returns CachePersister based on store

type Credentials

type Credentials struct {
	ID  string
	Key string
}

func GetAdminCredentials

func GetAdminCredentials(secrets map[string]string) (*Credentials, error)

func GetUserCredentials

func GetUserCredentials(secrets map[string]string) (*Credentials, error)

type ErrKeyNotFound

type ErrKeyNotFound struct {
	// contains filtered or unexported fields
}

ErrKeyNotFound is returned when requested key in omap is not found

func (ErrKeyNotFound) Error

func (e ErrKeyNotFound) Error() string

type ErrObjectExists

type ErrObjectExists struct {
	// contains filtered or unexported fields
}

ErrObjectExists is returned when named omap is already present in rados

func (ErrObjectExists) Error

func (e ErrObjectExists) Error() string

type ErrObjectNotFound

type ErrObjectNotFound struct {
	// contains filtered or unexported fields
}

ErrObjectNotFound is returned when named omap is not found in rados

func (ErrObjectNotFound) Error

func (e ErrObjectNotFound) Error() string

type ErrSnapNameConflict

type ErrSnapNameConflict struct {
	// contains filtered or unexported fields
}

ErrSnapNameConflict is generated when a requested CSI snap name already exists on RBD but with different properties, and hence is in conflict with the passed in CSI volume name

func (ErrSnapNameConflict) Error

func (e ErrSnapNameConflict) Error() string

type ForAllFunc

type ForAllFunc func(identifier string) error

ForAllFunc is a unary predicate for visiting all cache entries matching the `pattern' in CachePersister's ForAll function.

type IDLock

type IDLock struct {
	// contains filtered or unexported fields
}

IDLock is a per identifier lock with a use counter that retains a number of users of the lock. IDLocker is a map of IDLocks holding the IDLocks based on a passed in identifier. Typical usage (post creating an IDLocker) is to Lock/Unlock based on identifiers as per the API.

type IDLocker

type IDLocker struct {
	// contains filtered or unexported fields
}

IDLock is a per identifier lock with a use counter that retains a number of users of the lock. IDLocker is a map of IDLocks holding the IDLocks based on a passed in identifier. Typical usage (post creating an IDLocker) is to Lock/Unlock based on identifiers as per the API.

func NewIDLocker

func NewIDLocker() *IDLocker

func (*IDLocker) Lock

func (lkr *IDLocker) Lock(identifier string) *IDLock

func (*IDLocker) Unlock

func (lkr *IDLocker) Unlock(lk *IDLock, identifier string)

type K8sCMCache

type K8sCMCache struct {
	Client    *k8s.Clientset
	Namespace string
}

K8sCMCache to store metadata

func (*K8sCMCache) Create

func (k8scm *K8sCMCache) Create(identifier string, data interface{}) error

Create stores the metadata in configmaps with identifier name

func (*K8sCMCache) Delete

func (k8scm *K8sCMCache) Delete(identifier string) error

Delete deletes the metadata in configmaps with identifier name

func (*K8sCMCache) ForAll

func (k8scm *K8sCMCache) ForAll(pattern string, destObj interface{}, f ForAllFunc) error

ForAll list the metadata in configmaps and filters outs based on the pattern

func (*K8sCMCache) Get

func (k8scm *K8sCMCache) Get(identifier string, data interface{}) error

Get retrieves the metadata in configmaps with identifier name

type NodeCache

type NodeCache struct {
	BasePath string
	CacheDir string
}

NodeCache to store metadata

func (*NodeCache) Create

func (nc *NodeCache) Create(identifier string, data interface{}) error

Create creates the metadata file in cache directory with identifier name

func (*NodeCache) Delete

func (nc *NodeCache) Delete(identifier string) error

Delete deletes the metadata file from cache directory with identifier name

func (*NodeCache) EnsureCacheDirectory

func (nc *NodeCache) EnsureCacheDirectory(cacheDir string) error

EnsureCacheDirectory creates cache directory if not present

func (*NodeCache) ForAll

func (nc *NodeCache) ForAll(pattern string, destObj interface{}, f ForAllFunc) error

ForAll list the metadata in Nodecache and filters outs based on the pattern

func (*NodeCache) Get

func (nc *NodeCache) Get(identifier string, data interface{}) error

Get retrieves the metadata from cache directory with identifier name

Jump to

Keyboard shortcuts

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