@@ -18,6 +18,7 @@ package main
1818
1919import (
2020 "context"
21+ "errors"
2122 "flag"
2223 "fmt"
2324 "net/http"
@@ -207,7 +208,9 @@ func main() {
207208 * timeout ,
208209 kubeClient ,
209210 driverName )
210- if err != nil {
211+ if err != nil && errors .Is (err , resizer .ResizeNotSupportErr ) {
212+ klog .InfoS ("Resize not supported" , "message" , err )
213+ } else if err != nil {
211214 klog .ErrorS (err , "Failed to create CSI resizer" )
212215 klog .FlushAndExit (klog .ExitFlushTimeout , 1 )
213216 }
@@ -219,11 +222,17 @@ func main() {
219222 informerFactory ,
220223 * extraModifyMetadata ,
221224 driverName )
222- if err != nil {
225+ if err != nil && errors .Is (err , modifier .ModifyNotSupportErr ) {
226+ klog .InfoS ("Modify not supported" , "message" , err )
227+ } else if err != nil {
223228 klog .ErrorS (err , "Failed to create CSI modifier" )
224229 klog .FlushAndExit (klog .ExitFlushTimeout , 1 )
225230 }
226231
232+ if csiResizer == nil && csiModifier == nil {
233+ klog .Fatalf ("CSI driver does not support resize nor modify" )
234+ }
235+
227236 // Start HTTP server for metrics + leader election healthz
228237 if addr != "" {
229238 metricsManager .RegisterToServer (mux , * metricsPath )
@@ -238,17 +247,30 @@ func main() {
238247 }()
239248 }
240249
241- resizerName := csiResizer .Name ()
242- rc := controller .NewResizeController (resizerName , csiResizer , kubeClient , * resyncPeriod , informerFactory ,
243- workqueue .NewTypedItemExponentialFailureRateLimiter [string ](* retryIntervalStart , * retryIntervalMax ),
244- * handleVolumeInUseError , * retryIntervalMax )
250+ leaseHolder := ""
251+ var rc controller.ResizeController
252+ if csiResizer != nil {
253+ resizerName := csiResizer .Name ()
254+ rc = controller .NewResizeController (resizerName , csiResizer , kubeClient , * resyncPeriod , informerFactory ,
255+ workqueue .NewTypedItemExponentialFailureRateLimiter [string ](* retryIntervalStart , * retryIntervalMax ),
256+ * handleVolumeInUseError , * retryIntervalMax )
257+
258+ leaseHolder = resizerName
259+ }
245260
246- modifierName := csiModifier .Name ()
247261 var mc modifycontroller.ModifyController
248- // Add modify controller only if the feature gate is enabled
249- if utilfeature .DefaultFeatureGate .Enabled (features .VolumeAttributesClass ) {
250- mc = modifycontroller .NewModifyController (modifierName , csiModifier , kubeClient , * resyncPeriod , * retryIntervalMax , * extraModifyMetadata , informerFactory ,
251- workqueue .NewTypedItemExponentialFailureRateLimiter [string ](* retryIntervalStart , * retryIntervalMax ))
262+ if csiModifier != nil {
263+ modifierName := csiModifier .Name ()
264+ // Add modify controller only if the feature gate is enabled
265+ if utilfeature .DefaultFeatureGate .Enabled (features .VolumeAttributesClass ) {
266+ mc = modifycontroller .NewModifyController (modifierName , csiModifier , kubeClient , * resyncPeriod ,
267+ * retryIntervalMax , * extraModifyMetadata , informerFactory ,
268+ workqueue .NewTypedItemExponentialFailureRateLimiter [string ](* retryIntervalStart , * retryIntervalMax ))
269+ }
270+
271+ if leaseHolder == "" {
272+ leaseHolder = modifierName
273+ }
252274 }
253275
254276 // handle SIGTERM and SIGINT by cancelling the context.
@@ -278,16 +300,20 @@ func main() {
278300 informerFactory .Start (ctx .Done ())
279301 if utilfeature .DefaultFeatureGate .Enabled (features .ReleaseLeaderElectionOnExit ) {
280302 var wg sync.WaitGroup
281- go rc .Run (* workers , controllerCtx , & wg )
282- if utilfeature .DefaultFeatureGate .Enabled (features .VolumeAttributesClass ) {
303+ if rc != nil {
304+ go rc .Run (* workers , controllerCtx , & wg )
305+ }
306+ if mc != nil && utilfeature .DefaultFeatureGate .Enabled (features .VolumeAttributesClass ) {
283307 go mc .Run (* workers , controllerCtx , & wg )
284308 }
285309 <- controllerCtx .Done ()
286310 wg .Wait ()
287311 terminate ()
288312 } else {
289- go rc .Run (* workers , ctx , nil )
290- if utilfeature .DefaultFeatureGate .Enabled (features .VolumeAttributesClass ) {
313+ if rc != nil {
314+ go rc .Run (* workers , ctx , nil )
315+ }
316+ if mc != nil && utilfeature .DefaultFeatureGate .Enabled (features .VolumeAttributesClass ) {
291317 go mc .Run (* workers , ctx , nil )
292318 }
293319 <- ctx .Done ()
@@ -297,7 +323,7 @@ func main() {
297323 if ! * enableLeaderElection {
298324 run (ctx )
299325 } else {
300- lockName := "external-resizer-" + util .SanitizeName (resizerName )
326+ lockName := "external-resizer-" + util .SanitizeName (leaseHolder )
301327 leKubeClient , err := kubernetes .NewForConfig (config )
302328 if err != nil {
303329 klog .ErrorS (err , "Failed to create leKubeClient" )
0 commit comments