mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 19:56:01 +00:00
Merge pull request #78873 from davidz627/fix/backAccessMode
Add more backward compatible access mode logic to remove ReadOnlyMany access mode when ReadWriteOnce,ReadOnlyMany specified
This commit is contained in:
commit
7c0989445e
@ -141,19 +141,44 @@ func (g *gcePersistentDiskCSITranslator) TranslateInTreeStorageClassToCSI(sc *st
|
||||
// plugin never supported ReadWriteMany but also did not validate or enforce
|
||||
// this access mode for pre-provisioned volumes. The GCE PD CSI Driver validates
|
||||
// and enforces (fails) ReadWriteMany. Therefore we treat all in-tree
|
||||
// ReadWriteMany as ReadWriteOnce volumes to not break legacy volumes.
|
||||
// ReadWriteMany as ReadWriteOnce volumes to not break legacy volumes. It also
|
||||
// takes [ReadWriteOnce, ReadOnlyMany] and makes it ReadWriteOnce. This is
|
||||
// because the in-tree plugin does not enforce access modes and just attaches
|
||||
// the disk in ReadWriteOnce mode; however, the CSI external-attacher will fail
|
||||
// this combination because technically [ReadWriteOnce, ReadOnlyMany] is not
|
||||
// supportable on an attached volume
|
||||
// See: https://github.com/kubernetes-csi/external-attacher/issues/153
|
||||
func backwardCompatibleAccessModes(ams []v1.PersistentVolumeAccessMode) []v1.PersistentVolumeAccessMode {
|
||||
if ams == nil {
|
||||
return nil
|
||||
}
|
||||
newAM := []v1.PersistentVolumeAccessMode{}
|
||||
|
||||
s := map[v1.PersistentVolumeAccessMode]bool{}
|
||||
var newAM []v1.PersistentVolumeAccessMode
|
||||
|
||||
for _, am := range ams {
|
||||
if am == v1.ReadWriteMany {
|
||||
newAM = append(newAM, v1.ReadWriteOnce)
|
||||
// ReadWriteMany is unsupported in CSI, but in-tree did no
|
||||
// validation and treated it as ReadWriteOnce
|
||||
s[v1.ReadWriteOnce] = true
|
||||
} else {
|
||||
newAM = append(newAM, am)
|
||||
s[am] = true
|
||||
}
|
||||
}
|
||||
|
||||
switch {
|
||||
case s[v1.ReadOnlyMany] && s[v1.ReadWriteOnce]:
|
||||
// ROX,RWO is unsupported in CSI, but in-tree did not validation and
|
||||
// treated it as ReadWriteOnce
|
||||
newAM = []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce}
|
||||
case s[v1.ReadWriteOnce]:
|
||||
newAM = []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce}
|
||||
case s[v1.ReadOnlyMany]:
|
||||
newAM = []v1.PersistentVolumeAccessMode{v1.ReadOnlyMany}
|
||||
default:
|
||||
newAM = []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce}
|
||||
}
|
||||
|
||||
return newAM
|
||||
}
|
||||
|
||||
|
@ -211,18 +211,16 @@ func TestBackwardCompatibleAccessModes(t *testing.T) {
|
||||
expAccessModes []v1.PersistentVolumeAccessMode
|
||||
}{
|
||||
{
|
||||
name: "multiple normals",
|
||||
name: "ROX",
|
||||
accessModes: []v1.PersistentVolumeAccessMode{
|
||||
v1.ReadOnlyMany,
|
||||
v1.ReadWriteOnce,
|
||||
},
|
||||
expAccessModes: []v1.PersistentVolumeAccessMode{
|
||||
v1.ReadOnlyMany,
|
||||
v1.ReadWriteOnce,
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "one normal",
|
||||
name: "RWO",
|
||||
accessModes: []v1.PersistentVolumeAccessMode{
|
||||
v1.ReadWriteOnce,
|
||||
},
|
||||
@ -231,13 +229,52 @@ func TestBackwardCompatibleAccessModes(t *testing.T) {
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "some readwritemany",
|
||||
name: "RWX",
|
||||
accessModes: []v1.PersistentVolumeAccessMode{
|
||||
v1.ReadWriteMany,
|
||||
},
|
||||
expAccessModes: []v1.PersistentVolumeAccessMode{
|
||||
v1.ReadWriteOnce,
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "RWO, ROX",
|
||||
accessModes: []v1.PersistentVolumeAccessMode{
|
||||
v1.ReadOnlyMany,
|
||||
v1.ReadWriteOnce,
|
||||
},
|
||||
expAccessModes: []v1.PersistentVolumeAccessMode{
|
||||
v1.ReadWriteOnce,
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "RWO, RWX",
|
||||
accessModes: []v1.PersistentVolumeAccessMode{
|
||||
v1.ReadWriteOnce,
|
||||
v1.ReadWriteMany,
|
||||
},
|
||||
expAccessModes: []v1.PersistentVolumeAccessMode{
|
||||
v1.ReadWriteOnce,
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "RWX, ROX",
|
||||
accessModes: []v1.PersistentVolumeAccessMode{
|
||||
v1.ReadWriteMany,
|
||||
v1.ReadOnlyMany,
|
||||
},
|
||||
expAccessModes: []v1.PersistentVolumeAccessMode{
|
||||
v1.ReadWriteOnce,
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "RWX, ROX, RWO",
|
||||
accessModes: []v1.PersistentVolumeAccessMode{
|
||||
v1.ReadWriteMany,
|
||||
v1.ReadWriteOnce,
|
||||
v1.ReadOnlyMany,
|
||||
},
|
||||
expAccessModes: []v1.PersistentVolumeAccessMode{
|
||||
v1.ReadWriteOnce,
|
||||
},
|
||||
},
|
||||
|
Loading…
Reference in New Issue
Block a user