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 ¶
func GetAccessModesAsString(modes []api.AccessModeType) string
func NewFakeVolumeHost ¶
func NewFakeVolumeHost(rootDir string, kubeClient client.Interface, plugins []VolumePlugin) *fakeVolumeHost
func RenameDirectory ¶
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 ¶
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 ¶
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.