mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-25 04:33:26 +00:00
Implement return status codes
This commit is contained in:
parent
50dbcb3e00
commit
dc9e64c31e
@ -32,6 +32,7 @@ import (
|
||||
"k8s.io/klog"
|
||||
"k8s.io/kubernetes/pkg/volume"
|
||||
"k8s.io/kubernetes/pkg/volume/util"
|
||||
volumetypes "k8s.io/kubernetes/pkg/volume/util/types"
|
||||
)
|
||||
|
||||
const TestPluginName = "kubernetes.io/testPlugin"
|
||||
@ -445,6 +446,11 @@ func (attacher *testPluginAttacher) MountDevice(spec *volume.Spec, devicePath st
|
||||
return nil
|
||||
}
|
||||
|
||||
func (attacher *testPluginAttacher) MountDeviceWithStatusTracking(spec *volume.Spec, devicePath string, deviceMountPath string) (volumetypes.OperationStatus, error) {
|
||||
err := attacher.MountDevice(spec, devicePath, deviceMountPath)
|
||||
return volumetypes.OperationFinished, err
|
||||
}
|
||||
|
||||
// Detacher
|
||||
type testPluginDetacher struct {
|
||||
detachedVolumeMap map[string][]string
|
||||
|
@ -34,6 +34,7 @@ import (
|
||||
"k8s.io/apimachinery/pkg/types"
|
||||
"k8s.io/kubernetes/pkg/volume"
|
||||
volumeutil "k8s.io/kubernetes/pkg/volume/util"
|
||||
volumetypes "k8s.io/kubernetes/pkg/volume/util/types"
|
||||
"k8s.io/legacy-cloud-providers/aws"
|
||||
)
|
||||
|
||||
@ -250,6 +251,11 @@ func (attacher *awsElasticBlockStoreAttacher) MountDevice(spec *volume.Spec, dev
|
||||
return nil
|
||||
}
|
||||
|
||||
func (attacher *awsElasticBlockStoreAttacher) MountDeviceWithStatusTracking(spec *volume.Spec, devicePath string, deviceMountPath string) (volumetypes.OperationStatus, error) {
|
||||
err := attacher.MountDevice(spec, devicePath, deviceMountPath)
|
||||
return volumetypes.OperationFinished, err
|
||||
}
|
||||
|
||||
type awsElasticBlockStoreDetacher struct {
|
||||
mounter mount.Interface
|
||||
awsVolumes aws.Volumes
|
||||
|
@ -37,6 +37,7 @@ import (
|
||||
cloudprovider "k8s.io/cloud-provider"
|
||||
"k8s.io/kubernetes/pkg/volume"
|
||||
"k8s.io/kubernetes/pkg/volume/util"
|
||||
volumetypes "k8s.io/kubernetes/pkg/volume/util/types"
|
||||
"k8s.io/legacy-cloud-providers/azure"
|
||||
)
|
||||
|
||||
@ -259,6 +260,11 @@ func (attacher *azureDiskAttacher) MountDevice(spec *volume.Spec, devicePath str
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d *azureDiskAttacher) MountDeviceWithStatusTracking(spec *volume.Spec, devicePath string, deviceMountPath string) (volumetypes.OperationStatus, error) {
|
||||
err := d.MountDevice(spec, devicePath, deviceMountPath)
|
||||
return volumetypes.OperationFinished, err
|
||||
}
|
||||
|
||||
// Detach detaches disk from Azure VM.
|
||||
func (d *azureDiskDetacher) Detach(diskURI string, nodeName types.NodeName) error {
|
||||
if diskURI == "" {
|
||||
|
@ -34,6 +34,7 @@ import (
|
||||
|
||||
"k8s.io/kubernetes/pkg/volume"
|
||||
volumeutil "k8s.io/kubernetes/pkg/volume/util"
|
||||
volumetypes "k8s.io/kubernetes/pkg/volume/util/types"
|
||||
)
|
||||
|
||||
type cinderDiskAttacher struct {
|
||||
@ -303,6 +304,11 @@ func (attacher *cinderDiskAttacher) MountDevice(spec *volume.Spec, devicePath st
|
||||
return nil
|
||||
}
|
||||
|
||||
func (attacher *cinderDiskAttacher) MountDeviceWithStatusTracking(spec *volume.Spec, devicePath string, deviceMountPath string) (volumetypes.OperationStatus, error) {
|
||||
err := attacher.MountDevice(spec, devicePath, deviceMountPath)
|
||||
return volumetypes.OperationFinished, err
|
||||
}
|
||||
|
||||
type cinderDiskDetacher struct {
|
||||
mounter mount.Interface
|
||||
cinderProvider BlockStorageProvider
|
||||
|
@ -341,6 +341,11 @@ func (c *csiAttacher) MountDevice(spec *volume.Spec, devicePath string, deviceMo
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *csiAttacher) MountDeviceWithStatusTracking(spec *volume.Spec, devicePath string, deviceMountPath string) (volumetypes.OperationStatus, error) {
|
||||
err := c.MountDevice(spec, devicePath, deviceMountPath)
|
||||
return volumetypes.OperationFinished, err
|
||||
}
|
||||
|
||||
var _ volume.Detacher = &csiAttacher{}
|
||||
|
||||
var _ volume.DeviceUnmounter = &csiAttacher{}
|
||||
|
@ -32,6 +32,7 @@ import (
|
||||
"k8s.io/kubernetes/pkg/features"
|
||||
"k8s.io/kubernetes/pkg/volume"
|
||||
volumeutil "k8s.io/kubernetes/pkg/volume/util"
|
||||
volumetypes "k8s.io/kubernetes/pkg/volume/util/types"
|
||||
)
|
||||
|
||||
type fcAttacher struct {
|
||||
@ -131,6 +132,11 @@ func (attacher *fcAttacher) MountDevice(spec *volume.Spec, devicePath string, de
|
||||
return nil
|
||||
}
|
||||
|
||||
func (attacher *fcAttacher) MountDeviceWithStatusTracking(spec *volume.Spec, devicePath, deviceMountPath string) (volumetypes.OperationStatus, error) {
|
||||
err := attacher.MountDevice(spec, devicePath, deviceMountPath)
|
||||
return volumetypes.OperationFinished, err
|
||||
}
|
||||
|
||||
type fcDetacher struct {
|
||||
mounter mount.Interface
|
||||
manager diskManager
|
||||
|
@ -23,6 +23,7 @@ import (
|
||||
"k8s.io/apimachinery/pkg/types"
|
||||
"k8s.io/klog"
|
||||
"k8s.io/kubernetes/pkg/volume"
|
||||
volumetypes "k8s.io/kubernetes/pkg/volume/util/types"
|
||||
)
|
||||
|
||||
type flexVolumeAttacher struct {
|
||||
@ -97,6 +98,11 @@ func (a *flexVolumeAttacher) MountDevice(spec *volume.Spec, devicePath string, d
|
||||
return err
|
||||
}
|
||||
|
||||
func (attacher *flexVolumeAttacher) MountDeviceWithStatusTracking(spec *volume.Spec, devicePath string, deviceMountPath string) (volumetypes.OperationStatus, error) {
|
||||
err := attacher.MountDevice(spec, devicePath, deviceMountPath)
|
||||
return volumetypes.OperationFinished, err
|
||||
}
|
||||
|
||||
func (a *flexVolumeAttacher) VolumesAreAttached(specs []*volume.Spec, nodeName types.NodeName) (map[*volume.Spec]bool, error) {
|
||||
volumesAttachedCheck := make(map[*volume.Spec]bool)
|
||||
for _, spec := range specs {
|
||||
|
@ -38,6 +38,7 @@ import (
|
||||
"k8s.io/apimachinery/pkg/util/sets"
|
||||
"k8s.io/kubernetes/pkg/volume"
|
||||
volumeutil "k8s.io/kubernetes/pkg/volume/util"
|
||||
volumetypes "k8s.io/kubernetes/pkg/volume/util/types"
|
||||
"k8s.io/legacy-cloud-providers/gce"
|
||||
)
|
||||
|
||||
@ -328,6 +329,11 @@ func (attacher *gcePersistentDiskAttacher) MountDevice(spec *volume.Spec, device
|
||||
return nil
|
||||
}
|
||||
|
||||
func (attacher *gcePersistentDiskAttacher) MountDeviceWithStatusTracking(spec *volume.Spec, devicePath string, deviceMountPath string) (volumetypes.OperationStatus, error) {
|
||||
err := attacher.MountDevice(spec, devicePath, deviceMountPath)
|
||||
return volumetypes.OperationFinished, err
|
||||
}
|
||||
|
||||
type gcePersistentDiskDetacher struct {
|
||||
host volume.VolumeHost
|
||||
gceDisks gce.Disks
|
||||
|
@ -31,6 +31,8 @@ import (
|
||||
"k8s.io/kubernetes/pkg/features"
|
||||
"k8s.io/kubernetes/pkg/volume"
|
||||
volumeutil "k8s.io/kubernetes/pkg/volume/util"
|
||||
volumetypes "k8s.io/kubernetes/pkg/volume/util/types"
|
||||
"k8s.io/utils/keymutex"
|
||||
)
|
||||
|
||||
type iscsiAttacher struct {
|
||||
@ -134,6 +136,11 @@ func (attacher *iscsiAttacher) MountDevice(spec *volume.Spec, devicePath string,
|
||||
return nil
|
||||
}
|
||||
|
||||
func (attacher *iscsiAttacher) MountDeviceWithStatusTracking(spec *volume.Spec, devicePath string, deviceMountPath string) (volumetypes.OperationStatus, error) {
|
||||
err := attacher.MountDevice(spec, devicePath, deviceMountPath)
|
||||
return volumetypes.OperationFinished, err
|
||||
}
|
||||
|
||||
type iscsiDetacher struct {
|
||||
host volume.VolumeHost
|
||||
mounter mount.Interface
|
||||
|
@ -33,6 +33,7 @@ import (
|
||||
"k8s.io/kubernetes/pkg/volume"
|
||||
"k8s.io/kubernetes/pkg/volume/util"
|
||||
"k8s.io/kubernetes/pkg/volume/util/hostutil"
|
||||
volumetypes "k8s.io/kubernetes/pkg/volume/util/types"
|
||||
"k8s.io/kubernetes/pkg/volume/validation"
|
||||
"k8s.io/utils/keymutex"
|
||||
"k8s.io/utils/mount"
|
||||
@ -370,6 +371,11 @@ func (dm *deviceMounter) MountDevice(spec *volume.Spec, devicePath string, devic
|
||||
}
|
||||
}
|
||||
|
||||
func (dm *deviceMounter) MountDeviceWithStatusTracking(spec *volume.Spec, devicePath string, deviceMountPath string) (volumetypes.OperationStatus, error) {
|
||||
err := dm.MountDevice(spec, devicePath, deviceMountPath)
|
||||
return volumetypes.OperationFinished, err
|
||||
}
|
||||
|
||||
func getVolumeSourceFSType(spec *volume.Spec) (string, error) {
|
||||
if spec.PersistentVolume != nil &&
|
||||
spec.PersistentVolume.Spec.Local != nil {
|
||||
|
@ -28,6 +28,7 @@ import (
|
||||
"k8s.io/apimachinery/pkg/types"
|
||||
"k8s.io/kubernetes/pkg/volume"
|
||||
volutil "k8s.io/kubernetes/pkg/volume/util"
|
||||
volumetypes "k8s.io/kubernetes/pkg/volume/util/types"
|
||||
)
|
||||
|
||||
// NewAttacher implements AttachableVolumePlugin.NewAttacher.
|
||||
@ -184,6 +185,11 @@ func (attacher *rbdAttacher) MountDevice(spec *volume.Spec, devicePath string, d
|
||||
return nil
|
||||
}
|
||||
|
||||
func (attacher *rbdAttacher) MountDeviceWithStatusTracking(spec *volume.Spec, devicePath string, deviceMountPath string) (volumetypes.OperationStatus, error) {
|
||||
err := attacher.MountDevice(spec, devicePath, deviceMountPath)
|
||||
return volumetypes.OperationFinished, err
|
||||
}
|
||||
|
||||
// rbdDetacher implements volume.Detacher interface.
|
||||
type rbdDetacher struct {
|
||||
plugin *rbdPlugin
|
||||
|
@ -1054,6 +1054,11 @@ func (fv *FakeVolume) MountDevice(spec *Spec, devicePath string, deviceMountPath
|
||||
return nil
|
||||
}
|
||||
|
||||
func (fv *FakeVolume) MountDeviceWithStatusTracking(spec *Spec, devicePath string, deviceMountPath string) (volumetypes.OperationStatus, error) {
|
||||
err := fv.MountDevice(spec, devicePath, deviceMountPath)
|
||||
return volumetypes.OperationFinished, err
|
||||
}
|
||||
|
||||
func (fv *FakeVolume) GetMountDeviceCallCount() int {
|
||||
fv.RLock()
|
||||
defer fv.RUnlock()
|
||||
|
@ -575,12 +575,12 @@ func (og *operationGenerator) GenerateMountVolumeFunc(
|
||||
}
|
||||
|
||||
// Mount device to global mount path
|
||||
err = volumeDeviceMounter.MountDevice(
|
||||
operationState, err := volumeDeviceMounter.MountDeviceWithStatusTracking(
|
||||
volumeToMount.VolumeSpec,
|
||||
devicePath,
|
||||
deviceMountPath)
|
||||
if err != nil {
|
||||
if volumetypes.IsOperationTimeOutError(err) {
|
||||
if operationState == volumetypes.OperationInProgress {
|
||||
markDeviceUncertainError := actualStateOfWorld.MarkDeviceAsUncertain(volumeToMount.VolumeName, devicePath, deviceMountPath)
|
||||
if markDeviceUncertainError != nil {
|
||||
klog.Infof("MountVolume.MarkDeviceAsUncertain failed with %v", markDeviceUncertainError)
|
||||
|
@ -51,6 +51,23 @@ func (o *GeneratedOperations) Run() (eventErr, detailedErr error) {
|
||||
return o.OperationFunc()
|
||||
}
|
||||
|
||||
type OperationStatus string
|
||||
|
||||
const (
|
||||
// OperationFinished means volume operation has been finished
|
||||
OperationFinished OperationStatus = "Finished"
|
||||
|
||||
// OperationInProgress means volume operation has been started and
|
||||
// is in-progress. This state does not indicate if operation will succeed or fail but
|
||||
// merely it has been started and in in-progress.
|
||||
OperationInProgress OperationStatus = "InProgress"
|
||||
|
||||
// OperationStateNoChange indicates it is unchanged from previous state.
|
||||
// This can be used to indicate transient failures for an operation which
|
||||
// was in-progress previously.
|
||||
OperationStateNoChange OperationStatus = "NoChange"
|
||||
)
|
||||
|
||||
// OperationTimedOutError indicates a particular volume operation has timed out.
|
||||
type OperationTimedOutError struct {
|
||||
msg string
|
||||
|
@ -23,6 +23,7 @@ import (
|
||||
"k8s.io/apimachinery/pkg/api/resource"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/types"
|
||||
volumetypes "k8s.io/kubernetes/pkg/volume/util/types"
|
||||
)
|
||||
|
||||
// Volume represents a directory used by pods or hosts on a node. All method
|
||||
@ -248,6 +249,9 @@ type DeviceMounter interface {
|
||||
// individual pods can then bind mount
|
||||
// Note that devicePath can be empty if the volume plugin does not implement any of Attach and WaitForAttach methods.
|
||||
MountDevice(spec *Spec, devicePath string, deviceMountPath string) error
|
||||
|
||||
// MountDeviceWithStatusTracking is same as MountDevice except status of mount operation is also returned
|
||||
MountDeviceWithStatusTracking(spec *Spec, devicePath string, deviceMountPath string) (volumetypes.OperationStatus, error)
|
||||
}
|
||||
|
||||
type BulkVolumeVerifier interface {
|
||||
|
@ -33,6 +33,7 @@ import (
|
||||
"k8s.io/apimachinery/pkg/types"
|
||||
"k8s.io/kubernetes/pkg/volume"
|
||||
volumeutil "k8s.io/kubernetes/pkg/volume/util"
|
||||
volumetypes "k8s.io/kubernetes/pkg/volume/util/types"
|
||||
"k8s.io/legacy-cloud-providers/vsphere"
|
||||
)
|
||||
|
||||
@ -248,6 +249,11 @@ func (attacher *vsphereVMDKAttacher) MountDevice(spec *volume.Spec, devicePath s
|
||||
return nil
|
||||
}
|
||||
|
||||
func (attacher *vsphereVMDKAttacher) MountDeviceWithStatusTracking(spec *volume.Spec, devicePath string, deviceMountPath string) (volumetypes.OperationStatus, error) {
|
||||
err := attacher.MountDevice(spec, devicePath, deviceMountPath)
|
||||
return volumetypes.OperationFinished, err
|
||||
}
|
||||
|
||||
type vsphereVMDKDetacher struct {
|
||||
mounter mount.Interface
|
||||
vsphereVolumes vsphere.Volumes
|
||||
|
Loading…
Reference in New Issue
Block a user