diff --git a/circle/vm/models.py b/circle/vm/models.py index f01ab83..1d8e0da 100644 --- a/circle/vm/models.py +++ b/circle/vm/models.py @@ -432,15 +432,17 @@ class Instance(BaseResourceConfigModel, TimeStampedModel): def deploy_async(self, user=None): """ Launch celery task to handle the job asynchronously. """ - vm_manager.deploy.apply_async(self, user, queue="localhost.man") + vm_manager.deploy.apply_async(args=[self, user], queue="localhost.man") def deploy(self, user=None, task_uuid=None): """ Deploy new virtual machine with network 1. Schedule """ - act = InstanceActivity(activity_code='vm.Instance.deploy', - instance=self, user=user, - started=timezone.now(), task_uuid=task_uuid) + act = InstanceActivity(activity_code='vm.Instance.deploy') + act.instance = self + act.user = user + act.started = timezone.now() + act.task_uuid = task_uuid act.save() # Schedule @@ -470,21 +472,74 @@ class Instance(BaseResourceConfigModel, TimeStampedModel): act.finish(result='SUCCESS') - def stop(self): - # TODO implement - pass + def stop_async(self, user=None): + vm_manager.stop.apply_async(args=[self, user], queue="localhost.man") - def resume(self): - # TODO implement - pass + def stop(self, user=None, task_uuid=None): + act = InstanceActivity(activity_code='vm.Instance.stop') + act.instance = self + act.user = user + act.started = timezone.now() + act.task_uuid = task_uuid + act.save() + tasks.stop.apply_async(args=[self.get_vm_desc()], + queue=self.node.host.hostname + ".vm").get() + + def resume_async(self, user=None): + vm_manager.resume.apply_async(args=[self, user], queue="localhost.man") + + def resume(self, user=None, task_uuid=None): + act = InstanceActivity(activity_code='vm.Instance.resume') + act.instance = self + act.user = user + act.started = timezone.now() + act.task_uuid = task_uuid + act.save() + tasks.resume.apply_async(args=[self.get_vm_desc()], + queue=self.node.host.hostname + ".vm").get() - def poweroff(self): - # TODO implement - pass + def poweroff_async(self, user=None): + vm_manager.power_off.apply_async(args=[self, user], + queue="localhost.man") - def restart(self): - # TODO implement - pass + def poweroff(self, user=None, task_uuid=None): + act = InstanceActivity(activity_code='vm.Instance.power_off') + act.instance = self + act.user = user + act.started = timezone.now() + act.task_uuid = task_uuid + act.save() + tasks.power_off.apply_async(args=[self.get_vm_desc()], + queue=self.node.host.hostname + ".vm" + ).get() + + def restart_async(self, user=None): + vm_manager.restart.apply_async(args=[self, user], + queue="localhost.man") + + def restart(self, user=None, task_uuid=None): + act = InstanceActivity(activity_code='vm.Instance.restart') + act.instance = self + act.user = user + act.started = timezone.now() + act.task_uuid = task_uuid + act.save() + tasks.restart.apply_async(args=[self.get_vm_desc()], + queue=self.node.host.hostname + ".vm").get() + + def save_as_async(self, user=None): + vm_manager.save_as.apply_async( + args=[self, user], queue="localhost.man") + + def save_as(self, user=None, task_uuid=None): + act = InstanceActivity(activity_code='vm.Instance.restart') + act.instance = self + act.user = user + act.started = timezone.now() + act.task_uuid = task_uuid + act.save() + tasks.save_as.apply_async(args=[self.get_vm_desc()], + queue=self.node.host.hostname + ".vm").get() def renew(self, which='both'): """Renew virtual machine instance leases. @@ -497,31 +552,6 @@ class Instance(BaseResourceConfigModel, TimeStampedModel): self.time_of_delete = timezone.now() + self.lease.delete_interval self.save() - def save_as(self): - """Save image and shut down.""" - imgname = "template-%d-%d" % (self.template.id, self.id) - from .tasks import SaveAsTask - SaveAsTask.delay(one_id=self.one_id, new_img=imgname) - self._change_state("SHUTDOWN") - self.save() - t = self.template - t.state = 'SAVING' - t.save() - - def check_if_is_save_as_done(self): - if self.state != 'DONE': - return False - Disk.update(delete=False) - imgname = "template-%d-%d" % (self.template.id, self.id) - disks = Disk.objects.filter(name=imgname) - if len(disks) != 1: - return False - self.template.disk_id = disks[0].id - self.template.state = 'READY' - self.template.save() - self.firewall_host_delete() - return True - @receiver(pre_delete, sender=Instance, dispatch_uid='delete_instance_pre') def delete_instance_pre(sender, instance, using, **kwargs):