Skip to content

Commit

Permalink
Remove ANF subvolume driver
Browse files Browse the repository at this point in the history
  • Loading branch information
clintonk committed Sep 12, 2024
1 parent cc59777 commit d50d13d
Show file tree
Hide file tree
Showing 37 changed files with 70 additions and 8,946 deletions.
2 changes: 1 addition & 1 deletion chwrap/make-tarball.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
PREFIX=$(mktemp -d)
mkdir -p $PREFIX/netapp
cp "$1" $PREFIX/netapp/chwrap
for BIN in apt blkid blockdev cat cryptsetup dd df dnf docker e2fsck free fsck.ext3 fsck.ext4 iscsiadm losetup ls lsblk lsscsi \
for BIN in apt blkid blockdev cat cryptsetup dd df dnf docker e2fsck free fsck.ext3 fsck.ext4 iscsiadm ls lsblk lsscsi \
mkdir lsmod mkfs.ext3 mkfs.ext4 mkfs.xfs mount mount.nfs mount.nfs4 mpathconf multipath multipathd nvme pgrep resize2fs rmdir \
rpcinfo stat systemctl umount xfs_growfs yum ; do
ln -s chwrap $PREFIX/netapp/$BIN
Expand Down
9 changes: 0 additions & 9 deletions config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,6 @@ const (
a Trident volume with 'file' protocol is most likely NFS, while a 'block' protocol volume is probably iSCSI. */
File Protocol = "file"
Block Protocol = "block"
BlockOnFile Protocol = "blockOnFile"
ProtocolAny Protocol = ""

/* Access mode constants */
Expand All @@ -103,12 +102,6 @@ const (
FsExt4 = "ext4"
FsRaw = "raw"

// Block-On-File Filesystem types
FsNFSXfs = "nfs/xfs"
FsNFSExt3 = "nfs/ext3"
FsNFSExt4 = "nfs/ext4"
FsNFSRaw = "nfs/raw"

/* Volume type constants */
OntapNFS VolumeType = "ONTAP_NFS"
OntapISCSI VolumeType = "ONTAP_iSCSI"
Expand All @@ -129,7 +122,6 @@ const (
OntapSANEconomyStorageDriverName = "ontap-san-economy"
SolidfireSANStorageDriverName = "solidfire-san"
AzureNASStorageDriverName = "azure-netapp-files"
AzureNASBlockStorageDriverName = "azure-netapp-files-subvolume"
GCPNFSStorageDriverName = "gcp-cvs"
GCNVNASStorageDriverName = "google-cloud-netapp-volumes"
FakeStorageDriverName = "fake"
Expand Down Expand Up @@ -200,7 +192,6 @@ var (
ValidProtocols = map[Protocol]bool{
File: true,
Block: true,
BlockOnFile: true,
ProtocolAny: true,
}

Expand Down
8 changes: 3 additions & 5 deletions config/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ func TestIsValidProtocol(t *testing.T) {
validProtocols := []Protocol{
File,
Block,
BlockOnFile,
ProtocolAny,
}

Expand All @@ -49,10 +48,9 @@ func TestIsValidProtocol(t *testing.T) {
func TestGetValidProtocolNames(t *testing.T) {
// will need updated if or when we support new protocols
expectedProtocols := map[string]bool{
"file": true,
"block": true,
"blockOnFile": true,
"": true, // ProtocolAny
"file": true,
"block": true,
"": true, // ProtocolAny
}

for _, protocol := range GetValidProtocolNames() {
Expand Down
31 changes: 1 addition & 30 deletions core/orchestrator_core.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import (
"context"
"fmt"
"os"
"path"
"path/filepath"
"reflect"
"sort"
Expand Down Expand Up @@ -3608,22 +3607,6 @@ func (o *TridentOrchestrator) AttachVolume(

if publishInfo.FilesystemType == "nfs" {
return utils.AttachNFSVolume(ctx, volumeName, mountpoint, publishInfo)
} else if strings.Contains(publishInfo.FilesystemType, "nfs/") {
// Determine where to mount the NFS share containing publishInfo.SubvolumeName
mountpointDir := path.Dir(mountpoint)
publishInfo.NFSMountpoint = path.Join(mountpointDir, publishInfo.NfsPath)

// TODO: Check if Docker can do raw block volumes, if not, then remove this part
isRawBlock := publishInfo.FilesystemType == "nfs/"+config.FsRaw
if isRawBlock {
publishInfo.SubvolumeMountOptions = utils.AppendToStringList(publishInfo.SubvolumeMountOptions, "bind", ",")
}

if loopDeviceName, _, err := utils.AttachBlockOnFileVolume(ctx, "", publishInfo); err != nil {
return err
} else {
return utils.MountDevice(ctx, loopDeviceName, mountpoint, publishInfo.SubvolumeMountOptions, isRawBlock)
}
} else {
var err error
if publishInfo.SANType == sa.NVMe {
Expand Down Expand Up @@ -4800,9 +4783,7 @@ func (o *TridentOrchestrator) resizeVolumeCleanup(

// getProtocol returns the appropriate protocol based on a specified volume mode, access mode and protocol, or
// an error if the two settings are incompatible.
// NOTE: 1. DO NOT ALLOW ROX and RWX for block on file
// 2. 'BlockOnFile' protocol set via the PVC annotation with multi-node access mode
// 3. We do not support raw block volumes with block on file or NFS protocol.
// NOTE: We do not support raw block volumes with NFS protocol.
func (o *TridentOrchestrator) getProtocol(
ctx context.Context, volumeMode config.VolumeMode, accessMode config.AccessMode, protocol config.Protocol,
) (config.Protocol, error) {
Expand Down Expand Up @@ -4837,52 +4818,42 @@ func (o *TridentOrchestrator) getProtocol(
{config.Filesystem, config.ModeAny, config.ProtocolAny}: {config.ProtocolAny, nil},
{config.Filesystem, config.ModeAny, config.File}: {config.File, nil},
{config.Filesystem, config.ModeAny, config.Block}: {config.Block, nil},
{config.Filesystem, config.ModeAny, config.BlockOnFile}: {config.BlockOnFile, nil},

{config.Filesystem, config.ReadWriteOnce, config.ProtocolAny}: {config.ProtocolAny, nil},
{config.Filesystem, config.ReadWriteOnce, config.File}: {config.File, nil},
{config.Filesystem, config.ReadWriteOnce, config.Block}: {config.Block, nil},
{config.Filesystem, config.ReadWriteOnce, config.BlockOnFile}: {config.BlockOnFile, nil},

{config.Filesystem, config.ReadWriteOncePod, config.ProtocolAny}: {config.ProtocolAny, nil},
{config.Filesystem, config.ReadWriteOncePod, config.File}: {config.File, nil},
{config.Filesystem, config.ReadWriteOncePod, config.Block}: {config.Block, nil},
{config.Filesystem, config.ReadWriteOncePod, config.BlockOnFile}: {config.BlockOnFile, nil},

{config.Filesystem, config.ReadOnlyMany, config.ProtocolAny}: {config.ProtocolAny, nil},
{config.Filesystem, config.ReadOnlyMany, config.File}: {config.File, nil},
{config.Filesystem, config.ReadOnlyMany, config.Block}: {config.Block, nil},
{config.Filesystem, config.ReadOnlyMany, config.BlockOnFile}: {config.ProtocolAny, err},

{config.Filesystem, config.ReadWriteMany, config.ProtocolAny}: {config.File, nil},
{config.Filesystem, config.ReadWriteMany, config.File}: {config.File, nil},
{config.Filesystem, config.ReadWriteMany, config.Block}: {config.ProtocolAny, err},
{config.Filesystem, config.ReadWriteMany, config.BlockOnFile}: {config.ProtocolAny, err},

{config.RawBlock, config.ModeAny, config.ProtocolAny}: {config.Block, nil},
{config.RawBlock, config.ModeAny, config.File}: {config.ProtocolAny, err},
{config.RawBlock, config.ModeAny, config.Block}: {config.Block, nil},
{config.RawBlock, config.ModeAny, config.BlockOnFile}: {config.ProtocolAny, err},

{config.RawBlock, config.ReadWriteOnce, config.ProtocolAny}: {config.Block, nil},
{config.RawBlock, config.ReadWriteOnce, config.File}: {config.ProtocolAny, err},
{config.RawBlock, config.ReadWriteOnce, config.Block}: {config.Block, nil},
{config.RawBlock, config.ReadWriteOnce, config.BlockOnFile}: {config.ProtocolAny, err},

{config.RawBlock, config.ReadWriteOncePod, config.ProtocolAny}: {config.Block, nil},
{config.RawBlock, config.ReadWriteOncePod, config.File}: {config.ProtocolAny, err},
{config.RawBlock, config.ReadWriteOncePod, config.Block}: {config.Block, nil},
{config.RawBlock, config.ReadWriteOncePod, config.BlockOnFile}: {config.ProtocolAny, err},

{config.RawBlock, config.ReadOnlyMany, config.ProtocolAny}: {config.Block, nil},
{config.RawBlock, config.ReadOnlyMany, config.File}: {config.ProtocolAny, err},
{config.RawBlock, config.ReadOnlyMany, config.Block}: {config.Block, nil},
{config.RawBlock, config.ReadOnlyMany, config.BlockOnFile}: {config.ProtocolAny, err},

{config.RawBlock, config.ReadWriteMany, config.ProtocolAny}: {config.Block, nil},
{config.RawBlock, config.ReadWriteMany, config.File}: {config.ProtocolAny, err},
{config.RawBlock, config.ReadWriteMany, config.Block}: {config.Block, nil},
{config.RawBlock, config.ReadWriteMany, config.BlockOnFile}: {config.ProtocolAny, err},
}

res, isValid := protocolTable[accessVariables{volumeMode, accessMode, protocol}]
Expand Down
20 changes: 4 additions & 16 deletions core/orchestrator_core_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -306,7 +306,7 @@ func validateStorageClass(
}
remaining := make([]*tu.PoolMatch, len(expected))
copy(remaining, expected)
for _, protocol := range []config.Protocol{config.File, config.Block, config.BlockOnFile} {
for _, protocol := range []config.Protocol{config.File, config.Block} {
for _, pool := range sc.GetStoragePoolsForProtocol(ctx(), protocol, config.ReadWriteOnce) {
nameFound := false
for _, scName := range pool.StorageClasses() {
Expand Down Expand Up @@ -4120,22 +4120,18 @@ func TestGetProtocol(t *testing.T) {
{config.Filesystem, config.ModeAny, config.ProtocolAny, config.ProtocolAny},
{config.Filesystem, config.ModeAny, config.File, config.File},
{config.Filesystem, config.ModeAny, config.Block, config.Block},
{config.Filesystem, config.ModeAny, config.BlockOnFile, config.BlockOnFile},
{config.Filesystem, config.ReadWriteOnce, config.ProtocolAny, config.ProtocolAny},
{config.Filesystem, config.ReadWriteOnce, config.File, config.File},
{config.Filesystem, config.ReadWriteOnce, config.Block, config.Block},
{config.Filesystem, config.ReadWriteOnce, config.BlockOnFile, config.BlockOnFile},
{config.Filesystem, config.ReadWriteOncePod, config.ProtocolAny, config.ProtocolAny},
{config.Filesystem, config.ReadWriteOncePod, config.File, config.File},
{config.Filesystem, config.ReadWriteOncePod, config.Block, config.Block},
{config.Filesystem, config.ReadWriteOncePod, config.BlockOnFile, config.BlockOnFile},
{config.Filesystem, config.ReadOnlyMany, config.Block, config.Block},
{config.Filesystem, config.ReadOnlyMany, config.ProtocolAny, config.ProtocolAny},
{config.Filesystem, config.ReadOnlyMany, config.File, config.File},
{config.Filesystem, config.ReadWriteMany, config.ProtocolAny, config.File},
{config.Filesystem, config.ReadWriteMany, config.File, config.File},
// {config.Filesystem, config.ReadWriteMany, config.Block, config.ProtocolAny},
// {config.Filesystem, config.ReadWriteMany, config.BlockOnFile, config.ProtocolAny},
{config.RawBlock, config.ModeAny, config.ProtocolAny, config.Block},
// {config.RawBlock, config.ModeAny, config.File, config.ProtocolAny},
{config.RawBlock, config.ModeAny, config.Block, config.Block},
Expand All @@ -4153,21 +4149,13 @@ func TestGetProtocol(t *testing.T) {
}

accessModesNegativeTests := []accessVariables{
{config.Filesystem, config.ReadOnlyMany, config.BlockOnFile, config.ProtocolAny},
{config.Filesystem, config.ReadWriteMany, config.Block, config.ProtocolAny},
{config.Filesystem, config.ReadWriteMany, config.BlockOnFile, config.ProtocolAny},
{config.RawBlock, config.ModeAny, config.File, config.ProtocolAny},
{config.RawBlock, config.ModeAny, config.BlockOnFile, config.ProtocolAny},
{config.RawBlock, config.ReadWriteOnce, config.File, config.ProtocolAny},
{config.RawBlock, config.ReadWriteOnce, config.BlockOnFile, config.ProtocolAny},
{config.RawBlock, config.ReadWriteOncePod, config.File, config.ProtocolAny},
{config.RawBlock, config.ReadWriteOncePod, config.BlockOnFile, config.ProtocolAny},

{config.RawBlock, config.ReadOnlyMany, config.File, config.ProtocolAny},
{config.RawBlock, config.ReadWriteMany, config.File, config.ProtocolAny},

{config.RawBlock, config.ReadOnlyMany, config.BlockOnFile, config.ProtocolAny},
{config.RawBlock, config.ReadWriteMany, config.BlockOnFile, config.ProtocolAny},
}

for _, tc := range accessModesPositiveTests {
Expand Down Expand Up @@ -7515,9 +7503,9 @@ func TestListLogLayers(t *testing.T) {

layers, err := o.ListLogLayers(ctx())
expected := []string{
"all", "azure-netapp-files", "azure-netapp-files-subvolume", "core", "crd_frontend",
"csi_frontend", "docker_frontend", "fake", "gcp-cvs", "ontap-nas", "ontap-nas-economy", "ontap-nas-flexgroup",
"ontap-san", "ontap-san-economy", "persistent_store", "rest_frontend", "solidfire-san",
"all", "azure-netapp-files", "core", "crd_frontend", "csi_frontend", "docker_frontend", "fake", "gcp-cvs",
"ontap-nas", "ontap-nas-economy", "ontap-nas-flexgroup", "ontap-san", "ontap-san-economy", "persistent_store",
"rest_frontend", "solidfire-san",
}
assert.Equal(t, expected, layers)
assert.NoError(t, err)
Expand Down
17 changes: 2 additions & 15 deletions frontend/csi/controller_server.go
Original file line number Diff line number Diff line change
Expand Up @@ -378,12 +378,7 @@ func (p *Plugin) ControllerPublishVolume(
// VolumePublishInfo struct are completely discarded and replaced by the CSI-supplied values.
mount := req.VolumeCapability.GetMount()
if mount != nil && len(mount.MountFlags) > 0 {
if volume.Config.Protocol == tridentconfig.BlockOnFile {
mount.MountFlags = utils.RemoveStringFromSlice(mount.MountFlags, "ro")
volumePublishInfo.SubvolumeMountOptions = strings.Join(mount.MountFlags, ",")
} else {
volumePublishInfo.MountOptions = strings.Join(mount.MountFlags, ",")
}
volumePublishInfo.MountOptions = strings.Join(mount.MountFlags, ",")
}

// Build CSI controller publish info from volume publish info
Expand Down Expand Up @@ -436,13 +431,6 @@ func (p *Plugin) ControllerPublishVolume(
}
}
}
case tridentconfig.BlockOnFile:
publishInfo["subvolumeMountOptions"] = volumePublishInfo.SubvolumeMountOptions
publishInfo["nfsServerIp"] = volumePublishInfo.NfsServerIP
publishInfo["nfsPath"] = volumePublishInfo.NfsPath
publishInfo["nfsUniqueID"] = volumePublishInfo.NfsUniqueID
publishInfo["subvolumeName"] = volumePublishInfo.SubvolumeName
publishInfo["backendUUID"] = volumePublishInfo.BackendUUID
}

return &csi.ControllerPublishVolumeResponse{PublishContext: publishInfo}, nil
Expand Down Expand Up @@ -962,8 +950,7 @@ func (p *Plugin) ControllerExpandVolume(
return nil, p.getCSIErrorForOrchestratorError(err)
}

nodeExpansionRequired := volume.Config.Protocol == tridentconfig.Block ||
volume.Config.Protocol == tridentconfig.BlockOnFile
nodeExpansionRequired := volume.Config.Protocol == tridentconfig.Block

// Return success if the volume is already at least as large as required
if volumeSize, err := strconv.ParseInt(volume.Config.Size, 10, 64); err != nil {
Expand Down
Loading

0 comments on commit d50d13d

Please sign in to comment.