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