From feea94cc63ec80192b97521ad7500fd2c23701d7 Mon Sep 17 00:00:00 2001
From: Guba Sándor <guba.sandor@cloud.bme.hu>
Date: Thu, 21 Nov 2013 16:46:16 +0100
Subject: [PATCH] vm: Adding migrate to model

---
 circle/vm/models.py | 30 ++++++++++++++++++++++++++++--
 1 file changed, 28 insertions(+), 2 deletions(-)

diff --git a/circle/vm/models.py b/circle/vm/models.py
index 50af64e..9bad9fa 100644
--- a/circle/vm/models.py
+++ b/circle/vm/models.py
@@ -820,11 +820,37 @@ class Instance(AclBase, VirtualMachineDescModel, TimeStampedModel):
                                         queue=queue_name).get()
 
     def reboot_async(self, user=None):
-        """Execute reboot asynchronously.
-        """
+        """Execute reboot asynchronously. """
         return local_tasks.reboot.apply_async(args=[self, user],
                                               queue="localhost.man")
 
+    def migrate_async(self, to_node, user=None):
+        """Execute migrate asynchronously. """
+        return local_tasks.migrate.apply_async(args=[self, to_node, user],
+                                               queue="localhost.man")
+
+    def migrate(self, to_node, user=None, task_uuid=None):
+        """Live migrate running vm to another node. """
+        with instance_activity(code_suffix='migrate', instance=self,
+                               task_uuid=task_uuid, user=user) as act:
+            # Destroy networks
+            with act.sub_activity('destroying_net'):
+                for net in self.interface_set.all():
+                    net.destroy()
+
+            with act.sub_activity('migrate_vm'):
+                queue_name = self.get_remote_queue_name('vm')
+                vm_tasks.migrate.apply_async(args=[self.vm_name,
+                                             to_node.host.hostname],
+                                             queue=queue_name).get()
+            # Refresh node information
+            self.node = to_node
+            self.save()
+            # Estabilish network connection (vmdriver)
+            with act.sub_activity('deploying_net'):
+                for net in self.interface_set.all():
+                    net.deploy()
+
     def save_as_template(self, name, **kwargs):
         # prepare parameters
         kwargs.setdefault('name', name)
--
libgit2 0.26.0