@@ -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
1921const (
@@ -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+
115140func getEmptyStorageDriver (driverName , driverProtocol string ) (storage.Driver , error ) {
116141 var storageDriver storage.Driver
117142
0 commit comments