Skip to content

Commit 58bd13b

Browse files
authored
Consolidate iSCSI code
1 parent 86eacce commit 58bd13b

File tree

16 files changed

+423
-612
lines changed

16 files changed

+423
-612
lines changed

frontend/csi/node_server.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ var (
8181
// TODO (pshashan): Unify both csiNodeLockTimeout and csiKubeletTimeout
8282
csiKubeletTimeout = 110 * time.Second
8383
topologyLabels = make(map[string]string)
84-
iscsiUtils = utils.IscsiUtils
84+
iscsiUtils = iscsi.IscsiUtils
8585
fcpUtils = utils.FcpUtils
8686

8787
publishedISCSISessions, currentISCSISessions models.ISCSISessions
@@ -753,7 +753,7 @@ func (p *Plugin) nodeGetInfo(ctx context.Context) *models.Node {
753753
}
754754

755755
iscsiWWN := ""
756-
iscsiWWNs, err := utils.GetInitiatorIqns(ctx)
756+
iscsiWWNs, err := iscsi.GetInitiatorIqns(ctx)
757757
if err != nil {
758758
Logc(ctx).WithError(err).Warn("Problem getting iSCSI initiator name.")
759759
} else if len(iscsiWWNs) == 0 {
@@ -1206,7 +1206,7 @@ func unstashIscsiTargetPortals(publishInfo *models.VolumePublishInfo, reqPublish
12061206
}
12071207

12081208
func (p *Plugin) populatePublishedSessions(ctx context.Context) {
1209-
volumeIDs := utils.GetAllVolumeIDs(ctx, tridentDeviceInfoPath)
1209+
volumeIDs := iscsi.GetAllVolumeIDs(ctx, tridentDeviceInfoPath)
12101210
for _, volumeID := range volumeIDs {
12111211
trackingInfo, err := p.nodeHelper.ReadTrackingInfo(ctx, volumeID)
12121212
if err != nil || trackingInfo == nil {
@@ -1221,7 +1221,7 @@ func (p *Plugin) populatePublishedSessions(ctx context.Context) {
12211221

12221222
publishInfo := &trackingInfo.VolumePublishInfo
12231223
if publishInfo.SANType != sa.NVMe {
1224-
newCtx := context.WithValue(ctx, iscsi.SessionInfoSource, utils.SessionSourceTrackingInfo)
1224+
newCtx := context.WithValue(ctx, iscsi.SessionInfoSource, iscsi.SessionSourceTrackingInfo)
12251225
p.iscsi.AddSession(newCtx, &publishedISCSISessions, publishInfo, volumeID, "", models.NotInvalid)
12261226
} else {
12271227
p.nvmeHandler.AddPublishedNVMeSession(&publishedNVMeSessions, publishInfo)
@@ -1232,7 +1232,7 @@ func (p *Plugin) populatePublishedSessions(ctx context.Context) {
12321232

12331233
func (p *Plugin) readAllTrackingFiles(ctx context.Context) []models.VolumePublishInfo {
12341234
publishInfos := make([]models.VolumePublishInfo, 0)
1235-
volumeIDs := utils.GetAllVolumeIDs(ctx, tridentDeviceInfoPath)
1235+
volumeIDs := iscsi.GetAllVolumeIDs(ctx, tridentDeviceInfoPath)
12361236
for _, volumeID := range volumeIDs {
12371237
trackingInfo, err := p.nodeHelper.ReadTrackingInfo(ctx, volumeID)
12381238
if err != nil || trackingInfo == nil {
@@ -2553,7 +2553,7 @@ func (p *Plugin) selfHealingRectifySession(ctx context.Context, portal string, a
25532553
return fmt.Errorf("failed to get LUNs for portal: %s; %w", portal, err)
25542554
}
25552555

2556-
if err = utils.InitiateScanForLuns(ctx, luns, publishInfo.IscsiTargetIQN); err != nil {
2556+
if err = iscsi.InitiateScanForLuns(ctx, luns, publishInfo.IscsiTargetIQN); err != nil {
25572557
Logc(ctx).WithError(err).Error("Could not initiate scan for some LUNs.")
25582558
return fmt.Errorf("failed to initiate scan for LUNs in portal: %s; %w", portal, err)
25592559
}
@@ -2576,7 +2576,7 @@ func (p *Plugin) selfHealingRectifySession(ctx context.Context, portal string, a
25762576
func (p *Plugin) deprecatedIgroupInUse(ctx context.Context) bool {
25772577
volumeTrackingInfo, _ := p.nodeHelper.ListVolumeTrackingInfo(ctx)
25782578
for id, info := range volumeTrackingInfo {
2579-
if !utils.IsPerNodeIgroup(info.IscsiIgroup) {
2579+
if !iscsi.IsPerNodeIgroup(info.IscsiIgroup) {
25802580
Logc(ctx).WithFields(LogFields{
25812581
"volumeID": id,
25822582
"lunID": info.IscsiLunNumber,

frontend/csi/utils_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ import (
1515
"github.com/netapp/trident/mocks/mock_utils/mock_devices/mock_luks"
1616
"github.com/netapp/trident/mocks/mock_utils/mock_iscsi"
1717
sa "github.com/netapp/trident/storage_attribute"
18-
"github.com/netapp/trident/utils"
1918
"github.com/netapp/trident/utils/errors"
19+
"github.com/netapp/trident/utils/iscsi"
2020
"github.com/netapp/trident/utils/models"
2121
)
2222

@@ -63,7 +63,7 @@ func TestPerformProtocolSpecificReconciliation_BadProtocol(t *testing.T) {
6363
}
6464

6565
func TestPerformProtocolSpecificReconciliation_ISCSI(t *testing.T) {
66-
defer func() { iscsiUtils = utils.IscsiUtils }()
66+
defer func() { iscsiUtils = iscsi.IscsiUtils }()
6767
mockCtrl := gomock.NewController(t)
6868
iscsiUtils = mock_iscsi.NewMockIscsiReconcileUtils(mockCtrl)
6969
mockIscsiUtils, ok := iscsiUtils.(*mock_iscsi.MockIscsiReconcileUtils)
@@ -99,7 +99,7 @@ func TestPerformProtocolSpecificReconciliation_ISCSI(t *testing.T) {
9999
}
100100

101101
func TestPerformProtocolSpecificReconciliation_NFS(t *testing.T) {
102-
defer func() { iscsiUtils = utils.IscsiUtils }()
102+
defer func() { iscsiUtils = iscsi.IscsiUtils }()
103103
trackInfo := &models.VolumeTrackingInfo{}
104104
testIP := "1.1.1.1"
105105
trackInfo.VolumePublishInfo.NfsServerIP = testIP

mocks/mock_utils/mock_iscsi/mock_iscsi_client.go

Lines changed: 12 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

storage_drivers/common.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"github.com/netapp/trident/utils"
2121
"github.com/netapp/trident/utils/errors"
2222
"github.com/netapp/trident/utils/filesystem"
23+
"github.com/netapp/trident/utils/iscsi"
2324
tridentmodels "github.com/netapp/trident/utils/models"
2425
)
2526

@@ -354,24 +355,24 @@ func DecodeStorageBackendPools[P StorageBackendPool](
354355
}
355356

356357
// TODO (vhs): Extract the common bits and write two different functions for iSCSI and FC
357-
func RemoveSCSIDeviceByPublishInfo(ctx context.Context, publishInfo *tridentmodels.VolumePublishInfo) {
358+
func RemoveSCSIDeviceByPublishInfo(ctx context.Context, publishInfo *tridentmodels.VolumePublishInfo, iscsiClient iscsi.ISCSI) {
358359
if publishInfo.SANType == sa.ISCSI {
359-
hostSessionMap := utils.IscsiUtils.GetISCSIHostSessionMapForTarget(ctx, publishInfo.IscsiTargetIQN)
360+
hostSessionMap := iscsi.IscsiUtils.GetISCSIHostSessionMapForTarget(ctx, publishInfo.IscsiTargetIQN)
360361
fields := LogFields{"targetIQN": publishInfo.IscsiTargetIQN}
361362
if len(hostSessionMap) == 0 {
362363
Logc(ctx).WithFields(fields).Error("Could not find host session for target IQN.")
363364
return
364365
}
365366

366-
deviceInfo, err := utils.IscsiClient.GetDeviceInfoForLUN(ctx, hostSessionMap, int(publishInfo.IscsiLunNumber),
367+
deviceInfo, err := iscsiClient.GetDeviceInfoForLUN(ctx, hostSessionMap, int(publishInfo.IscsiLunNumber),
367368
publishInfo.IscsiTargetIQN, false)
368369
if err != nil {
369370
Logc(ctx).WithError(err).WithFields(fields).Error("Error getting device info.")
370371
} else if deviceInfo == nil {
371372
Logc(ctx).WithFields(fields).Error("No device info found.")
372373
} else {
373374
// Inform the host about the device removal
374-
if _, err := utils.IscsiClient.PrepareDeviceForRemoval(ctx, deviceInfo, publishInfo, nil, true, false); err != nil {
375+
if _, err := iscsiClient.PrepareDeviceForRemoval(ctx, deviceInfo, publishInfo, nil, true, false); err != nil {
375376
Logc(ctx).WithError(err).WithFields(fields).Error("Error removing device.")
376377
}
377378
}
@@ -391,7 +392,7 @@ func RemoveSCSIDeviceByPublishInfo(ctx context.Context, publishInfo *tridentmode
391392
Logc(ctx).WithFields(fields).Error("No device info found.")
392393
} else {
393394
// Inform the host about the device removal
394-
if _, err := utils.IscsiClient.PrepareDeviceForRemoval(ctx, deviceInfo, publishInfo, nil, true,
395+
if _, err := iscsiClient.PrepareDeviceForRemoval(ctx, deviceInfo, publishInfo, nil, true,
395396
false); err != nil {
396397
Logc(ctx).WithError(err).WithFields(fields).Error("Error removing device.")
397398
}

storage_drivers/ontap/ontap_asa.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
drivers "github.com/netapp/trident/storage_drivers"
2424
"github.com/netapp/trident/storage_drivers/ontap/api"
2525
tridenterrors "github.com/netapp/trident/utils/errors"
26+
"github.com/netapp/trident/utils/iscsi"
2627
"github.com/netapp/trident/utils/models"
2728
)
2829

@@ -33,6 +34,7 @@ type ASAStorageDriver struct {
3334
ips []string
3435
API api.OntapAPI
3536
telemetry *Telemetry
37+
iscsi iscsi.ISCSI
3638

3739
physicalPools map[string]storage.Pool
3840
virtualPools map[string]storage.Pool
@@ -88,6 +90,11 @@ func (d *ASAStorageDriver) Initialize(
8890

8991
var err error
9092

93+
d.iscsi, err = iscsi.New()
94+
if err != nil {
95+
return fmt.Errorf("error initializing iSCSI client: %w", err)
96+
}
97+
9198
if d.Config.CommonStorageDriverConfig == nil {
9299

93100
// Initialize the driver's CommonStorageDriverConfig
@@ -194,7 +201,7 @@ func (d *ASAStorageDriver) validate(ctx context.Context) error {
194201
Logd(ctx, d.Name(), d.Config.DebugTraceFlags["method"]).WithFields(fields).Trace(">>>> validate")
195202
defer Logd(ctx, d.Name(), d.Config.DebugTraceFlags["method"]).WithFields(fields).Trace("<<<< validate")
196203

197-
if err := ValidateSANDriver(ctx, &d.Config, d.ips); err != nil {
204+
if err := ValidateSANDriver(ctx, &d.Config, d.ips, d.iscsi); err != nil {
198205
return fmt.Errorf("driver validation failed: %v", err)
199206
}
200207

@@ -658,7 +665,7 @@ func (d *ASAStorageDriver) Destroy(ctx context.Context, volConfig *storage.Volum
658665
},
659666
},
660667
}
661-
drivers.RemoveSCSIDeviceByPublishInfo(ctx, &publishInfo)
668+
drivers.RemoveSCSIDeviceByPublishInfo(ctx, &publishInfo, d.iscsi)
662669
}
663670
}
664671

storage_drivers/ontap/ontap_asa_test.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
restAPIModels "github.com/netapp/trident/storage_drivers/ontap/api/rest/models"
2727
"github.com/netapp/trident/utils/errors"
2828
"github.com/netapp/trident/utils/filesystem"
29+
"github.com/netapp/trident/utils/iscsi"
2930
"github.com/netapp/trident/utils/models"
3031
)
3132

@@ -76,7 +77,11 @@ func newTestOntapASADriver(
7677
config.StorageDriverName = "ontap-san"
7778
config.StoragePrefix = convert.ToPtr("test_")
7879

79-
asaDriver := &ASAStorageDriver{}
80+
iscsiClient, _ := iscsi.New()
81+
82+
asaDriver := &ASAStorageDriver{
83+
iscsi: iscsiClient,
84+
}
8085
asaDriver.Config = *config
8186

8287
var ontapAPI api.OntapAPI

storage_drivers/ontap/ontap_common.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,11 @@ import (
3737
"github.com/netapp/trident/storage_drivers/ontap/api"
3838
"github.com/netapp/trident/storage_drivers/ontap/api/azgo"
3939
"github.com/netapp/trident/storage_drivers/ontap/api/rest/models"
40-
"github.com/netapp/trident/utils"
4140
"github.com/netapp/trident/utils/devices/luks"
4241
"github.com/netapp/trident/utils/errors"
4342
"github.com/netapp/trident/utils/fcp"
4443
"github.com/netapp/trident/utils/filesystem"
44+
"github.com/netapp/trident/utils/iscsi"
4545
tridentmodels "github.com/netapp/trident/utils/models"
4646
"github.com/netapp/trident/utils/version"
4747
)
@@ -904,7 +904,7 @@ func PublishLUN(
904904
if publishInfo.Localhost {
905905

906906
// Lookup local host IQNs
907-
iqns, err := utils.GetInitiatorIqns(ctx)
907+
iqns, err := iscsi.GetInitiatorIqns(ctx)
908908
if err != nil {
909909
return fmt.Errorf("error determining host initiator IQN: %v", err)
910910
} else if len(iqns) == 0 {
@@ -1560,7 +1560,7 @@ func InitializeOntapAPI(
15601560

15611561
// ValidateSANDriver contains the validation logic shared between ontap-san and ontap-san-economy.
15621562
func ValidateSANDriver(
1563-
ctx context.Context, config *drivers.OntapStorageDriverConfig, ips []string,
1563+
ctx context.Context, config *drivers.OntapStorageDriverConfig, ips []string, iscsi iscsi.ISCSI,
15641564
) error {
15651565
fields := LogFields{"Method": "ValidateSANDriver", "Type": "ontap_common"}
15661566
Logd(ctx, config.StorageDriverName,
@@ -1579,7 +1579,7 @@ func ValidateSANDriver(
15791579
case tridentconfig.ContextDocker:
15801580
// Make sure this host is logged into the ONTAP iSCSI target
15811581
if config.SANType == sa.ISCSI {
1582-
err := utils.IscsiClient.EnsureISCSISessionsWithPortalDiscovery(ctx, ips)
1582+
err := iscsi.EnsureSessionsWithPortalDiscovery(ctx, ips)
15831583
if err != nil {
15841584
return fmt.Errorf("error establishing iSCSI session: %v", err)
15851585
}
@@ -1595,7 +1595,7 @@ func ValidateSANDriver(
15951595
}
15961596
}
15971597

1598-
if config.SANType == sa.FCP && config.UseCHAP == true {
1598+
if config.SANType == sa.FCP && config.UseCHAP {
15991599
return fmt.Errorf("CHAP is not supported with FCP protocol")
16001600
}
16011601

storage_drivers/ontap/ontap_common_test.go

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
tridentconfig "github.com/netapp/trident/config"
2020
mock_ontap "github.com/netapp/trident/mocks/mock_storage_drivers/mock_ontap"
2121
mockapi "github.com/netapp/trident/mocks/mock_storage_drivers/mock_ontap"
22+
"github.com/netapp/trident/mocks/mock_utils/mock_iscsi"
2223
"github.com/netapp/trident/pkg/capacity"
2324
"github.com/netapp/trident/pkg/convert"
2425
"github.com/netapp/trident/storage"
@@ -5833,14 +5834,17 @@ func TestValidateSANDriver(t *testing.T) {
58335834
UseCHAP: true,
58345835
DataLIF: "1.1.1.1",
58355836
}
5837+
mockCtrl := gomock.NewController(t)
5838+
5839+
iscsiClient := mock_iscsi.NewMockISCSI(mockCtrl)
58365840

5837-
err := ValidateSANDriver(ctx, config, ips)
5841+
err := ValidateSANDriver(ctx, config, ips, iscsiClient)
58385842
assert.NoError(t, err)
58395843

58405844
// Test 2: IP not found
58415845
ips = []string{"2.2.2.2", "3.3.3.3", "4.4.4.4", "5.5.5.5", "6.6.6.6", "7.7.7.7", "8.8.8.8"}
58425846

5843-
err = ValidateSANDriver(ctx, config, ips)
5847+
err = ValidateSANDriver(ctx, config, ips, iscsiClient)
58445848

58455849
assert.NoError(t, err)
58465850
}
@@ -5859,8 +5863,11 @@ func TestValidateSANDriver_IPNotFound(t *testing.T) {
58595863
UseCHAP: true,
58605864
DataLIF: "1.1.1.1",
58615865
}
5866+
mockCtrl := gomock.NewController(t)
5867+
5868+
iscsiClient := mock_iscsi.NewMockISCSI(mockCtrl)
58625869

5863-
err := ValidateSANDriver(ctx, config, ips)
5870+
err := ValidateSANDriver(ctx, config, ips, iscsiClient)
58645871

58655872
assert.NoError(t, err)
58665873
}
@@ -5880,7 +5887,11 @@ func TestValidateSANDriver_BackendIgroupDeprecation(t *testing.T) {
58805887
DataLIF: "1.1.1.1",
58815888
}
58825889

5883-
err := ValidateSANDriver(ctx, config, ips)
5890+
mockCtrl := gomock.NewController(t)
5891+
5892+
iscsiClient := mock_iscsi.NewMockISCSI(mockCtrl)
5893+
5894+
err := ValidateSANDriver(ctx, config, ips, iscsiClient)
58845895

58855896
assert.NoError(t, err)
58865897
}

storage_drivers/ontap/ontap_san.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ func (d *SANStorageDriver) validate(ctx context.Context) error {
242242
return fmt.Errorf("replication validation failed: %v", err)
243243
}
244244

245-
if err := ValidateSANDriver(ctx, &d.Config, d.ips); err != nil {
245+
if err := ValidateSANDriver(ctx, &d.Config, d.ips, d.iscsi); err != nil {
246246
return fmt.Errorf("driver validation failed: %v", err)
247247
}
248248

@@ -877,7 +877,7 @@ func (d *SANStorageDriver) Destroy(ctx context.Context, volConfig *storage.Volum
877877
},
878878
},
879879
}
880-
drivers.RemoveSCSIDeviceByPublishInfo(ctx, &publishInfo)
880+
drivers.RemoveSCSIDeviceByPublishInfo(ctx, &publishInfo, d.iscsi)
881881

882882
}
883883
}

storage_drivers/ontap/ontap_san_economy.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -415,7 +415,7 @@ func (d *SANEconomyStorageDriver) validate(ctx context.Context) error {
415415
Logd(ctx, d.Name(), d.Config.DebugTraceFlags["method"]).WithFields(fields).Trace(">>>> validate")
416416
defer Logd(ctx, d.Name(), d.Config.DebugTraceFlags["method"]).WithFields(fields).Trace("<<<< validate")
417417

418-
if err := ValidateSANDriver(ctx, &d.Config, d.ips); err != nil {
418+
if err := ValidateSANDriver(ctx, &d.Config, d.ips, d.iscsi); err != nil {
419419
return fmt.Errorf("driver validation failed: %w", err)
420420
}
421421

@@ -1083,7 +1083,7 @@ func (d *SANEconomyStorageDriver) Destroy(ctx context.Context, volConfig *storag
10831083
},
10841084
},
10851085
}
1086-
drivers.RemoveSCSIDeviceByPublishInfo(ctx, &publishInfo)
1086+
drivers.RemoveSCSIDeviceByPublishInfo(ctx, &publishInfo, d.iscsi)
10871087
}
10881088
}
10891089

0 commit comments

Comments
 (0)