behave_tests: refactor TestAPI DB lookup
[nfvbench.git] / nfvbench / compute.py
index 556ade4..883dc28 100644 (file)
@@ -23,8 +23,10 @@ except ImportError:
     from glanceclient.v1.apiclient.exceptions import NotFound as GlanceImageNotFound
 import keystoneauth1
 import novaclient
+from novaclient.exceptions import NotFound
 
-from log import LOG
+from .log import LOG
+from . import utils
 
 
 class Compute(object):
@@ -50,7 +52,7 @@ class Compute(object):
         retry = 0
         try:
             # check image is file/url based.
-            with open(image_file) as f_image:
+            with open(image_file, 'rb') as f_image:
                 img = self.glance_client.images.create(name=str(final_image_name),
                                                        disk_format="qcow2",
                                                        container_format="bare",
@@ -95,6 +97,24 @@ class Compute(object):
 
         return True
 
+    def image_multiqueue_enabled(self, img):
+        """Check if multiqueue property is enabled on given image."""
+        try:
+            return img['hw_vif_multiqueue_enabled'] == 'true'
+        except KeyError:
+            return False
+
+    def image_set_multiqueue(self, img, enabled):
+        """Set multiqueue property as enabled or disabled on given image."""
+        cur_mqe = self.image_multiqueue_enabled(img)
+        LOG.info('Image %s hw_vif_multiqueue_enabled property is "%s"',
+                 img.name, str(cur_mqe).lower())
+        if cur_mqe != enabled:
+            mqe = str(enabled).lower()
+            self.glance_client.images.update(img.id, hw_vif_multiqueue_enabled=mqe)
+            img['hw_vif_multiqueue_enabled'] = mqe
+            LOG.info('Image %s hw_vif_multiqueue_enabled property changed to "%s"', img.name, mqe)
+
     # Create a server instance with name vmname
     # and check that it gets into the ACTIVE state
     def create_server(self, vmname, image, flavor, key_name,
@@ -129,9 +149,17 @@ class Compute(object):
         servers_list = self.novaclient.servers.list()
         return servers_list
 
+    def instance_exists(self, server):
+        try:
+            self.novaclient.servers.get(server)
+        except NotFound:
+            return False
+        return True
+
     def delete_server(self, server):
         """Delete a server from its object reference."""
-        self.novaclient.servers.delete(server)
+        utils.delete_server(self.novaclient, server)
+        utils.waiting_servers_deletion(self.novaclient, [server])
 
     def find_flavor(self, flavor_type):
         """Find a flavor by name."""