volume

package
v0.15.1-0...-97e4549 Latest Latest
Warning

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

Go to latest
Published: Apr 16, 2015 License: Apache-2.0 Imports: 12 Imported by: 0

Documentation

Overview

Package volume includes internal representations of external volume types as well as utility methods required to mount/unmount volumes to kubelets.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func GetAccessModesAsString

func GetAccessModesAsString(modes []api.AccessModeType) string

func NewFakeVolumeHost

func NewFakeVolumeHost(rootDir string, kubeClient client.Interface, plugins []VolumePlugin) *fakeVolumeHost

func RenameDirectory

func RenameDirectory(oldPath, newName string) (string, error)

Types

type Builder

type Builder interface {
	// Uses Interface to provide the path for Docker binds.
	Volume
	// SetUp prepares and mounts/unpacks the volume to a self-determined
	// directory path.  This may be called more than once, so
	// implementations must be idempotent.
	SetUp() error
	// SetUpAt prepares and mounts/unpacks the volume to the specified
	// directory path, which may or may not exist yet.  This may be called
	// more than once, so implementations must be idempotent.
	SetUpAt(dir string) error
}

Builder interface provides method to set up/mount the volume.

type Cleaner

type Cleaner interface {
	Volume
	// TearDown unmounts the volume from a self-determined directory and
	// removes traces of the SetUp procedure.
	TearDown() error
	// TearDown unmounts the volume from the specified directory and
	// removes traces of the SetUp procedure.
	TearDownAt(dir string) error
}

Cleaner interface provides method to cleanup/unmount the volumes.

type FakeVolume

type FakeVolume struct {
	PodUID  types.UID
	VolName string
	Plugin  *FakeVolumePlugin
}

func (*FakeVolume) GetPath

func (fv *FakeVolume) GetPath() string

func (*FakeVolume) SetUp

func (fv *FakeVolume) SetUp() error

func (*FakeVolume) SetUpAt

func (fv *FakeVolume) SetUpAt(dir string) error

func (*FakeVolume) TearDown

func (fv *FakeVolume) TearDown() error

func (*FakeVolume) TearDownAt

func (fv *FakeVolume) TearDownAt(dir string) error

type FakeVolumePlugin

type FakeVolumePlugin struct {
	PluginName string
	Host       VolumeHost
}

FakeVolumePlugin is useful for testing. It tries to be a fully compliant plugin, but all it does is make empty directories. Use as:

volume.RegisterPlugin(&FakePlugin{"fake-name"})

func (*FakeVolumePlugin) CanSupport

func (plugin *FakeVolumePlugin) CanSupport(spec *Spec) bool

func (*FakeVolumePlugin) GetAccessModes

func (plugin *FakeVolumePlugin) GetAccessModes() []api.AccessModeType

func (*FakeVolumePlugin) Init

func (plugin *FakeVolumePlugin) Init(host VolumeHost)

func (*FakeVolumePlugin) Name

func (plugin *FakeVolumePlugin) Name() string

func (*FakeVolumePlugin) NewBuilder

func (plugin *FakeVolumePlugin) NewBuilder(spec *Spec, podRef *api.ObjectReference, opts VolumeOptions) (Builder, error)

func (*FakeVolumePlugin) NewCleaner

func (plugin *FakeVolumePlugin) NewCleaner(volName string, podUID types.UID) (Cleaner, error)

type PersistentVolumePlugin

type PersistentVolumePlugin interface {
	VolumePlugin
	// GetAccessModes describes the ways a given volume can be accessed/mounted.
	GetAccessModes() []api.AccessModeType
}

PersistentVolumePlugin is an extended interface of VolumePlugin and is used by volumes that want to provide long term persistence of data

type Spec

type Spec struct {
	Name                   string
	VolumeSource           api.VolumeSource
	PersistentVolumeSource api.PersistentVolumeSource
}

Spec is an internal representation of a volume. All API volume types translate to Spec.

func NewSpecFromPersistentVolume

func NewSpecFromPersistentVolume(pv *api.PersistentVolume) *Spec

NewSpecFromPersistentVolume creates an Spec from an api.PersistentVolume

func NewSpecFromVolume

func NewSpecFromVolume(vs *api.Volume) *Spec

NewSpecFromVolume creates an Spec from an api.Volume

type Volume

type Volume interface {
	// GetPath returns the directory path the volume is mounted to.
	GetPath() string
}

Volume represents a directory used by pods or hosts on a node. All method implementations of methods in the volume interface must be idempotent.

