@@ -334,15 +334,29 @@ def start_update(self):
334334
335335 return DSSFuture (self .client , future_response .get ('jobId' , None ), future_response )
336336
337- def delete (self ):
337+ def delete (self , disable_first = False ):
338338 """
339- Deletes this deployment
339+ Deletes this deployment. The disable_first flag automatically disables the deployment
340+ before its deletion.
341+
342+ :param boolean disable_first: If True, automatically disables this deployment before deleting it.
343+ If False, will raise an Exception if this deployment is enabled.
340344
341- You may only delete a deployment if it is disabled and has been updated after disabling it.
342345 """
343- return self .client ._perform_empty (
344- "DELETE" , "/api-deployer/deployments/%s" % (self .deployment_id ))
345346
347+ # Check if the deployment is disabled
348+ is_enabled = self .get_status ().light_status ["deploymentBasicInfo" ].get ("enabled" )
349+ if is_enabled and not disable_first :
350+ raise Exception ("Deployment {} deletion failed: deployment must be disabled first." .format (self .deployment_id ))
351+ if is_enabled :
352+ settings = self .get_settings ()
353+ settings .set_enabled (enabled = False )
354+ settings .save ()
355+ self .client ._perform_empty (
356+ "DELETE" , "/api-deployer/deployments/%s" % (self .deployment_id ))
357+
358+
359+
346360
347361class DSSAPIDeployerDeploymentSettings (object ):
348362 """
@@ -518,7 +532,7 @@ def delete(self):
518532
519533 You may only delete a service if it has no deployments on it anymore.
520534 """
521- return self .client ._perform_empty (
535+ self .client ._perform_empty (
522536 "DELETE" , "/api-deployer/services/%s" % (self .service_id ))
523537
524538
0 commit comments