// ProbeAttachableVolumePlugins collects all volume plugins for the attach/ // detach controller. // The list of plugins is manually compiled. This code and the plugin // initialization code for kubelet really, really need a through refactor. func ProbeAttachableVolumePlugins(logger klog.Logger) ([]volume.VolumePlugin, error) { … } // GetDynamicPluginProber gets the probers of dynamically discoverable plugins // for the attach/detach controller. // Currently only Flexvolume plugins are dynamically discoverable. func GetDynamicPluginProber(config persistentvolumeconfig.VolumeConfiguration) volume.DynamicPluginProber { … } // ProbeExpandableVolumePlugins returns volume plugins which are expandable func ProbeExpandableVolumePlugins(logger klog.Logger, config persistentvolumeconfig.VolumeConfiguration) ([]volume.VolumePlugin, error) { … } // ProbeControllerVolumePlugins collects all persistent volume plugins into an // easy to use list. Only volume plugins that implement any of // provisioner/recycler/deleter interface should be returned. func ProbeControllerVolumePlugins(logger klog.Logger, config persistentvolumeconfig.VolumeConfiguration) ([]volume.VolumePlugin, error) { … } // AttemptToLoadRecycler tries decoding a pod from a filepath for use as a recycler for a volume. // If successful, this method will set the recycler on the config. // If unsuccessful, an error is returned. Function is exported for reuse downstream. func AttemptToLoadRecycler(path string, config *volume.VolumeConfig) error { … }