type VolumeHost

type VolumeHost interface {
	// GetPluginDir returns the absolute path to a directory under which
	// a given plugin may store data.  This directory might not actually
	// exist on disk yet.  For plugin data that is per-pod, see
	// GetPodPluginDir().
	GetPluginDir(pluginName string) string

	// GetPodVolumeDir returns the absolute path a directory which
	// represents the named volume under the named plugin for the given
	// pod.  If the specified pod does not exist, the result of this call
	// might not exist.
	GetPodVolumeDir(podUID types.UID, pluginName string, volumeName string) string

	// GetPodPluginDir returns the absolute path to a directory under which
	// a given plugin may store data for a given pod.  If the specified pod
	// does not exist, the result of this call might not exist.  This
	// directory might not actually exist on disk yet.
	GetPodPluginDir(podUID types.UID, pluginName string) string

	// GetKubeClient returns a client interface
	GetKubeClient() client.Interface

	// NewWrapperBuilder finds an appropriate plugin with which to handle
	// the provided spec.  This is used to implement volume plugins which
	// "wrap" other plugins.  For example, the "secret" volume is
	// implemented in terms of the "emptyDir" volume.
	NewWrapperBuilder(spec *Spec, podRef *api.ObjectReference, opts VolumeOptions) (Builder, error)

	// NewWrapperCleaner finds an appropriate plugin with which to handle
	// the provided spec.  See comments on NewWrapperBuilder for more
	// context.
	NewWrapperCleaner(spec *Spec, podUID types.UID) (Cleaner, error)
}

VolumeHost is an interface that plugins can use to access the kubelet.

type VolumeOptions

type VolumeOptions struct {
	// The rootcontext to use when performing mounts for a volume.
	RootContext string
}

VolumeOptions contains option information about a volume.

Currently, this struct containers only a single field for the rootcontext of the volume. This is a temporary measure in order to set the rootContext of tmpfs mounts correctly; it will be replaced and expanded on by future SecurityContext work.

type VolumePlugin

type VolumePlugin interface {
	// Init initializes the plugin.  This will be called exactly once
	// before any New* calls are made - implementations of plugins may
	// depend on this.
	Init(host VolumeHost)

	// Name returns the plugin's name.  Plugins should use namespaced names
	// such as "example.com/volume".  The "kubernetes.io" namespace is
	// reserved for plugins which are bundled with kubernetes.
	Name() string

	// CanSupport tests whether the plugin supports a given volume
	// specification from the API.  The spec pointer should be considered
	// const.
	CanSupport(spec *Spec) bool

	// NewBuilder creates a new volume.Builder from an API specification.
	// Ownership of the spec pointer in *not* transferred.
	// - spec: The api.Volume spec
	// - podRef: a reference to the enclosing pod
	NewBuilder(spec *Spec, podRef *api.ObjectReference, opts VolumeOptions) (Builder, error)

	// NewCleaner creates a new volume.Cleaner from recoverable state.
	// - name: The volume name, as per the api.Volume spec.
	// - podUID: The UID of the enclosing pod
	NewCleaner(name string, podUID types.UID) (Cleaner, error)
}

VolumePlugin is an interface to volume plugins that can be used on a kubernetes node (e.g. by kubelet) to instantiate and manage volumes.

type VolumePluginMgr

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

VolumePluginMgr tracks registered plugins.

func (*VolumePluginMgr) FindPersistentPluginByName

func (pm *VolumePluginMgr) FindPersistentPluginByName(name string) (PersistentVolumePlugin, error)

FindPluginByName fetches a plugin by name or by legacy name. If no plugin is found, returns error.

func (*VolumePluginMgr) FindPluginByName

func (pm *VolumePluginMgr) FindPluginByName(name string) (VolumePlugin, error)

FindPluginByName fetches a plugin by name or by legacy name. If no plugin is found, returns error.

func (*VolumePluginMgr) FindPluginBySpec

func (pm *VolumePluginMgr) FindPluginBySpec(spec *Spec) (VolumePlugin, error)

FindPluginBySpec looks for a plugin that can support a given volume specification. If no plugins can support or more than one plugin can support it, return error.

func (*VolumePluginMgr) InitPlugins

func (pm *VolumePluginMgr) InitPlugins(plugins []VolumePlugin, host VolumeHost) error

InitPlugins initializes each plugin. All plugins must have unique names. This must be called exactly once before any New* methods are called on any plugins.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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