Skip to content

Commit

Permalink
Validate fstype on CreateVolume, but not NodePublishVolume
Browse files Browse the repository at this point in the history
There are existing PVs that could have wrong fstype, this change tries
to workaround this to validate fstype during CreateVolume for new
volumes, not on NodePublishVolume
  • Loading branch information
jingxu97 committed Jun 7, 2023
1 parent de1b767 commit 47ed8e9
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 23 deletions.
3 changes: 3 additions & 0 deletions pkg/driver/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,9 @@ func (d *Driver) CreateVolume(ctx context.Context, req *csi.CreateVolumeRequest)
if err := d.isValidVolumeCapabilities(volCaps); err != nil {
return nil, status.Error(codes.InvalidArgument, fmt.Sprintf("Volume capabilities not supported: %s", err))
}
if err := d.validateFStype(volCaps); err != nil {
return nil, status.Error(codes.InvalidArgument, fmt.Sprintf("Volume fstype not supported: %s", err))
}

var (
azName string
Expand Down
48 changes: 48 additions & 0 deletions pkg/driver/controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -522,6 +522,54 @@ func TestCreateVolume(t *testing.T) {
mockCtl.Finish()
},
},
{
name: "Fail: Volume fsType not supported",
testFunc: func(t *testing.T) {
mockCtl := gomock.NewController(t)
mockCloud := mocks.NewMockCloud(mockCtl)

driver := &Driver{
endpoint: endpoint,
cloud: mockCloud,
gidAllocator: NewGidAllocator(),
tags: parseTagsFromStr(""),
}

req := &csi.CreateVolumeRequest{
Name: volumeName,
VolumeCapabilities: []*csi.VolumeCapability{
{
AccessType: &csi.VolumeCapability_Mount{
Mount: &csi.VolumeCapability_MountVolume{
FsType: "abc",
},
},
AccessMode: &csi.VolumeCapability_AccessMode{
Mode: csi.VolumeCapability_AccessMode_MULTI_NODE_MULTI_WRITER,
},
},
},
CapacityRange: &csi.CapacityRange{
RequiredBytes: capacityRange,
},
Parameters: map[string]string{
ProvisioningMode: "efs-ap",
FsId: fsId,
GidMin: "1000",
GidMax: "2000",
DirectoryPerms: "777",
AzName: "us-east-1a",
},
}

ctx := context.Background()
_, err := driver.CreateVolume(ctx, req)
if err == nil {
t.Fatal("CreateVolume did not fail")
}
mockCtl.Finish()
},
},
{
name: "Fail: AccessType is block",
testFunc: func(t *testing.T) {
Expand Down
3 changes: 0 additions & 3 deletions pkg/driver/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -319,9 +319,6 @@ func (d *Driver) isValidVolumeCapabilities(volCaps []*csi.VolumeCapability) erro
return err
}

if err := d.validateFStype(volCaps); err != nil {
return err
}
return nil
}

Expand Down
20 changes: 0 additions & 20 deletions pkg/driver/node_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -435,26 +435,6 @@ func TestNodePublishVolume(t *testing.T) {
message: "Volume capability not supported: only filesystem volumes are supported",
},
},
{
name: "fail: unsupported volume fstype capability",
req: &csi.NodePublishVolumeRequest{
VolumeId: volumeId,
VolumeCapability: &csi.VolumeCapability{
AccessType: &csi.VolumeCapability_Mount{
Mount: &csi.VolumeCapability_MountVolume{FsType: "abc"},
},
AccessMode: &csi.VolumeCapability_AccessMode{
Mode: csi.VolumeCapability_AccessMode_MULTI_NODE_MULTI_WRITER,
},
},
TargetPath: targetPath,
},
expectMakeDir: false,
expectError: errtyp{
code: "InvalidArgument",
message: "Volume capability not supported: invalid fstype: abc",
},
},
{
name: "fail: multiple unsupported volume capabilities",
req: &csi.NodePublishVolumeRequest{
Expand Down

0 comments on commit 47ed8e9

Please sign in to comment.