Remove duplicate calls to clear_servers

Removes ServerActionsTest* call to the "clear_servers" function
in its class teardown fixture as it is redundant.
Removes ServerActionsBase* call to the "clear_servers" function
in its test teardown fixture as the clean-up is down at
class teardown anyways.
Moves some duplicated code in test_server_actions to a class
function rebuild_servers, which is used at class and test setup
to create a new server when needed.

Fixes: bug #1124259
Change-Id: I29b3a4ca6e8738104452976735f49c331ffa116f
diff --git a/tempest/tests/compute/servers/test_server_actions.py b/tempest/tests/compute/servers/test_server_actions.py
index c30538f..06e441a 100644
--- a/tempest/tests/compute/servers/test_server_actions.py
+++ b/tempest/tests/compute/servers/test_server_actions.py
@@ -206,6 +206,18 @@
             self.fail('The server rebuild for a non existing server should not'
                       ' be allowed')
 
+    @classmethod
+    def rebuild_servers(cls):
+        # Destroy any existing server and creates a new one
+        cls.clear_servers()
+        cls.name = rand_name('server')
+        resp, server = cls.create_server_with_extras(cls.name,
+                                                     cls.image_ref,
+                                                     cls.flavor_ref)
+        cls.server_id = server['id']
+        cls.password = server['adminPass']
+        cls.client.wait_for_server_status(cls.server_id, 'ACTIVE')
+
 
 class ServerActionsTestXML(base.BaseComputeTestXML,
                            ServerActionsTestBase):
@@ -216,30 +228,13 @@
             self.client.wait_for_server_status(self.server_id, 'ACTIVE')
         except exceptions:
             # Rebuild server if something happened to it during a test
-            self.clear_servers()
-            resp, server = self.create_server_with_extras(self.name,
-                                                          self.image_ref,
-                                                          self.flavor_ref)
-            self.server_id = server['id']
-            self.password = server['adminPass']
-            self.client.wait_for_server_status(self.server_id, 'ACTIVE')
+            self.rebuild_servers()
 
     @classmethod
     def setUpClass(cls):
         super(ServerActionsTestXML, cls).setUpClass()
         cls.client = cls.servers_client
-        cls.name = rand_name('server')
-        resp, server = cls.create_server_with_extras(cls.name,
-                                                     cls.image_ref,
-                                                     cls.flavor_ref)
-        cls.server_id = server['id']
-        cls.password = server['adminPass']
-        cls.client.wait_for_server_status(cls.server_id, 'ACTIVE')
-
-    @classmethod
-    def tearDownClass(cls):
-        cls.clear_servers()
-        super(ServerActionsTestXML, cls).tearDownClass()
+        cls.rebuild_servers()
 
 
 class ServerActionsTestJSON(base.BaseComputeTestJSON,
@@ -251,27 +246,10 @@
             self.client.wait_for_server_status(self.server_id, 'ACTIVE')
         except exceptions:
             # Rebuild server if something happened to it during a test
-            self.clear_servers()
-            resp, server = self.create_server_with_extras(self.name,
-                                                          self.image_ref,
-                                                          self.flavor_ref)
-            self.server_id = server['id']
-            self.password = server['adminPass']
-            self.client.wait_for_server_status(self.server_id, 'ACTIVE')
+            self.rebuild_servers()
 
     @classmethod
     def setUpClass(cls):
         super(ServerActionsTestJSON, cls).setUpClass()
         cls.client = cls.servers_client
-        cls.name = rand_name('server')
-        resp, server = cls.create_server_with_extras(cls.name,
-                                                     cls.image_ref,
-                                                     cls.flavor_ref)
-        cls.server_id = server['id']
-        cls.password = server['adminPass']
-        cls.client.wait_for_server_status(cls.server_id, 'ACTIVE')
-
-    @classmethod
-    def tearDownClass(cls):
-        cls.clear_servers()
-        super(ServerActionsTestJSON, cls).tearDownClass()
+        cls.rebuild_servers()
diff --git a/tempest/tests/compute/servers/test_servers.py b/tempest/tests/compute/servers/test_servers.py
index fbcfe85..caf0679 100644
--- a/tempest/tests/compute/servers/test_servers.py
+++ b/tempest/tests/compute/servers/test_servers.py
@@ -161,25 +161,9 @@
         super(ServersTestJSON, cls).setUpClass()
         cls.client = cls.servers_client
 
-    def tearDown(self):
-        # clean up any remaining servers and wait for them to fully
-        # delete. This is done because delete calls are async, and if
-        # deletes are running slow we could very well overrun system
-        # memory
-        self.clear_servers()
-        super(ServersTestJSON, self).tearDown()
-
 
 class ServersTestXML(base.BaseComputeTestXML, ServersTestBase):
     @classmethod
     def setUpClass(cls):
         super(ServersTestXML, cls).setUpClass()
         cls.client = cls.servers_client
-
-    def tearDown(self):
-        # clean up any remaining servers and wait for them to fully
-        # delete. This is done because delete calls are async, and if
-        # deletes are running slow we could very well overrun system
-        # memory
-        self.clear_servers()
-        super(ServersTestXML, self).tearDown()