Merge "Changing create_server to be "non class method""
diff --git a/neutron/tests/tempest/scenario/base.py b/neutron/tests/tempest/scenario/base.py
index 967a45e..1e20c74 100644
--- a/neutron/tests/tempest/scenario/base.py
+++ b/neutron/tests/tempest/scenario/base.py
@@ -36,24 +36,17 @@
     def resource_setup(cls):
         super(BaseTempestTestCase, cls).resource_setup()
 
-        cls.servers = []
         cls.keypairs = []
 
     @classmethod
     def resource_cleanup(cls):
-        for server in cls.servers:
-            cls.manager.servers_client.delete_server(server)
-            waiters.wait_for_server_termination(cls.manager.servers_client,
-                                                server)
-
         for keypair in cls.keypairs:
             cls.manager.keypairs_client.delete_keypair(
                 keypair_name=keypair['name'])
 
         super(BaseTempestTestCase, cls).resource_cleanup()
 
-    @classmethod
-    def create_server(cls, flavor_ref, image_ref, key_name, networks,
+    def create_server(self, flavor_ref, image_ref, key_name, networks,
                       name=None, security_groups=None):
         """Create a server using tempest lib
         All the parameters are the ones used in Compute API
@@ -78,14 +71,20 @@
         if not security_groups:
             security_groups = [{'name': 'default'}]
 
-        server = cls.manager.servers_client.create_server(
+        server = self.manager.servers_client.create_server(
             name=name,
             flavorRef=flavor_ref,
             imageRef=image_ref,
             key_name=key_name,
             networks=networks,
             security_groups=security_groups)
-        cls.servers.append(server['server']['id'])
+
+        self.addCleanup(test_utils.call_and_ignore_notfound_exc,
+            waiters.wait_for_server_termination,
+            self.manager.servers_client, server['server']['id'])
+        self.addCleanup(test_utils.call_and_ignore_notfound_exc,
+                        self.manager.servers_client.delete_server,
+                        server['server']['id'])
         return server
 
     @classmethod
@@ -155,50 +154,48 @@
         cls.routers.append(router)
         return router
 
-    @classmethod
-    def create_and_associate_floatingip(cls, port_id):
-        fip = cls.manager.network_client.create_floatingip(
+    def create_and_associate_floatingip(self, port_id):
+        fip = self.manager.network_client.create_floatingip(
             CONF.network.public_network_id,
             port_id=port_id)['floatingip']
-        cls.floating_ips.append(fip)
+        self.floating_ips.append(fip)
         return fip
 
-    @classmethod
-    def setup_network_and_server(cls, router=None, **kwargs):
+    def setup_network_and_server(self, router=None, **kwargs):
         """Create network resources and a server.
 
         Creating a network, subnet, router, keypair, security group
         and a server.
         """
-        cls.network = cls.create_network()
-        LOG.debug("Created network %s", cls.network['name'])
-        cls.subnet = cls.create_subnet(cls.network)
-        LOG.debug("Created subnet %s", cls.subnet['id'])
+        self.network = self.create_network()
+        LOG.debug("Created network %s", self.network['name'])
+        self.subnet = self.create_subnet(self.network)
+        LOG.debug("Created subnet %s", self.subnet['id'])
 
-        secgroup = cls.manager.network_client.create_security_group(
+        secgroup = self.manager.network_client.create_security_group(
             name=data_utils.rand_name('secgroup-'))
         LOG.debug("Created security group %s",
                   secgroup['security_group']['name'])
-        cls.security_groups.append(secgroup['security_group'])
+        self.security_groups.append(secgroup['security_group'])
         if not router:
-            router = cls.create_router_by_client(**kwargs)
-        cls.create_router_interface(router['id'], cls.subnet['id'])
-        cls.keypair = cls.create_keypair()
-        cls.create_loginable_secgroup_rule(
+            router = self.create_router_by_client(**kwargs)
+        self.create_router_interface(router['id'], self.subnet['id'])
+        self.keypair = self.create_keypair()
+        self.create_loginable_secgroup_rule(
             secgroup_id=secgroup['security_group']['id'])
-        cls.server = cls.create_server(
+        self.server = self.create_server(
             flavor_ref=CONF.compute.flavor_ref,
             image_ref=CONF.compute.image_ref,
-            key_name=cls.keypair['name'],
-            networks=[{'uuid': cls.network['id']}],
+            key_name=self.keypair['name'],
+            networks=[{'uuid': self.network['id']}],
             security_groups=[{'name': secgroup['security_group']['name']}])
-        waiters.wait_for_server_status(cls.manager.servers_client,
-                                       cls.server['server']['id'],
+        waiters.wait_for_server_status(self.manager.servers_client,
+                                       self.server['server']['id'],
                                        constants.SERVER_STATUS_ACTIVE)
-        port = cls.client.list_ports(network_id=cls.network['id'],
-                                     device_id=cls.server[
+        port = self.client.list_ports(network_id=self.network['id'],
+                                     device_id=self.server[
                                           'server']['id'])['ports'][0]
-        cls.fip = cls.create_and_associate_floatingip(port['id'])
+        self.fip = self.create_and_associate_floatingip(port['id'])
 
     def check_connectivity(self, host, ssh_user, ssh_key, servers=None):
         ssh_client = ssh.Client(host, ssh_user, pkey=ssh_key)
diff --git a/neutron/tests/tempest/scenario/test_floatingip.py b/neutron/tests/tempest/scenario/test_floatingip.py
index d4ad72a..1ccb6ac 100644
--- a/neutron/tests/tempest/scenario/test_floatingip.py
+++ b/neutron/tests/tempest/scenario/test_floatingip.py
@@ -51,15 +51,10 @@
         cls.create_loginable_secgroup_rule(secgroup_id=cls.secgroup['id'])
         cls.create_pingable_secgroup_rule(secgroup_id=cls.secgroup['id'])
 
-        cls._src_server = cls._create_server()
         if cls.same_network:
             cls._dest_network = cls.network
         else:
             cls._dest_network = cls._create_dest_network()
-        cls._dest_server_with_fip = cls._create_server(
-            network=cls._dest_network)
-        cls._dest_server_without_fip = cls._create_server(
-            create_floating_ip=False, network=cls._dest_network)
 
     @classmethod
     def _create_dest_network(cls):
@@ -69,28 +64,27 @@
         cls.create_router_interface(cls.router['id'], subnet['id'])
         return network
 
-    @classmethod
-    def _create_server(cls, create_floating_ip=True, network=None):
+    def _create_server(self, create_floating_ip=True, network=None):
         if network is None:
-            network = cls.network
-        port = cls.create_port(network, security_groups=[cls.secgroup['id']])
+            network = self.network
+        port = self.create_port(network, security_groups=[self.secgroup['id']])
         if create_floating_ip:
-            fip = cls.create_and_associate_floatingip(port['id'])
+            fip = self.create_and_associate_floatingip(port['id'])
         else:
             fip = None
-        server = cls.create_server(
+        server = self.create_server(
             flavor_ref=CONF.compute.flavor_ref,
             image_ref=CONF.compute.image_ref,
-            key_name=cls.keypair['name'],
+            key_name=self.keypair['name'],
             networks=[{'port': port['id']}])['server']
-        waiters.wait_for_server_status(cls.manager.servers_client,
+        waiters.wait_for_server_status(self.manager.servers_client,
                                        server['id'],
                                        constants.SERVER_STATUS_ACTIVE)
         return {'port': port, 'fip': fip, 'server': server}
 
     def _test_east_west(self):
         # Source VM
-        server1 = self._src_server
+        server1 = self._create_server()
         server1_ip = server1['fip']['floating_ip_address']
         ssh_client = ssh.Client(server1_ip,
                                 CONF.validation.image_ssh_user,
@@ -98,9 +92,10 @@
 
         # Destination VM
         if self.dest_has_fip:
-            dest_server = self._dest_server_with_fip
+            dest_server = self._create_server(network=self._dest_network)
         else:
-            dest_server = self._dest_server_without_fip
+            dest_server = self._create_server(create_floating_ip=False,
+                                              network=self._dest_network)
 
         # Check connectivity
         self.check_remote_connectivity(ssh_client,