type ProbeOperation … type ProbeEvent … const VolumeParameterFSType … const ProbeAddOrUpdate … const ProbeRemove … var ErrNoPluiginMatched … type VolumeOptions … type NodeResizeOptions … type DynamicPluginProber … type VolumePlugin … type PersistentVolumePlugin … type RecyclableVolumePlugin … type DeletableVolumePlugin … type ProvisionableVolumePlugin … type AttachableVolumePlugin … type DeviceMountableVolumePlugin … type ExpandableVolumePlugin … type NodeExpandableVolumePlugin … type BlockVolumePlugin … type KubeletVolumeHost … type AttachDetachVolumeHost … type VolumeHost … type VolumePluginMgr … type Spec … // Name returns the name of either Volume or PersistentVolume, one of which must not be nil. func (spec *Spec) Name() string { … } // IsKubeletExpandable returns true for volume types that can be expanded only by the node // and not the controller. Currently Flex volume is the only one in this category since // it is typically not installed on the controller func (spec *Spec) IsKubeletExpandable() bool { … } // KubeletExpandablePluginName creates and returns a name for the plugin // this is used in context on the controller where the plugin lookup fails // as volume expansion on controller isn't supported, but a plugin name is // required func (spec *Spec) KubeletExpandablePluginName() string { … } type VolumeConfig … type ReconstructedVolume … // NewSpecFromVolume creates an Spec from an v1.Volume func NewSpecFromVolume(vs *v1.Volume) *Spec { … } // NewSpecFromPersistentVolume creates an Spec from an v1.PersistentVolume func NewSpecFromPersistentVolume(pv *v1.PersistentVolume, readOnly bool) *Spec { … } // 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. func (pm *VolumePluginMgr) InitPlugins(plugins []VolumePlugin, prober DynamicPluginProber, host VolumeHost) error { … } func (pm *VolumePluginMgr) initProbedPlugin(probedPlugin 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 (pm *VolumePluginMgr) FindPluginBySpec(spec *Spec) (VolumePlugin, error) { … } // FindPluginByName fetches a plugin by name. If no plugin is found, returns error. func (pm *VolumePluginMgr) FindPluginByName(name string) (VolumePlugin, error) { … } // Check if probedPlugin cache update is required. // If it is, initialize all probed plugins and replace the cache with them. func (pm *VolumePluginMgr) refreshProbedPlugins() { … } // FindPersistentPluginBySpec looks for a persistent volume plugin that can // support a given volume specification. If no plugin is found, return an // error func (pm *VolumePluginMgr) FindPersistentPluginBySpec(spec *Spec) (PersistentVolumePlugin, error) { … } // FindPersistentPluginByName fetches a persistent volume plugin by name. If // no plugin is found, returns error. func (pm *VolumePluginMgr) FindPersistentPluginByName(name string) (PersistentVolumePlugin, error) { … } // FindRecyclablePluginByName fetches a persistent volume plugin by name. If // no plugin is found, returns error. func (pm *VolumePluginMgr) FindRecyclablePluginBySpec(spec *Spec) (RecyclableVolumePlugin, error) { … } // FindProvisionablePluginByName fetches a persistent volume plugin by name. If // no plugin is found, returns error. func (pm *VolumePluginMgr) FindProvisionablePluginByName(name string) (ProvisionableVolumePlugin, error) { … } // FindDeletablePluginBySpec fetches a persistent volume plugin by spec. If // no plugin is found, returns error. func (pm *VolumePluginMgr) FindDeletablePluginBySpec(spec *Spec) (DeletableVolumePlugin, error) { … } // FindDeletablePluginByName fetches a persistent volume plugin by name. If // no plugin is found, returns error. func (pm *VolumePluginMgr) FindDeletablePluginByName(name string) (DeletableVolumePlugin, error) { … } // FindAttachablePluginBySpec fetches a persistent volume plugin by spec. // Unlike the other "FindPlugin" methods, this does not return error if no // plugin is found. All volumes require a mounter and unmounter, but not // every volume will have an attacher/detacher. func (pm *VolumePluginMgr) FindAttachablePluginBySpec(spec *Spec) (AttachableVolumePlugin, error) { … } // FindAttachablePluginByName fetches an attachable volume plugin by name. // Unlike the other "FindPlugin" methods, this does not return error if no // plugin is found. All volumes require a mounter and unmounter, but not // every volume will have an attacher/detacher. func (pm *VolumePluginMgr) FindAttachablePluginByName(name string) (AttachableVolumePlugin, error) { … } // FindDeviceMountablePluginBySpec fetches a persistent volume plugin by spec. func (pm *VolumePluginMgr) FindDeviceMountablePluginBySpec(spec *Spec) (DeviceMountableVolumePlugin, error) { … } // FindDeviceMountablePluginByName fetches a devicemountable volume plugin by name. func (pm *VolumePluginMgr) FindDeviceMountablePluginByName(name string) (DeviceMountableVolumePlugin, error) { … } // FindExpandablePluginBySpec fetches a persistent volume plugin by spec. func (pm *VolumePluginMgr) FindExpandablePluginBySpec(spec *Spec) (ExpandableVolumePlugin, error) { … } // FindExpandablePluginBySpec fetches a persistent volume plugin by name. func (pm *VolumePluginMgr) FindExpandablePluginByName(name string) (ExpandableVolumePlugin, error) { … } // FindMapperPluginBySpec fetches a block volume plugin by spec. func (pm *VolumePluginMgr) FindMapperPluginBySpec(spec *Spec) (BlockVolumePlugin, error) { … } // FindMapperPluginByName fetches a block volume plugin by name. func (pm *VolumePluginMgr) FindMapperPluginByName(name string) (BlockVolumePlugin, error) { … } // FindNodeExpandablePluginBySpec fetches a persistent volume plugin by spec func (pm *VolumePluginMgr) FindNodeExpandablePluginBySpec(spec *Spec) (NodeExpandableVolumePlugin, error) { … } // FindNodeExpandablePluginByName fetches a persistent volume plugin by name func (pm *VolumePluginMgr) FindNodeExpandablePluginByName(name string) (NodeExpandableVolumePlugin, error) { … } func (pm *VolumePluginMgr) Run(stopCh <-chan struct{ … } // NewPersistentVolumeRecyclerPodTemplate creates a template for a recycler // pod. By default, a recycler pod simply runs "rm -rf" on a volume and tests // for emptiness. Most attributes of the template will be correct for most // plugin implementations. The following attributes can be overridden per // plugin via configuration: // // 1. pod.Spec.Volumes[0].VolumeSource must be overridden. Recycler // implementations without a valid VolumeSource will fail. // 2. pod.GenerateName helps distinguish recycler pods by name. Recommended. // Default is "pv-recycler-". // 3. pod.Spec.ActiveDeadlineSeconds gives the recycler pod a maximum timeout // before failing. Recommended. Default is 60 seconds. // // See HostPath and NFS for working recycler examples func NewPersistentVolumeRecyclerPodTemplate() *v1.Pod { … } // Check validity of recycle pod template // List of checks: // - at least one volume is defined in the recycle pod template // If successful, returns nil // if unsuccessful, returns an error. func ValidateRecyclerPodTemplate(pod *v1.Pod) error { … } type dummyPluginProber … func (*dummyPluginProber) Init() error { … } func (*dummyPluginProber) Probe() ([]ProbeEvent, error) { … }