62 lines
2 KiB
Python
62 lines
2 KiB
Python
import logging
|
|
from oca.pool import WrongIdError
|
|
|
|
from hosting.models import UserHostingKey, VMDetail
|
|
from opennebula_api.serializers import VirtualMachineSerializer
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def get_all_public_keys(customer):
|
|
"""
|
|
Returns all the public keys of the user
|
|
:param customer: The customer whose public keys are needed
|
|
:return: A list of public keys
|
|
"""
|
|
return UserHostingKey.objects.filter(user_id=customer.id).values_list(
|
|
"public_key", flat=True)
|
|
|
|
|
|
def get_or_create_vm_detail(user, manager, vm_id):
|
|
"""
|
|
Returns VMDetail object related to given vm_id. Creates the object
|
|
if it does not exist
|
|
|
|
:param vm_id: The ID of the VM which should be greater than 0.
|
|
:param user: The CustomUser object that owns this VM
|
|
:param manager: The OpenNebulaManager object
|
|
:return: The VMDetail object. None if vm_id is less than or equal to 0.
|
|
Also, for the cases where the VMDetail does not exist and we can not
|
|
fetch data about the VM from OpenNebula, the function returns None
|
|
"""
|
|
if vm_id <= 0:
|
|
return None
|
|
try:
|
|
vm_detail_obj = VMDetail.objects.get(vm_id=vm_id)
|
|
except VMDetail.DoesNotExist:
|
|
try:
|
|
vm_obj = manager.get_vm(vm_id)
|
|
except (WrongIdError, ConnectionRefusedError) as e:
|
|
logger.error(str(e))
|
|
return None
|
|
vm = VirtualMachineSerializer(vm_obj).data
|
|
vm_detail_obj = VMDetail.objects.create(
|
|
user=user, vm_id=vm_id, disk_size=vm['disk_size'],
|
|
cores=vm['cores'], memory=vm['memory'],
|
|
configuration=vm['configuration'], ipv4=vm['ipv4'],
|
|
ipv6=vm['ipv6']
|
|
)
|
|
return vm_detail_obj
|
|
|
|
|
|
def get_vm_price(cpu, memory, disk_size):
|
|
"""
|
|
A helper function that computes price of a VM from given cpu, ram and
|
|
ssd parameters
|
|
|
|
:param cpu: Number of cores of the VM
|
|
:param memory: RAM of the VM
|
|
:param disk_size: Disk space of the VM
|
|
:return: The price of the VM
|
|
"""
|
|
return (cpu * 5) + (memory * 2) + (disk_size * 0.6)
|