Scenarios: cleanup class scope variable usage

This removes the class variables for 'server', 'volume' and 'image'
so we don't rely on tight coupling between method calls.

Related-Bug: #1482299
Change-Id: I03aa4e4e4dab9ad9e41175f493fc4535b8dd0f2c
diff --git a/tempest/scenario/manager.py b/tempest/scenario/manager.py
index 9f283c5..315ce59 100644
--- a/tempest/scenario/manager.py
+++ b/tempest/scenario/manager.py
@@ -380,20 +380,22 @@
                   (img_path, img_container_format, img_disk_format,
                    img_properties, ami_img_path, ari_img_path, aki_img_path))
         try:
-            self.image = self._image_create('scenario-img',
-                                            img_container_format,
-                                            img_path,
-                                            disk_format=img_disk_format,
-                                            properties=img_properties)
+            image = self._image_create('scenario-img',
+                                       img_container_format,
+                                       img_path,
+                                       disk_format=img_disk_format,
+                                       properties=img_properties)
         except IOError:
             LOG.debug("A qcow2 image was not found. Try to get a uec image.")
             kernel = self._image_create('scenario-aki', 'aki', aki_img_path)
             ramdisk = self._image_create('scenario-ari', 'ari', ari_img_path)
             properties = {'kernel_id': kernel, 'ramdisk_id': ramdisk}
-            self.image = self._image_create('scenario-ami', 'ami',
-                                            path=ami_img_path,
-                                            properties=properties)
-        LOG.debug("image:%s" % self.image)
+            image = self._image_create('scenario-ami', 'ami',
+                                       path=ami_img_path,
+                                       properties=properties)
+        LOG.debug("image:%s" % image)
+
+        return image
 
     def _log_console_output(self, servers=None):
         if not CONF.compute_feature_enabled.console_output:
@@ -1369,16 +1371,6 @@
         else:
             cls.admin_volume_types_client = cls.os_adm.volume_types_v2_client
 
-    def _wait_for_volume_status(self, status):
-        self.status_timeout(
-            self.volume_client.volumes, self.volume.id, status)
-
-    def nova_boot(self):
-        self.keypair = self.create_keypair()
-        create_kwargs = {'key_name': self.keypair['name']}
-        self.server = self.create_server(image=self.image,
-                                         create_kwargs=create_kwargs)
-
     def create_volume_type(self, client=None, name=None):
         if not client:
             client = self.admin_volume_types_client
diff --git a/tempest/scenario/test_encrypted_cinder_volumes.py b/tempest/scenario/test_encrypted_cinder_volumes.py
index 99837eb..082a8bf 100644
--- a/tempest/scenario/test_encrypted_cinder_volumes.py
+++ b/tempest/scenario/test_encrypted_cinder_volumes.py
@@ -42,8 +42,11 @@
             raise cls.skipException('Encrypted volume attach is not supported')
 
     def launch_instance(self):
-        self.glance_image_create()
-        self.nova_boot()
+        image = self.glance_image_create()
+        keypair = self.create_keypair()
+
+        return self.create_server(image=image,
+                                  create_kwargs={'key_name': keypair['name']})
 
     def create_encrypted_volume(self, encryption_provider, volume_type):
         volume_type = self.create_volume_type(name=volume_type)
@@ -52,26 +55,26 @@
                                     key_size=512,
                                     cipher='aes-xts-plain64',
                                     control_location='front-end')
-        self.volume = self.create_volume(volume_type=volume_type['name'])
+        return self.create_volume(volume_type=volume_type['name'])
 
-    def attach_detach_volume(self):
-        self.volume = self.nova_volume_attach(self.server, self.volume)
-        self.nova_volume_detach(self.server, self.volume)
+    def attach_detach_volume(self, server, volume):
+        attached_volume = self.nova_volume_attach(server, volume)
+        self.nova_volume_detach(server, attached_volume)
 
     @test.idempotent_id('79165fb4-5534-4b9d-8429-97ccffb8f86e')
     @test.services('compute', 'volume', 'image')
     def test_encrypted_cinder_volumes_luks(self):
