You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ya...@apache.org on 2013/07/22 07:37:37 UTC

[28/50] [abbrv] git commit: updated refs/heads/pvlan to ce299da

migrate only when hosts are available

Identify the hosts that are suitable for migration before proceeding
with migrateVM

Signed-off-by: Prasanna Santhanam <ts...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/e1ad36bc
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/e1ad36bc
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/e1ad36bc

Branch: refs/heads/pvlan
Commit: e1ad36bccb70a9f73de1d06b408043a93876195c
Parents: 92e6352
Author: Prasanna Santhanam <ts...@apache.org>
Authored: Mon May 20 17:51:18 2013 +0530
Committer: Prasanna Santhanam <ts...@apache.org>
Committed: Mon May 20 17:51:50 2013 +0530

----------------------------------------------------------------------
 test/integration/smoke/test_vm_life_cycle.py | 131 +++++++++++-----------
 1 file changed, 66 insertions(+), 65 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e1ad36bc/test/integration/smoke/test_vm_life_cycle.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_vm_life_cycle.py b/test/integration/smoke/test_vm_life_cycle.py
index 21c2635..3f7c17b 100644
--- a/test/integration/smoke/test_vm_life_cycle.py
+++ b/test/integration/smoke/test_vm_life_cycle.py
@@ -135,35 +135,34 @@ class TestDeployVM(cloudstackTestCase):
         cls.apiclient = super(TestDeployVM, cls).getClsTestClient().getApiClient()
         # Get Zone, Domain and templates
         domain = get_domain(cls.apiclient, cls.services)
-        zone = get_zone(cls.apiclient, cls.services)
-        cls.services['mode'] = zone.networktype
+        cls.zone = get_zone(cls.apiclient, cls.services)
+        cls.services['mode'] = cls.zone.networktype
 
         #If local storage is enabled, alter the offerings to use localstorage
         #this step is needed for devcloud
-        if zone.localstorageenabled == True:
+        if cls.zone.localstorageenabled == True:
             cls.services["service_offerings"]["tiny"]["storagetype"] = 'local'
             cls.services["service_offerings"]["small"]["storagetype"] = 'local'
             cls.services["service_offerings"]["medium"]["storagetype"] = 'local'
 
         template = get_template(
             cls.apiclient,
-            zone.id,
+            cls.zone.id,
             cls.services["ostype"]
         )
         # Set Zones and disk offerings
-        cls.services["small"]["zoneid"] = zone.id
+        cls.services["small"]["zoneid"] = cls.zone.id
         cls.services["small"]["template"] = template.id
 
-        cls.services["medium"]["zoneid"] = zone.id
+        cls.services["medium"]["zoneid"] = cls.zone.id
         cls.services["medium"]["template"] = template.id
-        cls.services["iso"]["zoneid"] = zone.id
+        cls.services["iso"]["zoneid"] = cls.zone.id
 
         cls.account = Account.create(
             cls.apiclient,
             cls.services["account"],
             domainid=domain.id
         )
-        cls.debug(str("============" ))
         cls.debug(cls.account.id)
 
         cls.service_offering = ServiceOffering.create(
@@ -811,68 +810,76 @@ class TestVMLifeCycle(cloudstackTestCase):
         """Test migrate VM
         """
         # Validate the following
-        # 1. Should be able to login to the VM.
-        # 2. listVM command should return this VM.State of this VM
-        #    should be "Running" and the host should be the host 
-        #    to which the VM was migrated to
+        # 1. Environment has enough hosts for migration
+        # 2. DeployVM on suitable host (with another host in the cluster)
+        # 3. Migrate the VM and assert migration successful
 
         hosts = Host.list(
-                          self.apiclient,
-                          zoneid=self.medium_virtual_machine.zoneid,
-                          type='Routing'
-                          )
-
+            self.apiclient,
+            zoneid=self.zone.id,
+            type='Routing'
+        )
         self.assertEqual(
-                         isinstance(hosts, list),
-                         True,
-                         "Check the number of hosts in the zone"
-                         )
+            isinstance(hosts, list),
+            True,
+            "Check the number of hosts in the zone"
+        )
         self.assertGreaterEqual(
-                len(hosts),
-                2,
-                "Atleast 2 hosts should be present in a zone for VM migration"
-                )
-        # Remove the host of current VM from the hosts list
-        hosts[:] = [host for host in hosts if host.id != self.medium_virtual_machine.hostid]
+            len(hosts),
+            2,
+            "Atleast 2 hosts should be present for VM migration"
+        )
 
