Refactor server retrieval API calls. 97/38697/1
authorspisarski <s.pisarski@cablelabs.com>
Thu, 3 Aug 2017 17:44:16 +0000 (11:44 -0600)
committerspisarski <s.pisarski@cablelabs.com>
Thu, 3 Aug 2017 17:44:16 +0000 (11:44 -0600)
Refactored nova_utils#get_servers_by_name() to get_server() and
include a VmInstSettings object in addition to the server_name
parameter as well as only returning one VmInst object.

JIRA: SNAPS-168

Change-Id: I30c22a36b07ce143ee8c1c76a77fd75f0062e4aa
Signed-off-by: spisarski <s.pisarski@cablelabs.com>
snaps/openstack/create_instance.py
snaps/openstack/tests/create_instance_tests.py
snaps/openstack/utils/nova_utils.py

index 252f2fe..45420ee 100644 (file)
@@ -91,9 +91,9 @@ class OpenStackVmInstance:
         VM with the same name already exists
         within the project
         """
-        servers = nova_utils.get_servers_by_name(self.__nova,
-                                                 self.instance_settings.name)
-        for server in servers:
+        server = nova_utils.get_server(
+            self.__nova, vm_inst_settings=self.instance_settings)
+        if server:
             if server.name == self.instance_settings.name:
                 self.__vm = server
                 logger.info(
index 54b6e53..560a2fc 100644 (file)
@@ -475,15 +475,15 @@ class CreateInstanceSimpleTests(OSIntegrationTestCase):
             self.image_creator.image_settings)
 
         vm_inst = self.inst_creator.create()
-        self.assertEqual(1, len(
-            nova_utils.get_servers_by_name(self.nova, instance_settings.name)))
+        self.assertIsNotNone(nova_utils.get_server(
+            self.nova, vm_inst_settings=instance_settings))
 
         # Delete instance
         nova_utils.delete_vm_instance(self.nova, vm_inst)
 
         self.assertTrue(self.inst_creator.vm_deleted(block=True))
-        self.assertEqual(0, len(
-            nova_utils.get_servers_by_name(self.nova, instance_settings.name)))
+        self.assertIsNone(nova_utils.get_server(
+            self.nova, vm_inst_settings=instance_settings))
 
         # Exception should not be thrown
         self.inst_creator.clean()
index a0c028a..2e73201 100644 (file)
@@ -106,19 +106,26 @@ def create_server(nova, neutron, glance, instance_settings, image_settings,
             image_settings.name)
 
 
-def get_servers_by_name(nova, name):
+def get_server(nova, vm_inst_settings=None, server_name=None):
     """
-    Returns a list of servers with a given name
+    Returns a VmInst object for the first server instance found.
     :param nova: the Nova client
-    :param name: the server name
-    :return: the list of snaps.domain.VmInst objects
-    """
-    out = list()
-    servers = nova.servers.list(search_opts={'name': name})
+    :param vm_inst_settings: the VmInstanceSettings object from which to build
+                             the query if not None
+    :param server_name: the server with this name to return if vm_inst_settings
+                        is not None
+    :return: a snaps.domain.VmInst object or None if not found
+    """
+    search_opts = dict()
+    if vm_inst_settings:
+        search_opts['name'] = vm_inst_settings.name
+    elif server_name:
+        search_opts['name'] = server_name
+
+    servers = nova.servers.list(search_opts=search_opts)
     for server in servers:
-        out.append(VmInst(name=server.name, inst_id=server.id,
-                          networks=server.networks))
-    return out
+        return VmInst(name=server.name, inst_id=server.id,
+                      networks=server.networks)
 
 
 def __get_latest_server_os_object(nova, server):