-        self.launch_instance()
-        self.create_encrypted_volume('nova.volume.encryptors.'
-                                     'luks.LuksEncryptor',
-                                     volume_type='luks')
-        self.attach_detach_volume()
+        server = self.launch_instance()
+        volume = self.create_encrypted_volume('nova.volume.encryptors.'
+                                              'luks.LuksEncryptor',
+                                              volume_type='luks')
+        self.attach_detach_volume(server, volume)
 
     @test.idempotent_id('cbc752ed-b716-4717-910f-956cce965722')
     @test.services('compute', 'volume', 'image')
     def test_encrypted_cinder_volumes_cryptsetup(self):
-        self.launch_instance()
-        self.create_encrypted_volume('nova.volume.encryptors.'
-                                     'cryptsetup.CryptsetupEncryptor',
-                                     volume_type='cryptsetup')
-        self.attach_detach_volume()
+        server = self.launch_instance()
+        volume = self.create_encrypted_volume('nova.volume.encryptors.'
+                                              'cryptsetup.CryptsetupEncryptor',
+                                              volume_type='cryptsetup')
+        self.attach_detach_volume(server, volume)
diff --git a/tempest/scenario/test_large_ops.py b/tempest/scenario/test_large_ops.py
index 6497f7a..f45fb3a 100644
--- a/tempest/scenario/test_large_ops.py
+++ b/tempest/scenario/test_large_ops.py
@@ -79,7 +79,7 @@
             waiters.wait_for_server_status(self.servers_client,
                                            server['id'], status)
 
-    def nova_boot(self):
+    def nova_boot(self, image):
         name = data_utils.rand_name('scenario-server')
         flavor_id = CONF.compute.flavor_ref
         # Explicitly create secgroup to avoid cleanup at the end of testcases.
@@ -99,7 +99,7 @@
                                                          create_kwargs)
         self.servers_client.create_server(
             name=name,
-            imageRef=self.image,
+            imageRef=image,
             flavorRef=flavor_id,
             **create_kwargs)
         # needed because of bug 1199788
@@ -118,8 +118,8 @@
         self._wait_for_server_status('ACTIVE')
 
     def _large_ops_scenario(self):
-        self.glance_image_create()
-        self.nova_boot()
+        image = self.glance_image_create()
+        self.nova_boot(image)
 
     @test.idempotent_id('14ba0e78-2ed9-4d17-9659-a48f4756ecb3')
     @test.services('compute', 'image')
diff --git a/tempest/scenario/test_minimum_basic.py b/tempest/scenario/test_minimum_basic.py
index c3f3c78..13816e7 100644
--- a/tempest/scenario/test_minimum_basic.py
+++ b/tempest/scenario/test_minimum_basic.py
@@ -46,11 +46,6 @@
         waiters.wait_for_server_status(self.servers_client,
                                        server_id, status)
 
-    def nova_boot(self, keypair):
-        create_kwargs = {'key_name': keypair['name']}
-        return self.create_server(image=self.image,
-                                  create_kwargs=create_kwargs)
-
     def nova_list(self):
         servers = self.servers_client.list_servers()
         # The list servers in the compute client is inconsistent...
@@ -107,11 +102,12 @@
     @test.idempotent_id('bdbb5441-9204-419d-a225-b4fdbfb1a1a8')
     @test.services('compute', 'volume', 'image', 'network')
     def test_minimum_basic_scenario(self):
-        self.glance_image_create()
-
+        image = self.glance_image_create()
         keypair = self.create_keypair()
 
-        server = self.nova_boot(keypair)
+        create_kwargs = {'key_name': keypair['name']}
+        server = self.create_server(image=image,
+                                    create_kwargs=create_kwargs)
         servers = self.nova_list()
         self.assertIn(server['id'], [x['id'] for x in servers])