diff --git a/.zuul.yaml b/.zuul.yaml
index 1e44daf..4c95c89 100644
--- a/.zuul.yaml
+++ b/.zuul.yaml
@@ -16,17 +16,17 @@
             voting: false
         - manila-tempest-dsvm-scenario:
             voting: false
-        - manila-tempest-minimal-dsvm-cephfs-native-centos-7:
+        - manila-tempest-minimal-dsvm-cephfs-native:
             voting: false
-        - manila-tempest-minimal-dsvm-cephfs-nfs-centos-7:
+        - manila-tempest-minimal-dsvm-cephfs-nfs:
             voting: false
         - manila-tempest-minimal-dsvm-dummy
-        - manila-tempest-minimal-dsvm-lvm-centos-7
+        - manila-tempest-minimal-dsvm-lvm
     gate:
       queue: manila
       jobs:
         - manila-tempest-minimal-dsvm-dummy
-        - manila-tempest-minimal-dsvm-lvm-centos-7
+        - manila-tempest-minimal-dsvm-lvm
     experimental:
       jobs:
         - manila-tempest-dsvm-glusterfs-nfs:
diff --git a/manila_tempest_tests/services/share/v2/json/shares_client.py b/manila_tempest_tests/services/share/v2/json/shares_client.py
index 522d467..a5a816a 100644
--- a/manila_tempest_tests/services/share/v2/json/shares_client.py
+++ b/manila_tempest_tests/services/share/v2/json/shares_client.py
@@ -1663,7 +1663,7 @@
         resp, body = self.get("snapshots/%s/access-list" % snapshot_id,
                               version=LATEST_MICROVERSION)
         body = self._parse_resp(body)
-        found_rules = filter(lambda x: x['id'] == rule_id, body)
+        found_rules = [r for r in body if r['id'] == rule_id]
 
         return found_rules[0] if len(found_rules) > 0 else None
 
diff --git a/manila_tempest_tests/tests/api/admin/test_admin_actions.py b/manila_tempest_tests/tests/api/admin/test_admin_actions.py
index 99f64fa..c6e21d7 100644
--- a/manila_tempest_tests/tests/api/admin/test_admin_actions.py
+++ b/manila_tempest_tests/tests/api/admin/test_admin_actions.py
@@ -13,22 +13,22 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-from tempest import config
+import ddt
 import testtools
-from testtools import testcase as tc
 
 from manila_tempest_tests.tests.api import base
-
+from tempest import config
+from testtools import testcase as tc
 
 CONF = config.CONF
 
 
+@ddt.ddt
 class AdminActionsTest(base.BaseSharesAdminTest):
 
     @classmethod
     def resource_setup(cls):
         super(AdminActionsTest, cls).resource_setup()
-        cls.states = ["error", "available"]
         cls.task_states = ["migration_starting", "data_copying_in_progress",
                            "migration_success", None]
         cls.bad_status = "error_deleting"
@@ -37,35 +37,49 @@
         cls.share_type_id = cls.share_type['id']
         # create share
         cls.sh = cls.create_share(share_type_id=cls.share_type_id)
-        cls.sh_instance = (
-            cls.shares_v2_client.get_instances_of_share(cls.sh["id"])[0]
-        )
-        if CONF.share.run_snapshot_tests:
-            cls.sn = cls.create_snapshot_wait_for_active(cls.sh["id"])
+
+    def _wait_for_resource_status(self, resource_id, resource_type):
+        wait_for_resource_status = getattr(
+            self.shares_v2_client, "wait_for_{}_status".format(resource_type))
+        wait_for_resource_status(resource_id, "available")
+
+    def _reset_resource_available(self, resource_id, resource_type="shares"):
+        self.shares_v2_client.reset_state(
+            resource_id, s_type=resource_type, status="available")
+        self._wait_for_resource_status(resource_id, resource_type[:-1])
 
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
-    def test_reset_share_state(self):
-        for status in self.states:
-            self.shares_v2_client.reset_state(self.sh["id"], status=status)
-            self.shares_v2_client.wait_for_share_status(self.sh["id"], status)
+    @ddt.data("error", "available", "error_deleting", "deleting", "creating")
+    def test_reset_share_state(self, status):
+        self.shares_v2_client.reset_state(self.sh["id"], status=status)
+        self.shares_v2_client.wait_for_share_status(self.sh["id"], status)
+        self.addCleanup(self._reset_resource_available, self.sh["id"])
 
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
-    def test_reset_share_instance_state(self):
-        id = self.sh_instance["id"]
-        for status in self.states:
-            self.shares_v2_client.reset_state(
-                id, s_type="share_instances", status=status)
-            self.shares_v2_client.wait_for_share_instance_status(id, status)
+    @ddt.data("error", "available", "error_deleting", "deleting", "creating")
+    def test_reset_share_instance_state(self, status):
+        sh_instance = self.shares_v2_client.get_instances_of_share(
+            self.sh["id"])[0]
+        share_instance_id = sh_instance["id"]
+        self.shares_v2_client.reset_state(
+            share_instance_id, s_type="share_instances", status=status)
+        self.shares_v2_client.wait_for_share_instance_status(
+            share_instance_id, status)
+        self.addCleanup(self._reset_resource_available,
+                        share_instance_id, "share_instances")
 
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
     @testtools.skipUnless(CONF.share.run_snapshot_tests,
                           "Snapshot tests are disabled.")
-    def test_reset_snapshot_state_to_error(self):
-        for status in self.states:
-            self.shares_v2_client.reset_state(
-                self.sn["id"], s_type="snapshots", status=status)
-            self.shares_v2_client.wait_for_snapshot_status(
-                self.sn["id"], status)
+    @ddt.data("error", "available", "error_deleting", "deleting", "creating")
+    def test_reset_snapshot_state(self, status):
+        snapshot = self.create_snapshot_wait_for_active(self.sh["id"])
+        self.shares_v2_client.reset_state(
+            snapshot["id"], s_type="snapshots", status=status)
+        self.shares_v2_client.wait_for_snapshot_status(
+            snapshot["id"], status)
+        self.addCleanup(self._reset_resource_available,
+                        snapshot["id"], "snapshots")
 
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
     def test_force_delete_share(self):
diff --git a/manila_tempest_tests/tests/scenario/manager_share.py b/manila_tempest_tests/tests/scenario/manager_share.py
index a80400e..17f4f0e 100644
--- a/manila_tempest_tests/tests/scenario/manager_share.py
+++ b/manila_tempest_tests/tests/scenario/manager_share.py
@@ -15,6 +15,7 @@
 
 from oslo_log import log
 import six
+from six.moves.urllib.request import urlopen
 
 from manila_tempest_tests.common import constants
 from manila_tempest_tests.common import remote_client
@@ -28,7 +29,6 @@
 from tempest.lib import exceptions
 
 from tempfile import mkstemp
-from urllib2 import urlopen
 
 CONF = config.CONF
 LOG = log.getLogger(__name__)
