mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-09-16 22:53:22 +00:00
Implement volume plugin wrappers
Convert git_repo and secret into wrappers around empty_dir.
This commit is contained in:
@@ -53,23 +53,45 @@ func (vh *volumeHost) GetKubeClient() client.Interface {
|
||||
return vh.kubelet.kubeClient
|
||||
}
|
||||
|
||||
func (kl *Kubelet) newVolumeBuilderFromPlugins(spec *api.Volume, podRef *api.ObjectReference) volume.Builder {
|
||||
plugin, err := kl.volumePluginMgr.FindPluginBySpec(spec)
|
||||
func (vh *volumeHost) NewWrapperBuilder(spec *api.Volume, podRef *api.ObjectReference) (volume.Builder, error) {
|
||||
b, err := vh.kubelet.newVolumeBuilderFromPlugins(spec, podRef)
|
||||
if err == nil && b == nil {
|
||||
return nil, errUnsupportedVolumeType
|
||||
}
|
||||
return b, nil
|
||||
}
|
||||
|
||||
func (vh *volumeHost) NewWrapperCleaner(spec *api.Volume, podUID types.UID) (volume.Cleaner, error) {
|
||||
plugin, err := vh.kubelet.volumePluginMgr.FindPluginBySpec(spec)
|
||||
if err != nil {
|
||||
glog.Warningf("Can't use volume plugins for %s: %v", spew.Sprintf("%#v", *spec), err)
|
||||
return nil
|
||||
return nil, err
|
||||
}
|
||||
if plugin == nil {
|
||||
glog.Errorf("No error, but nil volume plugin for %s", spew.Sprintf("%#v", *spec))
|
||||
return nil
|
||||
// Not found but not an error
|
||||
return nil, nil
|
||||
}
|
||||
c, err := plugin.NewCleaner(spec.Name, podUID)
|
||||
if err == nil && c == nil {
|
||||
return nil, errUnsupportedVolumeType
|
||||
}
|
||||
return c, nil
|
||||
}
|
||||
|
||||
func (kl *Kubelet) newVolumeBuilderFromPlugins(spec *api.Volume, podRef *api.ObjectReference) (volume.Builder, error) {
|
||||
plugin, err := kl.volumePluginMgr.FindPluginBySpec(spec)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("can't use volume plugins for %s: %v", spew.Sprintf("%#v", *spec), err)
|
||||
}
|
||||
if plugin == nil {
|
||||
// Not found but not an error
|
||||
return nil, nil
|
||||
}
|
||||
builder, err := plugin.NewBuilder(spec, podRef)
|
||||
if err != nil {
|
||||
glog.Warningf("Error instantiating volume plugin for %s: %v", spew.Sprintf("%#v", *spec), err)
|
||||
return nil
|
||||
return nil, fmt.Errorf("failed to instantiate volume plugin for %s: %v", spew.Sprintf("%#v", *spec), err)
|
||||
}
|
||||
glog.V(3).Infof("Used volume plugin %q for %s", plugin.Name(), spew.Sprintf("%#v", *spec))
|
||||
return builder
|
||||
return builder, nil
|
||||
}
|
||||
|
||||
func (kl *Kubelet) mountExternalVolumes(pod *api.Pod) (volumeMap, error) {
|
||||
@@ -84,7 +106,11 @@ func (kl *Kubelet) mountExternalVolumes(pod *api.Pod) (volumeMap, error) {
|
||||
}
|
||||
|
||||
// Try to use a plugin for this volume.
|
||||
builder := kl.newVolumeBuilderFromPlugins(volSpec, podRef)
|
||||
builder, err := kl.newVolumeBuilderFromPlugins(volSpec, podRef)
|
||||
if err != nil {
|
||||
glog.Errorf("Could not create volume builder for pod %s: %v", pod.UID, err)
|
||||
return nil, err
|
||||
}
|
||||
if builder == nil {
|
||||
return nil, errUnsupportedVolumeType
|
||||
}
|
||||
@@ -131,7 +157,11 @@ func (kl *Kubelet) getPodVolumesFromDisk() map[string]volume.Cleaner {
|
||||
// or volume objects.
|
||||
|
||||
// Try to use a plugin for this volume.
|
||||
cleaner := kl.newVolumeCleanerFromPlugins(volumeKind, volumeName, podUID)
|
||||
cleaner, err := kl.newVolumeCleanerFromPlugins(volumeKind, volumeName, podUID)
|
||||
if err != nil {
|
||||
glog.Errorf("Could not create volume cleaner for %s: %v", volumeNameDir.Name(), err)
|
||||
continue
|
||||
}
|
||||
if cleaner == nil {
|
||||
glog.Errorf("Could not create volume cleaner for %s: %v", volumeNameDir.Name(), errUnsupportedVolumeType)
|
||||
continue
|
||||
@@ -143,23 +173,21 @@ func (kl *Kubelet) getPodVolumesFromDisk() map[string]volume.Cleaner {
|
||||
return currentVolumes
|
||||
}
|
||||
|
||||
func (kl *Kubelet) newVolumeCleanerFromPlugins(kind string, name string, podUID types.UID) volume.Cleaner {
|
||||
func (kl *Kubelet) newVolumeCleanerFromPlugins(kind string, name string, podUID types.UID) (volume.Cleaner, error) {
|
||||
plugName := volume.UnescapePluginName(kind)
|
||||
plugin, err := kl.volumePluginMgr.FindPluginByName(plugName)
|
||||
if err != nil {
|
||||
// TODO: Maybe we should launch a cleanup of this dir?
|
||||
glog.Warningf("Can't use volume plugins for %s/%s: %v", podUID, kind, err)
|
||||
return nil
|
||||
return nil, fmt.Errorf("can't use volume plugins for %s/%s: %v", podUID, kind, err)
|
||||
}
|
||||
if plugin == nil {
|
||||
glog.Errorf("No error, but nil volume plugin for %s/%s", podUID, kind)
|
||||
return nil
|
||||
// Not found but not an error.
|
||||
return nil, nil
|
||||
}
|
||||
cleaner, err := plugin.NewCleaner(name, podUID)
|
||||
if err != nil {
|
||||
glog.Warningf("Error instantiating volume plugin for %s/%s: %v", podUID, kind, err)
|
||||
return nil
|
||||
return nil, fmt.Errorf("failed to instantiate volume plugin for %s/%s: %v", podUID, kind, err)
|
||||
}
|
||||
glog.V(3).Infof("Used volume plugin %q for %s/%s", plugin.Name(), podUID, kind)
|
||||
return cleaner
|
||||
return cleaner, nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user