Move Stripe subscription cancelation before deleting vm
This commit is contained in:
		
					parent
					
						
							
								78fa06aa94
							
						
					
				
			
			
				commit
				
					
						7d683e1257
					
				
			
		
					 1 changed files with 52 additions and 45 deletions
				
			
		|  | @ -1060,6 +1060,53 @@ class VirtualMachineView(LoginRequiredMixin, View): | |||
| 
 | ||||
|         opennebula_vm_id = self.kwargs.get('pk') | ||||
| 
 | ||||
|         # Cancel subscription | ||||
|         stripe_utils = StripeUtils() | ||||
|         error_msg_subject = ( | ||||
|             'Error canceling subscription for ' | ||||
|             '{user} and vm id {vm_id}'.format( | ||||
|                 user=owner.email, | ||||
|                 vm_id=opennebula_vm_id | ||||
|             ) | ||||
|         ) | ||||
|         try: | ||||
|             hosting_order = HostingOrder.objects.get( | ||||
|                 vm_id=opennebula_vm_id | ||||
|             ) | ||||
|             result = stripe_utils.unsubscribe_customer( | ||||
|                 subscription_id=hosting_order.subscription_id | ||||
|             ) | ||||
|             stripe_subscription_obj = result.get('response_object') | ||||
|             # Check if the subscription was canceled | ||||
|             if (stripe_subscription_obj is None or | ||||
|                     stripe_subscription_obj.status != 'canceled'): | ||||
|                 error_msg = result.get('error') | ||||
|                 logger.error(error_msg_subject) | ||||
|                 logger.error(error_msg) | ||||
|                 email_data = { | ||||
|                     'subject': error_msg_subject, | ||||
|                     'from_email': settings.DCL_SUPPORT_FROM_ADDRESS, | ||||
|                     'to': settings.DCL_ERROR_EMAILS_TO_LIST, | ||||
|                     'body': error_msg, | ||||
|                 } | ||||
|                 email = EmailMessage(**email_data) | ||||
|                 email.send() | ||||
|         except HostingOrder.DoesNotExist: | ||||
|             error_msg = ( | ||||
|                 "HostingOrder corresponding to vm_id={vm_id} does" | ||||
|                 "not exist. Hence, can not find subscription to " | ||||
|                 "cancel ".format(vm_id=opennebula_vm_id) | ||||
|             ) | ||||
|             logger.error(error_msg) | ||||
|             email_data = { | ||||
|                 'subject': error_msg_subject, | ||||
|                 'from_email': settings.DCL_SUPPORT_FROM_ADDRESS, | ||||
|                 'to': settings.DCL_ERROR_EMAILS_TO_LIST, | ||||
|                 'body': error_msg, | ||||
|             } | ||||
|             email = EmailMessage(**email_data) | ||||
|             email.send() | ||||
| 
 | ||||
|         manager = OpenNebulaManager( | ||||
|             email=owner.email, | ||||
|             password=owner.password | ||||
|  | @ -1093,54 +1140,14 @@ class VirtualMachineView(LoginRequiredMixin, View): | |||
|                     ).first() | ||||
|                     vm_detail_obj.terminated_at = datetime.utcnow() | ||||
|                     vm_detail_obj.save() | ||||
|                     # Cancel subscription | ||||
|                     stripe_utils = StripeUtils() | ||||
|                     error_msg_subject = ( | ||||
|                         'Error canceling subscription for ' | ||||
|                         '{user} and vm id {vm_id}'.format( | ||||
|                             user=owner.email, | ||||
|                 except BaseException as base_exception: | ||||
|                     logger.error( | ||||
|                         "manager.get_vm returned exception: {details}. Hence, " | ||||
|                         "the vm with id {vm_id} is no more accessible".format( | ||||
|                             details=str(base_exception), | ||||
|                             vm_id=opennebula_vm_id | ||||
|                         ) | ||||
|                     ) | ||||
|                     try: | ||||
|                         hosting_order = HostingOrder.objects.get( | ||||
|                             vm_id=opennebula_vm_id | ||||
|                         ) | ||||
|                         result = stripe_utils.unsubscribe_customer( | ||||
|                             subscription_id=hosting_order.subscription_id | ||||
|                         ) | ||||
|                         stripe_subscription_obj = result.get( | ||||
|                             'response_object') | ||||
|                         # Check if the subscription was canceled | ||||
|                         if (stripe_subscription_obj is None or | ||||
|                                 stripe_subscription_obj.status != 'canceled'): | ||||
|                             error_msg = result.get('error') | ||||
|                             logger.error(error_msg) | ||||
|                             email_data = { | ||||
|                                 'subject': error_msg_subject, | ||||
|                                 'from_email': settings.DCL_SUPPORT_FROM_ADDRESS, | ||||
|                                 'to': settings.DCL_ERROR_EMAILS_TO_LIST, | ||||
|                                 'body': error_msg, | ||||
|                             } | ||||
|                             email = EmailMessage(**email_data) | ||||
|                             email.send() | ||||
|                     except HostingOrder.DoesNotExist: | ||||
|                         error_msg = ( | ||||
|                             "HostingOrder corresponding to vm_id={vm_id} does" | ||||
|                             "not exist. Hence, can not find subscription to " | ||||
|                             "cancel ".format(vm_id=opennebula_vm_id) | ||||
|                         ) | ||||
|                         logger.error(error_msg) | ||||
|                         email_data = { | ||||
|                             'subject': error_msg_subject, | ||||
|                             'from_email': settings.DCL_SUPPORT_FROM_ADDRESS, | ||||
|                             'to': settings.DCL_ERROR_EMAILS_TO_LIST, | ||||
|                             'body': error_msg, | ||||
|                         } | ||||
|                         email = EmailMessage(**email_data) | ||||
|                         email.send() | ||||
|                     break | ||||
|                 except BaseException: | ||||
|                     break | ||||
|                 else: | ||||
|                     sleep(2) | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue