1- // Copyright 2024 NetApp, Inc. All Rights Reserved.
1+ // Copyright 2025 NetApp, Inc. All Rights Reserved.
22
33package ontap
44
@@ -30,6 +30,7 @@ func GetStorageDriver(
3030 ctx context.Context , configJSON string , commonConfig * drivers.CommonStorageDriverConfig ,
3131 backendSecret map [string ]string ,
3232) (storage.Driver , error ) {
33+ var storageDriver storage.Driver
3334 driverProtocol , err := GetDriverProtocol (commonConfig .StorageDriverName , configJSON )
3435 if err != nil {
3536 Logc (ctx ).WithField ("error" , err ).Error ("Failed to get driver protocol." )
@@ -51,8 +52,13 @@ func GetStorageDriver(
5152
5253 // Initialize the ONTAP API.
5354 API , err := InitializeOntapDriver (ctx , ontapConfig )
54- if err != nil {
55- return nil , fmt .Errorf ("error initializing %s driver: %v" , commonConfig .StorageDriverName , err )
55+ if API == nil {
56+ Logc (ctx ).WithError (err ).Errorf ("error initializing %s driver" , commonConfig .StorageDriverName )
57+ storageDriver , err = getEmptyStorageDriver (commonConfig .StorageDriverName , driverProtocol )
58+ if err != nil {
59+ return nil , err
60+ }
61+ return storageDriver , nil
5662 }
5763
5864 // Set up driver flags
@@ -62,7 +68,6 @@ func GetStorageDriver(
6268 FlagSANOptimized : strconv .FormatBool (API .IsSANOptimized ()),
6369 }
6470
65- var storageDriver storage.Driver
6671 switch ontapConfig .StorageDriverName {
6772
6873 case config .OntapNASStorageDriverName :
@@ -107,6 +112,32 @@ func GetStorageDriver(
107112 return storageDriver , nil
108113}
109114
115+ func getEmptyStorageDriver (driverName , driverProtocol string ) (storage.Driver , error ) {
116+ var storageDriver storage.Driver
117+
118+ // Pre-driver initialization setup
119+ switch driverName {
120+ case config .OntapNASStorageDriverName :
121+ storageDriver = & NASStorageDriver {}
122+ case config .OntapNASFlexGroupStorageDriverName :
123+ storageDriver = & NASFlexGroupStorageDriver {}
124+ case config .OntapNASQtreeStorageDriverName :
125+ storageDriver = & NASQtreeStorageDriver {}
126+ case config .OntapSANStorageDriverName :
127+ if driverProtocol == sa .ISCSI || driverProtocol == sa .FCP {
128+ storageDriver = & SANStorageDriver {}
129+ } else {
130+ storageDriver = & NVMeStorageDriver {}
131+ }
132+ case config .OntapSANEconomyStorageDriverName :
133+ storageDriver = & SANEconomyStorageDriver {}
134+ default :
135+ return nil , fmt .Errorf ("unknown storage driver: %v" , driverName )
136+ }
137+
138+ return storageDriver , nil
139+ }
140+
110141// GetDriverProtocol returns the protocol type for SAN Drivers using the backend config.
111142// This function can be extended for NAS drivers if required.
112143func GetDriverProtocol (driverName , configJSON string ) (string , error ) {
0 commit comments