Documentation
¶
Overview ¶
Package volume includes internal representations of external volume types as well as utility methods required to mount/unmount volumes to kubelets.
Index ¶
- func GetAccessModesAsString(modes []api.AccessModeType) string
- func NewFakeVolumeHost(rootDir string, kubeClient client.Interface, plugins []VolumePlugin) *fakeVolumeHost
- func RenameDirectory(oldPath, newName string) (string, error)
- type Builder
- type Cleaner
- type FakeVolume
- type FakeVolumePlugin
- func (plugin *FakeVolumePlugin) CanSupport(spec *Spec) bool
- func (plugin *FakeVolumePlugin) GetAccessModes() []api.AccessModeType
- func (plugin *FakeVolumePlugin) Init(host VolumeHost)
- func (plugin *FakeVolumePlugin) Name() string
- func (plugin *FakeVolumePlugin) NewBuilder(spec *Spec, podRef *api.ObjectReference, opts VolumeOptions) (Builder, error)
- func (plugin *FakeVolumePlugin) NewCleaner(volName string, podUID types.UID) (Cleaner, error)
- type PersistentVolumePlugin
- type Spec
- type Volume
- type VolumeHost
- type VolumeOptions
- type VolumePlugin
- type VolumePluginMgr
- func (pm *VolumePluginMgr) FindPersistentPluginByName(name string) (PersistentVolumePlugin, error)
- func (pm *VolumePluginMgr) FindPluginByName(name string) (VolumePlugin, error)
- func (pm *VolumePluginMgr) FindPluginBySpec(spec *Spec) (VolumePlugin, error)
- func (pm *VolumePluginMgr) InitPlugins(plugins []VolumePlugin, host VolumeHost) error
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func GetAccessModesAsString ¶ added in v0.15.0
func GetAccessModesAsString(modes []api.AccessModeType) string
func NewFakeVolumeHost ¶ added in v0.14.0
func NewFakeVolumeHost(rootDir string, kubeClient client.Interface, plugins []VolumePlugin) *fakeVolumeHost
func RenameDirectory ¶ added in v0.14.0
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 ¶ added in v0.14.0
type FakeVolume struct {
PodUID types.UID
VolName string
Plugin *FakeVolumePlugin
}
func (*FakeVolume) TearDownAt ¶ added in v0.14.0
func (fv *FakeVolume) TearDownAt(dir string) error
type FakeVolumePlugin ¶ added in v0.14.0
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 ¶ added in v0.14.0
func (plugin *FakeVolumePlugin) CanSupport(spec *Spec) bool
func (*FakeVolumePlugin) GetAccessModes ¶ added in v0.14.0
func (plugin *FakeVolumePlugin) GetAccessModes() []api.AccessModeType
func (*FakeVolumePlugin) Init ¶ added in v0.14.0
func (plugin *FakeVolumePlugin) Init(host VolumeHost)
func (*FakeVolumePlugin) NewBuilder ¶ added in v0.14.0
func (plugin *FakeVolumePlugin) NewBuilder(spec *Spec, podRef *api.ObjectReference, opts VolumeOptions) (Builder, error)
func (*FakeVolumePlugin) NewCleaner ¶ added in v0.14.0
func (plugin *FakeVolumePlugin) NewCleaner(volName string, podUID types.UID) (Cleaner, error)
type PersistentVolumePlugin ¶ added in v0.14.0
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 ¶ added in v0.16.0
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 ¶ added in v0.16.0
func NewSpecFromPersistentVolume(pv *api.PersistentVolume) *Spec
NewSpecFromPersistentVolume creates an Spec from an api.PersistentVolume
func NewSpecFromVolume ¶ added in v0.16.0
func NewSpecFromVolume(vs *api.Volume) *Spec
NewSpecFromVolume creates an Spec from an api.Volume
type Volume ¶ added in v0.14.0
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 ¶ added in v0.14.0
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 ¶ added in v0.15.0
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 ¶ added in v0.14.0
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 ¶ added in v0.14.0
type VolumePluginMgr struct {
// contains filtered or unexported fields
}
VolumePluginMgr tracks registered plugins.
func (*VolumePluginMgr) FindPersistentPluginByName ¶ added in v0.14.0
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 ¶ added in v0.14.0
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 ¶ added in v0.14.0
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 ¶ added in v0.14.0
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.