@@ -281,51 +281,51 @@ func PerformAction(clients kube.Clients, config util.Config, upgradeFuncs callba
281281 if result == constants .Updated {
282282
283283 if _ , ok := i .(* app.Deployment ); ok {
284+
284285 accessor , err := meta .Accessor (i )
285286 if err != nil {
286- logrus .Errorf ("Failed to get accessor for resource '%s': %v" , i , err )
287287 return err
288288 }
289- deploymentName := accessor . GetName ()
290- deploymentNamespace := accessor .GetNamespace ()
291- logrus . Infof ( "Resource name: %s, namespace: %s is of type Deployment" , deploymentName , deploymentNamespace )
292- annotations := upgradeFuncs . AnnotationsFunc ( i )
293- pauseValue := annotations ["pause" ]
294- if pauseValue != "" {
295- logrus . Infof ( "Pause value is %s" , pauseValue )
296- pauseDuration , err := time . ParseDuration ( pauseValue )
297- if err != nil {
298- logrus .Errorf ( "Failed to parse pause value '%s' for resource '%s': %v" , pauseValue , deploymentName , err )
289+
290+ itemName := accessor .GetName ()
291+ itemNamespace := accessor . GetNamespace ( )
292+
293+ pauseIntervalValue := annotations ["deployment.reloader.stakater.com/ pause-interval " ]
294+ if pauseIntervalValue != "" {
295+
296+ deployment , ok := i .( * app. Deployment )
297+ if ! ok {
298+ logrus .Warnf ( "Annotation 'deployment.reloader.stakater.com/ pause-interval' only applicable for Deployments" )
299299 } else {
300- logrus .Infof ("Parsed pause value for resource '%s' is %d seconds" , deploymentName , int (pauseDuration .Seconds ()))
301- deployment , ok := i .(* app.Deployment )
302- if ! ok {
303- logrus .Errorf ("Failed to cast resource '%s' to Deployment" , deploymentName )
304- return errors .New ("failed to cast resource to Deployment" )
305- }
306300
307- if ! deployment .Spec .Paused {
308- deployment .Spec .Paused = true
309- logrus .Infof ("Pausing Deployment '%s' in namespace '%s'" , deploymentName , deploymentNamespace )
310- deployment .Annotations ["paused-by-reloader-at" ] = time .Now ().Format (time .RFC3339 )
311-
312- time .AfterFunc (pauseDuration , func () {
313- deployment , err := clients .KubernetesClient .AppsV1 ().Deployments (deploymentNamespace ).Get (context .TODO (), deploymentName , metav1.GetOptions {})
314- if err != nil {
315- logrus .Errorf ("Failed to get Deployment '%s' in namespace '%s': %v" , deploymentName , deploymentNamespace , err )
316- return
317- }
318-
319- deployment .Spec .Paused = false
320- deployment .Annotations ["paused-by-reloader-at" ] = ""
321-
322- _ , err = clients .KubernetesClient .AppsV1 ().Deployments (deploymentNamespace ).Update (context .TODO (), deployment , metav1.UpdateOptions {})
323- if err != nil {
324- logrus .Errorf ("Failed to update Deployment '%s' in namespace '%s': %v" , deploymentName , deploymentNamespace , err )
325- }
326- })
301+ pauseDuration , err := time .ParseDuration (pauseIntervalValue )
302+ if err != nil {
303+ logrus .Errorf ("Failed to parse pause interval value '%s' for deployment '%s': %v" , pauseIntervalValue , itemName , err )
327304 } else {
328- logrus .Infof ("Deployment '%s' in namespace '%s' is already paused" , deploymentName , deploymentNamespace )
305+ if ! deployment .Spec .Paused {
306+ deployment .Spec .Paused = true
307+ logrus .Infof ("Pausing Deployment '%s' in namespace '%s' for %s seconds" , itemName , itemNamespace , pauseDuration )
308+ deployment .Annotations ["deployment.reloader.stakater.com/paused-at" ] = time .Now ().Format (time .RFC3339 )
309+
310+ time .AfterFunc (pauseDuration , func () {
311+ deployment , err := clients .KubernetesClient .AppsV1 ().Deployments (itemNamespace ).Get (context .TODO (), itemName , metav1.GetOptions {})
312+ if err != nil {
313+ logrus .Errorf ("Failed to get Deployment '%s' in namespace '%s': %v" , itemName , itemNamespace , err )
314+ return
315+ }
316+
317+ // TODO: Add check whether deployment has been paused by reloader and only unpause if so
318+ deployment .Spec .Paused = false
319+ delete (deployment .Annotations , "deployment.reloader.stakater.com/paused-at" )
320+
321+ _ , err = clients .KubernetesClient .AppsV1 ().Deployments (itemNamespace ).Update (context .TODO (), deployment , metav1.UpdateOptions {})
322+ if err != nil {
323+ logrus .Errorf ("Failed to update Deployment '%s' in namespace '%s': %v" , itemName , itemNamespace , err )
324+ }
325+ })
326+ } else {
327+ logrus .Infof ("Deployment '%s' in namespace '%s' is already paused" , itemName , itemNamespace )
328+ }
329329 }
330330 }
331331 }
0 commit comments