@@ -39,6 +39,15 @@ func toCSIAccessMode(pvAccessModes []v1.PersistentVolumeAccessMode) (csi.VolumeC
39
39
m := uniqueAccessModes (pvAccessModes )
40
40
41
41
switch {
42
+ // This mapping exists to enable CSI drivers that lack the
43
+ // SINGLE_NODE_MULTI_WRITER capability to work with the
44
+ // ReadWriteOncePod access mode.
45
+ case m [v1 .ReadWriteOncePod ]:
46
+ if len (m ) > 1 {
47
+ return csi .VolumeCapability_AccessMode_UNKNOWN , fmt .Errorf ("Kubernetes does not support use of ReadWriteOncePod with other access modes on the same PersistentVolume" )
48
+ }
49
+ return csi .VolumeCapability_AccessMode_SINGLE_NODE_WRITER , nil
50
+
42
51
case m [v1 .ReadWriteMany ]:
43
52
// ReadWriteMany takes precedence, regardless of what other
44
53
// modes are set.
@@ -48,26 +57,12 @@ func toCSIAccessMode(pvAccessModes []v1.PersistentVolumeAccessMode) (csi.VolumeC
48
57
// This is not possible in the CSI spec.
49
58
return csi .VolumeCapability_AccessMode_UNKNOWN , fmt .Errorf ("CSI does not support ReadOnlyMany and ReadWriteOnce on the same PersistentVolume" )
50
59
51
- case m [v1 .ReadOnlyMany ] && m [v1 .ReadWriteOncePod ]:
52
- // This is not possible in the CSI spec.
53
- return csi .VolumeCapability_AccessMode_UNKNOWN , fmt .Errorf ("CSI does not support ReadOnlyMany and ReadWriteOncePod on the same PersistentVolume" )
54
-
55
- case m [v1 .ReadWriteOnce ] && m [v1 .ReadWriteOncePod ]:
56
- // This is not possible in the CSI spec.
57
- return csi .VolumeCapability_AccessMode_UNKNOWN , fmt .Errorf ("CSI does not support ReadWriteOnce and ReadWriteOncePod on the same PersistentVolume" )
58
-
59
60
case m [v1 .ReadOnlyMany ]:
60
61
return csi .VolumeCapability_AccessMode_MULTI_NODE_READER_ONLY , nil
61
62
62
63
case m [v1 .ReadWriteOnce ]:
63
64
return csi .VolumeCapability_AccessMode_SINGLE_NODE_WRITER , nil
64
65
65
- // This mapping exists to enable CSI drivers that lack the
66
- // SINGLE_NODE_MULTI_WRITER capability to work with the
67
- // ReadWriteOncePod access mode.
68
- case m [v1 .ReadWriteOncePod ]:
69
- return csi .VolumeCapability_AccessMode_SINGLE_NODE_WRITER , nil
70
-
71
66
default :
72
67
return csi .VolumeCapability_AccessMode_UNKNOWN , fmt .Errorf ("unsupported AccessMode combination: %+v" , pvAccessModes )
73
68
}
@@ -80,6 +75,12 @@ func toSingleNodeMultiWriterCapableCSIAccessMode(pvAccessModes []v1.PersistentVo
80
75
m := uniqueAccessModes (pvAccessModes )
81
76
82
77
switch {
78
+ case m [v1 .ReadWriteOncePod ]:
79
+ if len (m ) > 1 {
80
+ return csi .VolumeCapability_AccessMode_UNKNOWN , fmt .Errorf ("Kubernetes does not support use of ReadWriteOncePod with other access modes on the same PersistentVolume" )
81
+ }
82
+ return csi .VolumeCapability_AccessMode_SINGLE_NODE_SINGLE_WRITER , nil
83
+
83
84
case m [v1 .ReadWriteMany ]:
84
85
// ReadWriteMany trumps everything, regardless of what other
85
86
// modes are set.
@@ -89,23 +90,12 @@ func toSingleNodeMultiWriterCapableCSIAccessMode(pvAccessModes []v1.PersistentVo
89
90
// This is not possible in the CSI spec.
90
91
return csi .VolumeCapability_AccessMode_UNKNOWN , fmt .Errorf ("CSI does not support ReadOnlyMany and ReadWriteOnce on the same PersistentVolume" )
91
92
92
- case m [v1 .ReadOnlyMany ] && m [v1 .ReadWriteOncePod ]:
93
- // This is not possible in the CSI spec.
94
- return csi .VolumeCapability_AccessMode_UNKNOWN , fmt .Errorf ("CSI does not support ReadOnlyMany and ReadWriteOncePod on the same PersistentVolume" )
95
-
96
- case m [v1 .ReadWriteOnce ] && m [v1 .ReadWriteOncePod ]:
97
- // This is not possible in the CSI spec.
98
- return csi .VolumeCapability_AccessMode_UNKNOWN , fmt .Errorf ("CSI does not support ReadWriteOnce and ReadWriteOncePod on the same PersistentVolume" )
99
-
100
93
case m [v1 .ReadOnlyMany ]:
101
94
return csi .VolumeCapability_AccessMode_MULTI_NODE_READER_ONLY , nil
102
95
103
96
case m [v1 .ReadWriteOnce ]:
104
97
return csi .VolumeCapability_AccessMode_SINGLE_NODE_MULTI_WRITER , nil
105
98
106
- case m [v1 .ReadWriteOncePod ]:
107
- return csi .VolumeCapability_AccessMode_SINGLE_NODE_SINGLE_WRITER , nil
108
-
109
99
default :
110
100
return csi .VolumeCapability_AccessMode_UNKNOWN , fmt .Errorf ("unsupported AccessMode combination: %+v" , pvAccessModes )
111
101
}
0 commit comments