Fallback to obtain VM_ID from order if not in metadata

This commit is contained in:
PCoder 2019-04-15 23:17:38 +02:00
commit d64b6329ab

View file

@ -1234,6 +1234,7 @@ class InvoiceDetailView(LoginRequiredMixin, DetailView):
def get_object(self, queryset=None): def get_object(self, queryset=None):
invoice_id = self.kwargs.get('invoice_id') invoice_id = self.kwargs.get('invoice_id')
logger.debug("Getting invoice for %s" % invoice_id)
try: try:
invoice_obj = MonthlyHostingBill.objects.get( invoice_obj = MonthlyHostingBill.objects.get(
invoice_number=invoice_id invoice_number=invoice_id
@ -1262,33 +1263,22 @@ class InvoiceDetailView(LoginRequiredMixin, DetailView):
if obj is not None: if obj is not None:
vm_id = obj.get_vm_id() vm_id = obj.get_vm_id()
try: if vm_id is None:
# Try to get vm details from database # We did not find it in the metadata, fallback to order
vm_detail = VMDetail.objects.get(vm_id=vm_id) if obj.order is not None:
context['vm'] = vm_detail.__dict__ vm_id = obj.order.vm_id
context['vm']['name'] = '{}-{}'.format( logger.debug("VM ID from order is %s" % vm_id)
context['vm']['configuration'], context['vm']['vm_id']) else:
price, vat, vat_percent, discount = get_vm_price_with_vat( logger.debug("VM order is None. So, we don't have VM_ID")
cpu=context['vm']['cores'], else:
ssd_size=context['vm']['disk_size'], logger.debug("VM ID was set in metadata")
memory=context['vm']['memory'], if vm_id > 0:
pricing_name=(obj.order.vm_pricing.name
if obj.order.vm_pricing else 'default')
)
context['vm']['vat'] = vat
context['vm']['price'] = price
context['vm']['discount'] = discount
context['vm']['vat_percent'] = vat_percent
context['vm']['total_price'] = price + vat - discount['amount']
except VMDetail.DoesNotExist:
# fallback to get it from the infrastructure
try: try:
manager = OpenNebulaManager( # Try to get vm details from database
email=self.request.email, vm_detail = VMDetail.objects.get(vm_id=vm_id)
password=self.request.password context['vm'] = vm_detail.__dict__
) context['vm']['name'] = '{}-{}'.format(
vm = manager.get_vm(vm_id) context['vm']['configuration'], context['vm']['vm_id'])
context['vm'] = VirtualMachineSerializer(vm).data
price, vat, vat_percent, discount = get_vm_price_with_vat( price, vat, vat_percent, discount = get_vm_price_with_vat(
cpu=context['vm']['cores'], cpu=context['vm']['cores'],
ssd_size=context['vm']['disk_size'], ssd_size=context['vm']['disk_size'],
@ -1300,20 +1290,43 @@ class InvoiceDetailView(LoginRequiredMixin, DetailView):
context['vm']['price'] = price context['vm']['price'] = price
context['vm']['discount'] = discount context['vm']['discount'] = discount
context['vm']['vat_percent'] = vat_percent context['vm']['vat_percent'] = vat_percent
context['vm']['total_price'] = ( context['vm']['total_price'] = price + vat - discount['amount']
price + vat - discount['amount'] except VMDetail.DoesNotExist:
) # fallback to get it from the infrastructure
except WrongIdError: try:
logger.error("WrongIdError while accessing " manager = OpenNebulaManager(
"invoice {}".format(obj.invoice_id)) email=self.request.email,
messages.error( password=self.request.password
self.request, )
_('The VM you are looking for is unavailable at the ' vm = manager.get_vm(vm_id)
'moment. Please contact Data Center Light support.') context['vm'] = VirtualMachineSerializer(vm).data
) price, vat, vat_percent, discount = get_vm_price_with_vat(
self.kwargs['error'] = 'WrongIdError' cpu=context['vm']['cores'],
context['error'] = 'WrongIdError' ssd_size=context['vm']['disk_size'],
return context memory=context['vm']['memory'],
pricing_name=(obj.order.vm_pricing.name
if obj.order.vm_pricing else 'default')
)
context['vm']['vat'] = vat
context['vm']['price'] = price
context['vm']['discount'] = discount
context['vm']['vat_percent'] = vat_percent
context['vm']['total_price'] = (
price + vat - discount['amount']
)
except WrongIdError:
logger.error("WrongIdError while accessing "
"invoice {}".format(obj.invoice_id))
messages.error(
self.request,
_('The VM you are looking for is unavailable at the '
'moment. Please contact Data Center Light support.')
)
self.kwargs['error'] = 'WrongIdError'
context['error'] = 'WrongIdError'
return context
else:
logger.debug("No VM_ID. So, no details available.")
# add context params from monthly hosting bill # add context params from monthly hosting bill
context['period_start'] = obj.get_period_start() context['period_start'] = obj.get_period_start()