Skip to content

Commit e78b15c

Browse files
authored
Removing check which blocks legacy ASA systems
1 parent 460cc4d commit e78b15c

File tree

2 files changed

+84
-19
lines changed

2 files changed

+84
-19
lines changed

storage_drivers/ontap/ontap_factory.go

Lines changed: 44 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import (
1414
"github.com/netapp/trident/storage"
1515
sa "github.com/netapp/trident/storage_attribute"
1616
drivers "github.com/netapp/trident/storage_drivers"
17+
"github.com/netapp/trident/storage_drivers/ontap/api"
18+
"github.com/netapp/trident/storage_drivers/ontap/awsapi"
1719
)
1820

1921
const (
@@ -81,37 +83,60 @@ func GetStorageDriver(
8183

8284
// ontap-san uses additional system details to choose the needed driver
8385
case config.OntapSANStorageDriverName:
84-
switch driverProtocol {
85-
case sa.ISCSI:
86-
if API.IsSANOptimized() && API.IsDisaggregated() {
87-
ontapConfig.Flags[FlagPersonality] = PersonalityASAr2 // Used by ASUP to distinguish personalities
88-
storageDriver = &ASAStorageDriver{API: API, Config: *ontapConfig}
89-
} else if !API.IsSANOptimized() && !API.IsDisaggregated() {
90-
storageDriver = &SANStorageDriver{API: API, AWSAPI: AWSAPI, Config: *ontapConfig}
91-
} else {
92-
return nil, fmt.Errorf("unsupported ONTAP personality with disaggregated %t and SAN optimized %t",
93-
API.IsDisaggregated(), API.IsSANOptimized())
94-
}
95-
case sa.FCP:
96-
storageDriver = &SANStorageDriver{API: API, AWSAPI: AWSAPI, Config: *ontapConfig}
97-
case sa.NVMe:
98-
storageDriver = &NVMeStorageDriver{API: API, AWSAPI: AWSAPI, Config: *ontapConfig}
99-
default:
100-
return nil, fmt.Errorf("unsupported SAN protocol %s", driverProtocol)
86+
if storageDriver, err = getSANStorageDriverBasedOnPersonality(
87+
API.IsSANOptimized(), API.IsDisaggregated(),
88+
driverProtocol, ontapConfig,
89+
API, AWSAPI); err != nil {
90+
return nil, fmt.Errorf("error initializing %s driver: %v", ontapConfig.StorageDriverName, err)
10191
}
10292

10393
default:
10494
return nil, fmt.Errorf("unsupported ONTAP driver type %s", ontapConfig.StorageDriverName)
10595
}
10696

10797
Logc(ctx).WithFields(LogFields{
108-
"disaggregated": API.IsDisaggregated(),
109-
"sanOptimized": API.IsSANOptimized(),
98+
"disaggregated": API.IsDisaggregated(),
99+
"sanOptimized": API.IsSANOptimized(),
100+
"driverProtocol": driverProtocol,
110101
}).Infof("ONTAP factory creating %T backend.", storageDriver)
111102

112103
return storageDriver, nil
113104
}
114105

106+
func getSANStorageDriverBasedOnPersonality(
107+
sanOptimized, disaggregated bool,
108+
driverProtocol string, ontapConfig *drivers.OntapStorageDriverConfig,
109+
api api.OntapAPI, awsapi awsapi.AWSAPI,
110+
) (storage.Driver, error) {
111+
isASAr2 := false
112+
if sanOptimized && disaggregated {
113+
// Setup personality to be used by ASUP
114+
if ontapConfig.Flags == nil {
115+
ontapConfig.Flags = make(map[string]string)
116+
}
117+
ontapConfig.Flags[FlagPersonality] = PersonalityASAr2
118+
isASAr2 = true
119+
}
120+
121+
switch driverProtocol {
122+
case sa.ISCSI:
123+
if isASAr2 {
124+
// ASAr2 iSCSI SAN driver
125+
return &ASAStorageDriver{API: api, Config: *ontapConfig}, nil
126+
} else {
127+
// Unified iSCSI SAN driver
128+
return &SANStorageDriver{API: api, AWSAPI: awsapi, Config: *ontapConfig}, nil
129+
}
130+
case sa.NVMe:
131+
// Unified NVMe SAN driver
132+
return &NVMeStorageDriver{API: api, AWSAPI: awsapi, Config: *ontapConfig}, nil
133+
case sa.FCP:
134+
return &SANStorageDriver{API: api, AWSAPI: awsapi, Config: *ontapConfig}, nil
135+
default:
136+
return nil, fmt.Errorf("unsupported SAN protocol %s", driverProtocol)
137+
}
138+
}
139+
115140
func getEmptyStorageDriver(driverName, driverProtocol string) (storage.Driver, error) {
116141
var storageDriver storage.Driver
117142

storage_drivers/ontap/ontap_factory_test.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,12 @@ import (
66
"testing"
77

88
"github.com/stretchr/testify/assert"
9+
"go.uber.org/mock/gomock"
910

1011
"github.com/netapp/trident/config"
12+
mockapi "github.com/netapp/trident/mocks/mock_storage_drivers/mock_ontap"
1113
sa "github.com/netapp/trident/storage_attribute"
14+
drivers "github.com/netapp/trident/storage_drivers"
1215
)
1316

1417
func TestGetDriverProtocol(t *testing.T) {
@@ -41,3 +44,40 @@ func TestGetDriverProtocol(t *testing.T) {
4144
_, err = GetDriverProtocol(config.OntapNASStorageDriverName, `{}`)
4245
assert.NoError(t, err, "Failed to get protocol type.")
4346
}
47+
48+
func TestGetSANStorageDriverBasedOnPersonality(t *testing.T) {
49+
ontapConfig := drivers.OntapStorageDriverConfig{
50+
CommonStorageDriverConfig: &drivers.CommonStorageDriverConfig{},
51+
}
52+
mockCtrl := gomock.NewController(t)
53+
mockAPI := mockapi.NewMockOntapAPI(mockCtrl)
54+
mockAWSAPI := mockapi.NewMockAWSAPI(mockCtrl)
55+
56+
tests := []struct {
57+
sanOptimized bool
58+
disaggregated bool
59+
driverProtocol string
60+
expectedDriverType interface{}
61+
expectError bool
62+
}{
63+
{true, true, sa.ISCSI, &ASAStorageDriver{}, false},
64+
{true, false, sa.ISCSI, &SANStorageDriver{}, false},
65+
{false, false, sa.ISCSI, &SANStorageDriver{}, false},
66+
{false, false, sa.NVMe, &NVMeStorageDriver{}, false},
67+
{false, false, sa.FCP, &SANStorageDriver{}, false},
68+
{false, false, "unsupported", nil, true},
69+
}
70+
71+
for _, test := range tests {
72+
driver, err := getSANStorageDriverBasedOnPersonality(
73+
test.sanOptimized, test.disaggregated, test.driverProtocol, &ontapConfig, mockAPI, mockAWSAPI,
74+
)
75+
76+
if test.expectError {
77+
assert.Error(t, err, "expected error but got none")
78+
} else {
79+
assert.NoError(t, err, "expected no error but got one")
80+
assert.IsType(t, test.expectedDriverType, driver, "storage driver type does not match")
81+
}
82+
}
83+
}

0 commit comments

Comments
 (0)