-        host = hosts[0]
+        #identify suitable host
+        clusters = [h.clusterid for h in hosts]
+        #find hosts withe same clusterid
+        clusters = [cluster for index, cluster in enumerate(clusters) if clusters.count(cluster) > 1]
+
+        if len(clusters) <= 1:
+            self.skipTest("Migration needs a cluster with at least two hosts")
+
+        suitable_hosts = [host for host in hosts if host.clusterid == clusters[0]]
+        target_host = suitable_hosts[0]
+        migrate_host = suitable_hosts[1]
+
+        #deploy VM on target host
+        self.vm_to_migrate = VirtualMachine.create(
+            self.api_client,
+            self.services["small"],
+            accountid=self.account.name,
+            domainid=self.account.domainid,
+            serviceofferingid=self.small_offering.id,
+            mode=self.services["mode"],
+            hostid=target_host.id
+        )
         self.debug("Migrating VM-ID: %s to Host: %s" % (
-                                        self.medium_virtual_machine.id,
-                                        host.id
+                                        self.vm_to_migrate.id,
+                                        migrate_host.id
                                         ))
 
-        cmd = migrateVirtualMachine.migrateVirtualMachineCmd()
-        cmd.hostid = host.id
-        cmd.virtualmachineid = self.medium_virtual_machine.id
-        self.apiclient.migrateVirtualMachine(cmd)
+        self.vm_to_migrate.migrate(self.api_client, migrate_host.id)
 
         list_vm_response = list_virtual_machines(
                                             self.apiclient,
-                                            id=self.medium_virtual_machine.id
+                                            id=self.vm_to_migrate.id
                                             )
-        self.assertEqual(
-                            isinstance(list_vm_response, list),
-                            True,
-                            "Check list response returns a valid list"
-                        )
-
         self.assertNotEqual(
                             list_vm_response,
                             None,
-                            "Check virtual machine is listVirtualMachines"
+                            "Check virtual machine is listed"
                         )
 
         vm_response = list_vm_response[0]
 
         self.assertEqual(
                             vm_response.id,
-                            self.medium_virtual_machine.id,
+                            self.vm_to_migrate.id,
                             "Check virtual machine ID of migrated VM"
                         )
 
         self.assertEqual(
                             vm_response.hostid,
-                            host.id,
+                            migrate_host.id,
                             "Check destination hostID of migrated VM"
                         )
         return
@@ -964,29 +971,25 @@ class TestVMLifeCycle(cloudstackTestCase):
 
         try:
             ssh_client = self.virtual_machine.get_ssh_client()
-
-            cmds = [
-                        "mkdir -p %s" % self.services["mount_dir"],
-                        "mount -rt iso9660 %s %s" \
-                                    % (
-                                       self.services["diskdevice"],
-                                       self.services["mount_dir"]
-                                       ),
-                ]
-
-            for c in cmds:
-                res = ssh_client.execute(c)
-
-                self.assertEqual(res, [], "Check mount is successful or not")
-
-                c = "fdisk -l|grep %s|head -1" % self.services["diskdevice"]
-                res = ssh_client.execute(c)
-                #Disk /dev/xvdd: 4393 MB, 4393723904 bytes
-
         except Exception as e:
             self.fail("SSH failed for virtual machine: %s - %s" %
                                 (self.virtual_machine.ipaddress, e))
 
+        cmds = [
+                    "mkdir -p %s" % self.services["mount_dir"],
+                    "mount -rt iso9660 %s %s" \
+                                % (
+                                   self.services["diskdevice"],
+                                   self.services["mount_dir"]
+                                   ),
+            ]
+        for c in cmds:
+            res = ssh_client.execute(c)
+            self.assertEqual(res, [], "Check mount is successful or not")
+            c = "fdisk -l|grep %s|head -1" % self.services["diskdevice"]
+            res = ssh_client.execute(c)
+            #Disk /dev/xvdd: 4393 MB, 4393723904 bytes
+
         # Res may contain more than one strings depending on environment
         # Split strings to form new list which is used for assertion on ISO size 
         result = []
@@ -1015,7 +1018,6 @@ class TestVMLifeCycle(cloudstackTestCase):
             #Unmount ISO
             command = "umount %s" % self.services["mount_dir"]
             ssh_client.execute(command)
-
         except Exception as e:
             self.fail("SSH failed for virtual machine: %s - %s" %
                                 (self.virtual_machine.ipaddress, e))
@@ -1027,7 +1029,6 @@ class TestVMLifeCycle(cloudstackTestCase):
 
         try:
             res = ssh_client.execute(c)
-
         except Exception as e:
             self.fail("SSH failed for virtual machine: %s - %s" %
                                 (self.virtual_machine.ipaddress, e))