Access VirtualMachineTemplates via api!
Serialization of VirtualMachineTemplates now fully works
This commit is contained in:
parent
5ed72bf4bf
commit
cbc13de34f
5 changed files with 180 additions and 59 deletions
|
|
@ -28,31 +28,30 @@ class VirtualMachineTemplate(models.Model):
|
|||
return price
|
||||
|
||||
def get_name(self):
|
||||
if self.manager is None:
|
||||
self.manager = OpenNebulaManager()
|
||||
|
||||
template = self.manager._get_template(template_id=self.opennebula_id)
|
||||
manager = OpenNebulaManager(create_user=False)
|
||||
template = manager._get_template(template_id=self.opennebula_id)
|
||||
return template.name
|
||||
|
||||
def get_cores(self):
|
||||
if self.manager is None:
|
||||
self.manager = OpenNebulaManager()
|
||||
|
||||
template = self.manager._get_template(template_id=self.opennebula_id).template
|
||||
manager = OpenNebulaManager(create_user=False)
|
||||
template = manager._get_template(template_id=self.opennebula_id).template
|
||||
return int(template.vcpu)
|
||||
|
||||
def get_disk_size(self):
|
||||
if self.manager is None:
|
||||
self.manager = OpenNebulaManager()
|
||||
|
||||
template = self.manager._get_template(template_id=self.opennebula_id).template
|
||||
return int(template.disk.size) / 1024
|
||||
manager = OpenNebulaManager(create_user=False)
|
||||
template = manager._get_template(template_id=self.opennebula_id).template
|
||||
disk_size = 0
|
||||
for disk in template.disks:
|
||||
disk_size += int(disk.size)
|
||||
return disk_size / 1024
|
||||
|
||||
def get_memory(self):
|
||||
if self.manager is None:
|
||||
self.manager = OpenNebulaManager()
|
||||
|
||||
template = self.manager._get_template(template_id=self.opennebula_id).template
|
||||
manager = OpenNebulaManager(create_user=False)
|
||||
template = manager._get_template(template_id=self.opennebula_id).template
|
||||
return int(template.memory) / 1024
|
||||
|
||||
class VirtualMachine(models.Model):
|
||||
|
|
@ -133,7 +132,7 @@ class VirtualMachine(models.Model):
|
|||
vm = self.manager._get_vm(vm_id=self.opennebula_id)
|
||||
return self.VM_STATE.get(str(vm.state))
|
||||
|
||||
def get_pirce(self)
|
||||
def get_price(self):
|
||||
return 0.0
|
||||
|
||||
class OpenNebulaManager():
|
||||
|
|
@ -147,8 +146,7 @@ class OpenNebulaManager():
|
|||
settings.OPENNEBULA_PASSWORD
|
||||
)
|
||||
|
||||
|
||||
if not create_user:
|
||||
if not create_user or email is None:
|
||||
return
|
||||
|
||||
# Get or create oppenebula user using given credentials
|
||||
|
|
@ -189,6 +187,7 @@ class OpenNebulaManager():
|
|||
host=settings.OPENNEBULA_DOMAIN,
|
||||
protocol=settings.OPENNEBULA_PROTOCOL)
|
||||
)
|
||||
raise ConnectionRefusedError
|
||||
def _get_user_pool(self):
|
||||
try:
|
||||
user_pool = oca.UserPool(self.oneadmin_client)
|
||||
|
|
@ -198,11 +197,30 @@ class OpenNebulaManager():
|
|||
host=settings.OPENNEBULA_DOMAIN,
|
||||
protocol=settings.OPENNEBULA_PROTOCOL)
|
||||
)
|
||||
raise ConnectionRefusedError
|
||||
return user_pool
|
||||
|
||||
def create_virtualmachine(self, template_id):
|
||||
template_pool = oca.VmTemplatePool(self.oneadmin_client)
|
||||
template_pool.info()
|
||||
def _get_vm_pool(self):
|
||||
try:
|
||||
vm_pool = oca.VmPool(self.oneadmin_client)
|
||||
vm_pool.info()
|
||||
except ConnectionRefusedError:
|
||||
print('Could not connect to host: {host} via protocol {protocol}'.format(
|
||||
host=settings.OPENNEBULA_DOMAIN,
|
||||
protocol=settings.OPENNEBULA_PROTOCOL)
|
||||
)
|
||||
raise ConnectionRefusedError
|
||||
return vm_pool
|
||||
|
||||
|
||||
def _get_vm(self, vm_id):
|
||||
vm_pool = self._get_vm_pool()
|
||||
# Get virtual machines from all users
|
||||
vm_pool.info(filter=-2)
|
||||
return vm_pool.get_by_id(vm_id)
|
||||
|
||||
def create_vm(self, template_id):
|
||||
template_pool = self._get_template_pool()
|
||||
|
||||
template = template_pool.get_by_id(template_id)
|
||||
|
||||
|
|
@ -215,6 +233,28 @@ class OpenNebulaManager():
|
|||
)
|
||||
return vm_id
|
||||
|
||||
def delete_vm(self, vm_id):
|
||||
vm = self._get_vm(vm_id)
|
||||
vm.delete()
|
||||
|
||||
def _get_template_pool(self):
|
||||
try:
|
||||
template_pool = oca.VmTemplatePool(self.oneadmin_client)
|
||||
template_pool.info()
|
||||
except ConnectionRefusedError:
|
||||
print('Could not connect to host: {host} via protocol {protocol}'.format(
|
||||
host=settings.OPENNEBULA_DOMAIN,
|
||||
protocol=settings.OPENNEBULA_PROTOCOL)
|
||||
)
|
||||
raise ConnectionRefusedError
|
||||
return template_pool
|
||||
|
||||
def _get_template(self, template_id):
|
||||
template_pool = self._get_template_pool()
|
||||
return template_pool.get_by_id(template_id)
|
||||
|
||||
|
||||
|
||||
def create_template(self, name, cores, memory, disk_size):
|
||||
"""Create and add a new template to opennebula.
|
||||
:param name: A string representation describing the template.
|
||||
|
|
@ -247,3 +287,9 @@ class OpenNebulaManager():
|
|||
)
|
||||
|
||||
return template_id
|
||||
|
||||
def delete_template(self, template_id):
|
||||
self.oneadmin_client.call(oca.VmTemplate.METHODS['delete'], template_id, False)
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue