Adjust nodiskconflict support based on iscsi multipath feature.

Signed-off-by: Humble Chirammal <hchiramm@redhat.com>
This commit is contained in:
Humble Chirammal 2017-02-15 11:15:22 +05:30
parent a57967f47b
commit 7a1ac6c6db
2 changed files with 8 additions and 18 deletions

View File

@ -21,7 +21,6 @@ import (
"fmt" "fmt"
"math/rand" "math/rand"
"strconv" "strconv"
"strings"
"sync" "sync"
"time" "time"
@ -131,21 +130,12 @@ func isVolumeConflict(volume v1.Volume, pod *v1.Pod) bool {
} }
if volume.ISCSI != nil && existingVolume.ISCSI != nil { if volume.ISCSI != nil && existingVolume.ISCSI != nil {
iqn, lun, target := volume.ISCSI.IQN, volume.ISCSI.Lun, volume.ISCSI.TargetPortal iqn := volume.ISCSI.IQN
eiqn, elun, etarget := existingVolume.ISCSI.IQN, existingVolume.ISCSI.Lun, existingVolume.ISCSI.TargetPortal eiqn := existingVolume.ISCSI.IQN
if !strings.Contains(target, ":") { // two ISCSI volumes are same, if they share the same iqn. As iscsi volumes are of type
target = target + ":3260"
}
if !strings.Contains(etarget, ":") {
etarget = etarget + ":3260"
}
lun1 := strconv.Itoa(int(lun))
elun1 := strconv.Itoa(int(elun))
// two ISCSI volumes are same, if they share the same iqn, lun and target. As iscsi volumes are of type
// RWO or ROX, we could permit only one RW mount. Same iscsi volume mounted by multiple Pods // RWO or ROX, we could permit only one RW mount. Same iscsi volume mounted by multiple Pods
// conflict unless all other pods mount as read only. // conflict unless all other pods mount as read only.
if iqn == eiqn && lun1 == elun1 && target == etarget && !(volume.ISCSI.ReadOnly && existingVolume.ISCSI.ReadOnly) { if iqn == eiqn && !(volume.ISCSI.ReadOnly && existingVolume.ISCSI.ReadOnly) {
return true return true
} }
} }

View File

@ -739,7 +739,7 @@ func TestISCSIDiskConflicts(t *testing.T) {
VolumeSource: v1.VolumeSource{ VolumeSource: v1.VolumeSource{
ISCSI: &v1.ISCSIVolumeSource{ ISCSI: &v1.ISCSIVolumeSource{
TargetPortal: "127.0.0.1:3260", TargetPortal: "127.0.0.1:3260",
IQN: "iqn.2014-12.server:storage.target01", IQN: "iqn.2016-12.server:storage.target01",
FSType: "ext4", FSType: "ext4",
Lun: 0, Lun: 0,
}, },
@ -752,10 +752,10 @@ func TestISCSIDiskConflicts(t *testing.T) {
{ {
VolumeSource: v1.VolumeSource{ VolumeSource: v1.VolumeSource{
ISCSI: &v1.ISCSIVolumeSource{ ISCSI: &v1.ISCSIVolumeSource{
TargetPortal: "127.0.0.2:3260", TargetPortal: "127.0.0.1:3260",
IQN: "iqn.2014-12.server:storage.target01", IQN: "iqn.2017-12.server:storage.target01",
FSType: "ext4", FSType: "ext4",
Lun: 1, Lun: 0,
}, },
}, },
}, },