Skip to content

Commit

Permalink
Merge pull request kubernetes-csi#129 from Akrog/fix-block-attach
Browse files Browse the repository at this point in the history
Fix kubernetes-csi#128 - Cannot attach raw block volumes
  • Loading branch information
k8s-ci-robot authored Mar 5, 2019
2 parents 0e6f5f2 + a525eb9 commit 6dd3aae
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 11 deletions.
33 changes: 22 additions & 11 deletions pkg/controller/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -146,19 +146,30 @@ func GetVolumeCapabilities(pv *v1.PersistentVolume, csiSource *v1.CSIPersistentV
return nil, fmt.Errorf("CSI volume source was nil")
}

fsType := csiSource.FSType
if len(fsType) == 0 {
fsType = defaultFSType
}
var cap *csi.VolumeCapability
if pv.Spec.VolumeMode != nil && *pv.Spec.VolumeMode == v1.PersistentVolumeBlock {
cap = &csi.VolumeCapability{
AccessType: &csi.VolumeCapability_Block{
Block: &csi.VolumeCapability_BlockVolume{},
},
AccessMode: &csi.VolumeCapability_AccessMode{},
}

cap := &csi.VolumeCapability{
AccessType: &csi.VolumeCapability_Mount{
Mount: &csi.VolumeCapability_MountVolume{
FsType: fsType,
MountFlags: pv.Spec.MountOptions,
} else {
fsType := csiSource.FSType
if len(fsType) == 0 {
fsType = defaultFSType
}

cap = &csi.VolumeCapability{
AccessType: &csi.VolumeCapability_Mount{
Mount: &csi.VolumeCapability_MountVolume{
FsType: fsType,
MountFlags: pv.Spec.MountOptions,
},
},
},
AccessMode: &csi.VolumeCapability_AccessMode{},
AccessMode: &csi.VolumeCapability_AccessMode{},
}
}

// Translate array of modes into single VolumeCapability
Expand Down
31 changes: 31 additions & 0 deletions pkg/controller/util_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,17 @@ func TestGetNodeIDFromNode(t *testing.T) {
}
}

func createBlockCapability(mode csi.VolumeCapability_AccessMode_Mode) *csi.VolumeCapability {
return &csi.VolumeCapability{
AccessType: &csi.VolumeCapability_Block{
Block: &csi.VolumeCapability_BlockVolume{},
},
AccessMode: &csi.VolumeCapability_AccessMode{
Mode: mode,
},
}
}

func createMountCapability(fsType string, mode csi.VolumeCapability_AccessMode_Mode, mountOptions []string) *csi.VolumeCapability {
return &csi.VolumeCapability{
AccessType: &csi.VolumeCapability_Mount{
Expand All @@ -92,8 +103,12 @@ func createMountCapability(fsType string, mode csi.VolumeCapability_AccessMode_M
}

func TestGetVolumeCapabilities(t *testing.T) {
blockVolumeMode := v1.PersistentVolumeMode(v1.PersistentVolumeBlock)
filesystemVolumeMode := v1.PersistentVolumeMode(v1.PersistentVolumeFilesystem)

tests := []struct {
name string
volumeMode *v1.PersistentVolumeMode
fsType string
modes []v1.PersistentVolumeAccessMode
mountOptions []string
Expand All @@ -102,10 +117,18 @@ func TestGetVolumeCapabilities(t *testing.T) {
}{
{
name: "RWX",
volumeMode: &filesystemVolumeMode,
modes: []v1.PersistentVolumeAccessMode{v1.ReadWriteMany},
expectedCapability: createMountCapability(defaultFSType, csi.VolumeCapability_AccessMode_MULTI_NODE_MULTI_WRITER, nil),
expectError: false,
},
{
name: "Block RWX",
volumeMode: &blockVolumeMode,
modes: []v1.PersistentVolumeAccessMode{v1.ReadWriteMany},
expectedCapability: createBlockCapability(csi.VolumeCapability_AccessMode_MULTI_NODE_MULTI_WRITER),
expectError: false,
},
{
name: "RWX + specified fsType",
fsType: "ext3",
Expand All @@ -119,6 +142,13 @@ func TestGetVolumeCapabilities(t *testing.T) {
expectedCapability: createMountCapability(defaultFSType, csi.VolumeCapability_AccessMode_SINGLE_NODE_WRITER, nil),
expectError: false,
},
{
name: "Block RWO",
volumeMode: &blockVolumeMode,
modes: []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce},
expectedCapability: createBlockCapability(csi.VolumeCapability_AccessMode_SINGLE_NODE_WRITER),
expectError: false,
},
{
name: "ROX",
modes: []v1.PersistentVolumeAccessMode{v1.ReadOnlyMany},
Expand Down Expand Up @@ -155,6 +185,7 @@ func TestGetVolumeCapabilities(t *testing.T) {
for _, test := range tests {
pv := &v1.PersistentVolume{
Spec: v1.PersistentVolumeSpec{
VolumeMode: test.volumeMode,
AccessModes: test.modes,
MountOptions: test.mountOptions,
PersistentVolumeSource: v1.PersistentVolumeSource{
Expand Down

0 comments on commit 6dd3aae

Please sign in to comment.