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') |         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( |         manager = OpenNebulaManager( | ||||||
|             email=owner.email, |             email=owner.email, | ||||||
|             password=owner.password |             password=owner.password | ||||||
|  | @ -1093,54 +1140,14 @@ class VirtualMachineView(LoginRequiredMixin, View): | ||||||
|                     ).first() |                     ).first() | ||||||
|                     vm_detail_obj.terminated_at = datetime.utcnow() |                     vm_detail_obj.terminated_at = datetime.utcnow() | ||||||
|                     vm_detail_obj.save() |                     vm_detail_obj.save() | ||||||
|                     # Cancel subscription |                 except BaseException as base_exception: | ||||||
|                     stripe_utils = StripeUtils() |                     logger.error( | ||||||
|                     error_msg_subject = ( |                         "manager.get_vm returned exception: {details}. Hence, " | ||||||
|                         'Error canceling subscription for ' |                         "the vm with id {vm_id} is no more accessible".format( | ||||||
|                         '{user} and vm id {vm_id}'.format( |                             details=str(base_exception), | ||||||
|                             user=owner.email, |  | ||||||
|                             vm_id=opennebula_vm_id |                             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 |                     break | ||||||
|                 else: |                 else: | ||||||
|                     sleep(2) |                     sleep(2) | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue