@@ -367,27 +367,40 @@ def deploy(self, namespace, name, image, command, **kwargs): # noqa
367367 desired = kwargs ['replicas' ]
368368 logger .debug ('No prior RC could be found for {}-{}' .format (namespace , app_type ))
369369
370+ # see if application or global deploy batches are defined
371+ if not kwargs .get ('batches' , None ):
372+ # figure out how many nodes the application can go on
373+ tags = kwargs .get ('tags' , {})
374+ steps = len (self ._get_nodes (labels = tags ).json ()['items' ])
375+ else :
376+ steps = int (kwargs .get ('batches' ))
377+
378+ # figure out what kind of batches the deploy is done in - 1 in, 1 out or higher
379+ if desired < steps :
380+ # do it all in one go
381+ batches = [desired ]
382+ else :
383+ # figure out the stepped deploy count and then see if there is a leftover
384+ batches = [steps for n in set (range (1 , (desired + 1 ))) if n % steps == 0 ]
385+ if desired - sum (batches ) > 0 :
386+ batches .append (desired - sum (batches ))
387+
370388 try :
371- count = 1
372- while desired >= count :
389+ count = 0
390+ new_name = new_rc ["metadata" ]["name" ]
391+ for batch in batches :
392+ count += batch
373393 logger .debug ('scaling release {} to {} out of final {}' .format (
374- new_rc ["metadata" ]["name" ], count , desired
375- ))
376- self ._scale_rc (namespace , new_rc ["metadata" ]["name" ], count )
377- logger .debug ('scaled up pod number {} for {}' .format (
378- count , new_rc ["metadata" ]["name" ]
394+ new_name , count , desired
379395 ))
396+ self ._scale_rc (namespace , new_name , count )
380397
381398 if old_rc :
399+ old_name = old_rc ["metadata" ]["name" ]
382400 logger .debug ('scaling old release {} from original {} to {}' .format (
383- old_rc [ "metadata" ][ "name" ] , desired , (desired - count ))
401+ old_name , desired , (desired - count ))
384402 )
385- self ._scale_rc (namespace , old_rc ["metadata" ]["name" ], (desired - count ))
386- logger .debug ('scaled down pod number {} for {}' .format (
387- count , old_rc ["metadata" ]["name" ]
388- ))
389-
390- count += 1
403+ self ._scale_rc (namespace , old_name , (desired - count ))
391404 except Exception as e :
392405 # New release is broken. Clean up
393406 logger .error ('Could not scale {} to {}. Deleting and going back to old release' .format (
0 commit comments