Merge "Unprovision iso ramdisk boot from test"
diff --git a/ironic_tempest_plugin/services/baremetal/base.py b/ironic_tempest_plugin/services/baremetal/base.py
index 2acad18..f23310f 100644
--- a/ironic_tempest_plugin/services/baremetal/base.py
+++ b/ironic_tempest_plugin/services/baremetal/base.py
@@ -63,9 +63,23 @@
     def get_headers(self):
         headers = super(BaremetalClient, self).get_headers()
         if BAREMETAL_MICROVERSION:
+            # NOTE(TheJulia): This is not great, because it can blind a test
+            # to the actual version supported.
             headers[self.api_microversion_header_name] = BAREMETAL_MICROVERSION
         return headers
 
+    def get_raw_headers(self):
+        """A proper get headers without guessing the microversion."""
+        return super(BaremetalClient, self).get_headers()
+
+    def get_min_max_api_microversions(self):
+        """Returns a tuple of minimum and remote microversions."""
+        _, resp_body = self._show_request(None, uri='/')
+        version = resp_body.get('default_version', {})
+        api_min = version.get('min_version')
+        api_max = version.get('version')
+        return (api_min, api_max)
+
     def request(self, *args, **kwargs):
         resp, resp_body = super(BaremetalClient, self).request(*args, **kwargs)
         latest_microversion = api_version_utils.LATEST_MICROVERSION
diff --git a/ironic_tempest_plugin/tests/api/base.py b/ironic_tempest_plugin/tests/api/base.py
index 6ebb162..59f2f94 100644
--- a/ironic_tempest_plugin/tests/api/base.py
+++ b/ironic_tempest_plugin/tests/api/base.py
@@ -76,6 +76,8 @@
 
         cfg_min_version = CONF.baremetal.min_microversion
         cfg_max_version = CONF.baremetal.max_microversion
+
+        # Check versions and skip based upon *configuration*
         api_version_utils.check_skip_with_microversion(cls.min_microversion,
                                                        cls.max_microversion,
                                                        cfg_min_version,
@@ -100,6 +102,15 @@
         else:
             cls.client = cls.os_admin.baremetal.BaremetalClient()
 
+        # Skip the test if the class version doesn't match.
+        if cls.min_microversion or cls.max_microversion:
+            api_min, api_max = cls.client.get_min_max_api_microversions()
+            api_version_utils.check_skip_with_microversion(
+                cls.min_microversion,
+                cls.max_microversion,
+                api_min,
+                api_max)
+
     @classmethod
     def resource_setup(cls):
         super(BaseBaremetalTest, cls).resource_setup()
diff --git a/ironic_tempest_plugin/tests/scenario/baremetal_manager.py b/ironic_tempest_plugin/tests/scenario/baremetal_manager.py
index 27b3c9d..9ceecb7 100644
--- a/ironic_tempest_plugin/tests/scenario/baremetal_manager.py
+++ b/ironic_tempest_plugin/tests/scenario/baremetal_manager.py
@@ -82,6 +82,7 @@
         super(BaremetalScenarioTest, cls).skip_checks()
         if not CONF.service_available.ironic:
             raise cls.skipException('Ironic is not enabled.')
+        # This is the configuration based skip test
         cfg_min_version = CONF.baremetal.min_microversion
         cfg_max_version = CONF.baremetal.max_microversion
         api_version_utils.check_skip_with_microversion(cls.min_microversion,
@@ -96,6 +97,17 @@
             client = cls.os_system_admin.baremetal.BaremetalClient()
         else:
             client = cls.os_admin.baremetal.BaremetalClient()
+
+        # This is the automatic based upon remote version skip check,
+        # as it requires an API client to obtain the remote version.
+        if cls.min_microversion or cls.max_microversion:
+            api_min, api_max = client.get_min_max_api_microversions()
+            api_version_utils.check_skip_with_microversion(
+                cls.min_microversion,
+                cls.max_microversion,
+                api_min,
+                api_max)
+
         cls.baremetal_client = client
 
     @classmethod
diff --git a/ironic_tempest_plugin/tests/scenario/baremetal_standalone_manager.py b/ironic_tempest_plugin/tests/scenario/baremetal_standalone_manager.py
index a2c91ae..48a6bd5 100644
--- a/ironic_tempest_plugin/tests/scenario/baremetal_standalone_manager.py
+++ b/ironic_tempest_plugin/tests/scenario/baremetal_standalone_manager.py
@@ -796,8 +796,12 @@
                     "args": {"raid_config": config},
                 }
             ]
-            self.baremetal_client.create_deploy_template(
+            _, template = self.baremetal_client.create_deploy_template(
                 'CUSTOM_RAID', steps=steps)
+            # Set a cleanup to ensure the deploy template is removed.
+            self.addCleanup(
+                self.baremetal_client.delete_deploy_template,
+                template['uuid'])
             self.baremetal_client.add_node_trait(self.node['uuid'],
                                                  'CUSTOM_RAID')