diff --git a/doc/source/config/with-nova.rst b/doc/source/config/with-nova.rst
new file mode 100644
index 0000000..3537588
--- /dev/null
+++ b/doc/source/config/with-nova.rst
@@ -0,0 +1,76 @@
+Full cloud with the Compute service and flat networking
+=======================================================
+
+This section documents running tempest on a full OpenStack cloud with the
+Compute, Image and Networking services enabled. The Bare Metal Introspection
+service (ironic-inspector) is not enabled. Flat networking is used.
+
+Prerequisite
+------------
+
+* `Create a bare metal flavor`_ in the Compute service in advance
+  and record its ID (``<flavor uuid>`` below).
+
+* `Create an image`_ to use for instances and record its ID (``<image uuid>``).
+  It can be either a whole disk or a partition image.
+
+* Create and record the name or UUID of a flat network to use for bare metal
+  instances (``<network name>``).
+
+* Get the minimum and maximum API versions that you want to test against.
+  Check the `API version history`_ to find the appropriate versions for
+  your deployment.
+
+  .. note:: The minimum version can usually be set to ``1.1``.
+
+* Enroll_ at least one node and make it ``available``.
+
+.. _Create a bare metal flavor: https://docs.openstack.org/ironic/latest/install/configure-nova-flavors.html
+.. _Create an image: https://docs.openstack.org/ironic/latest/install/configure-glance-images.html
+.. _API version history: https://docs.openstack.org/ironic/latest/contributor/webapi-version-history.html
+.. _Enroll: https://docs.openstack.org/ironic/latest/install/enrollment.html
+
+Configuration
+-------------
+
+.. code-block:: ini
+
+    [service_available]
+    # Enable ironic tests.
+    ironic = True
+
+    # Disable ironic-inspector tests.
+    ironic-inspector = False
+
+    [baremetal]
+    # Minimum and maximum API versions to test against.
+    min_microversion = <min API version as X.Y>
+    max_microversion = <max API version as X.Y>
+
+    [compute]
+    # Configure the bare metal flavor so that the Compute services provisions
+    # bare metal instances during the tests.
+    flavor_ref = <flavor uuid>
+    flavor_ref_alt = <flavor uuid>
+
+    # Configure the image to use.
+    image_ref = <image uuid>
+    image_ref_alt = <image uuid>
+
+    # Configure the network to use.
+    fixed_network_name = <network name>
+
+    [compute-feature-enabled]
+    # Ironic does not support this feature.
+    disk_config = False
+
+    # Not supported with flat networking.
+    interface_attach = False
+
+    [auth]
+    # Not supported with flat networking.
+    create_isolated_networks = False
+
+    [network]
+    # Required for flat networking.
+    shared_physical_network = True
diff --git a/doc/source/usage.rst b/doc/source/usage.rst
index 8ab88eb..3e3c56e 100644
--- a/doc/source/usage.rst
+++ b/doc/source/usage.rst
@@ -19,7 +19,14 @@
     [service_enabled]
     ironic_inspector = True
 
-.. TODO(dtantsur): I'm pretty sure more configuration is required, fill it in
+See the following example configurations for more details:
+
+.. toctree::
+   :maxdepth: 1
+
+   config/with-nova
+
+.. TODO(dtantsur): cover standalone tests
 
 .. _Tempest configuration: https://docs.openstack.org/tempest/latest/configuration.html
 
diff --git a/ironic_tempest_plugin/common/utils.py b/ironic_tempest_plugin/common/utils.py
index 67c4922..91f2001 100644
--- a/ironic_tempest_plugin/common/utils.py
+++ b/ironic_tempest_plugin/common/utils.py
@@ -11,7 +11,7 @@
 #    under the License.
 
 
-def get_node(client, node_id=None, instance_uuid=None):
+def get_node(client, node_id=None, instance_uuid=None, api_version=None):
     """Get a node by its identifier or instance UUID.
 
     If both node_id and instance_uuid specified, node_id will be used.
@@ -19,15 +19,17 @@
     :param client: an instance of tempest plugin BaremetalClient.
     :param node_id: identifier (UUID or name) of the node.
     :param instance_uuid: UUID of the instance.
+    :param api_version: Ironic API version to use.
     :returns: the requested node.
     :raises: AssertionError, if neither node_id nor instance_uuid was provided
     """
     assert node_id or instance_uuid, ('Either node or instance identifier '
                                       'has to be provided.')
     if node_id:
-        _, body = client.show_node(node_id)
+        _, body = client.show_node(node_id, api_version=api_version)
         return body
     elif instance_uuid:
-        _, body = client.show_node_by_instance_uuid(instance_uuid)
+        _, body = client.show_node_by_instance_uuid(instance_uuid,
+                                                    api_version=api_version)
         if body['nodes']:
             return body['nodes'][0]
diff --git a/ironic_tempest_plugin/config.py b/ironic_tempest_plugin/config.py
index e5ba81e..dc99e03 100644
--- a/ironic_tempest_plugin/config.py
+++ b/ironic_tempest_plugin/config.py
@@ -80,6 +80,12 @@
                help="Timeout for unprovisioning an Ironic node. "
                     "Takes longer since Kilo as Ironic performs an extra "
                     "step in Node cleaning."),
+    cfg.IntOpt('rescue_timeout',
+               default=300,
+               help="Timeout for rescuing an Ironic node."),
+    cfg.IntOpt('unrescue_timeout',
+               default=300,
+               help="Timeout for unrescuing an Ironic node."),
     cfg.StrOpt('min_microversion',
                help="Lower version of the test target microversion range. "
                     "The format is 'X.Y', where 'X' and 'Y' are int values. "
@@ -116,10 +122,16 @@
     cfg.ListOpt('enabled_deploy_interfaces',
                 default=['iscsi', 'direct'],
                 help="List of Ironic enabled deploy interfaces."),
+    cfg.ListOpt('enabled_rescue_interfaces',
+                default=['no-rescue'],
+                help="List of Ironic enabled rescue interfaces."),
     cfg.IntOpt('adjusted_root_disk_size_gb',
                min=0,
                help="Ironic adjusted disk size to use in the standalone tests "
                     "as instance_info/root_gb value."),
+    cfg.IntOpt('available_nodes', min=0, default=None,
+               help="The number of baremetal hosts available to use for "
+                    "the tests.")
 ]
 
 BaremetalFeaturesGroup = [
diff --git a/ironic_tempest_plugin/services/baremetal/base.py b/ironic_tempest_plugin/services/baremetal/base.py
index 494c780..c588a70 100644
--- a/ironic_tempest_plugin/services/baremetal/base.py
+++ b/ironic_tempest_plugin/services/baremetal/base.py
@@ -154,10 +154,14 @@
                       resource,
                       uuid=None,
                       permanent=False,
+                      headers=None,
+                      extra_headers=False,
                       **kwargs):
         """Gets a specific object of the specified type.
 
         :param uuid: Unique identifier of the object in UUID format.
+        :param headers: List of headers to use in request.
+        :param extra_headers: Specify whether to use headers.
         :returns: Serialized object as a dictionary.
 
         """
@@ -165,7 +169,8 @@
             uri = kwargs['uri']
         else:
             uri = self._get_uri(resource, uuid=uuid, permanent=permanent)
-        resp, body = self.get(uri)
+        resp, body = self.get(uri, headers=headers,
+                              extra_headers=extra_headers)
         self.expected_success(http_client.OK, resp.status)
 
         return resp, self.deserialize(body)
diff --git a/ironic_tempest_plugin/services/baremetal/v1/json/baremetal_client.py b/ironic_tempest_plugin/services/baremetal/v1/json/baremetal_client.py
index 550128a..11fdebf 100644
--- a/ironic_tempest_plugin/services/baremetal/v1/json/baremetal_client.py
+++ b/ironic_tempest_plugin/services/baremetal/v1/json/baremetal_client.py
@@ -20,6 +20,24 @@
     version = '1'
     uri_prefix = 'v1'
 
+    @staticmethod
+    def _get_headers(api_version):
+        """Return headers for a request.
+
+        Currently supports a header specifying the API version to use.
+
+        :param api_version: Ironic API version to use.
+        :return: a 2-tuple of (extra_headers, headers), where 'extra_headers'
+            is whether to use headers, and 'headers' is a list of headers to
+            use in the request.
+        """
+        extra_headers = False
+        headers = None
+        if api_version is not None:
+            extra_headers = True
+            headers = {'x-openstack-ironic-api-version': api_version}
+        return extra_headers, headers
+
     @base.handle_errors
     def list_nodes(self, **kwargs):
         """List all existing nodes."""
@@ -81,28 +99,33 @@
         return self._list_request('drivers')
 
     @base.handle_errors
-    def show_node(self, uuid):
+    def show_node(self, uuid, api_version=None):
         """Gets a specific node.
 
         :param uuid: Unique identifier of the node in UUID format.
+        :param api_version: Ironic API version to use.
         :return: Serialized node as a dictionary.
 
         """
-        return self._show_request('nodes', uuid)
+        extra_headers, headers = self._get_headers(api_version)
+        return self._show_request('nodes', uuid, headers=headers,
+                                  extra_headers=extra_headers)
 
     @base.handle_errors
-    def show_node_by_instance_uuid(self, instance_uuid):
+    def show_node_by_instance_uuid(self, instance_uuid, api_version=None):
         """Gets a node associated with given instance uuid.
 
         :param instance_uuid: Unique identifier of the instance in UUID format.
+        :param api_version: Ironic API version to use.
         :return: Serialized node as a dictionary.
 
         """
         uri = '/nodes/detail?instance_uuid=%s' % instance_uuid
-
+        extra_headers, headers = self._get_headers(api_version)
         return self._show_request('nodes',
                                   uuid=None,
-                                  uri=uri)
+                                  uri=uri, headers=headers,
+                                  extra_headers=extra_headers)
 
     @base.handle_errors
     def show_chassis(self, uuid):
@@ -388,6 +411,7 @@
                            'properties/memory_mb',
                            'driver',
                            'deploy_interface',
+                           'rescue_interface',
                            'instance_uuid',
                            'resource_class')
         if not patch:
@@ -460,7 +484,7 @@
 
     @base.handle_errors
     def set_node_provision_state(self, node_uuid, state, configdrive=None,
-                                 clean_steps=None):
+                                 clean_steps=None, rescue_password=None):
         """Set provision state of the specified node.
 
         :param node_uuid: The unique identifier of the node.
@@ -469,6 +493,7 @@
         :param configdrive: A gzipped, base64-encoded
             configuration drive string.
         :param clean_steps: A list with clean steps to execute.
+        :param rescue_password: user password used to rescue.
         """
         data = {'target': state}
         # NOTE (vsaienk0): Add both here if specified, do not check anything.
@@ -477,6 +502,8 @@
             data['configdrive'] = configdrive
         if clean_steps is not None:
             data['clean_steps'] = clean_steps
+        if rescue_password is not None:
+            data['rescue_password'] = rescue_password
         return self._put_request('nodes/%s/states/provision' % node_uuid,
                                  data)
 
diff --git a/ironic_tempest_plugin/tests/scenario/baremetal_manager.py b/ironic_tempest_plugin/tests/scenario/baremetal_manager.py
index b4a8169..c220619 100644
--- a/ironic_tempest_plugin/tests/scenario/baremetal_manager.py
+++ b/ironic_tempest_plugin/tests/scenario/baremetal_manager.py
@@ -69,6 +69,7 @@
     DELETED = 'deleted'
     ERROR = 'error'
     MANAGEABLE = 'manageable'
+    RESCUE = 'rescue'
 
 
 class BaremetalScenarioTest(manager.ScenarioTest):
@@ -119,8 +120,9 @@
                                                       instance_id)
 
     @classmethod
-    def get_node(cls, node_id=None, instance_id=None):
-        return utils.get_node(cls.baremetal_client, node_id, instance_id)
+    def get_node(cls, node_id=None, instance_id=None, api_version=None):
+        return utils.get_node(cls.baremetal_client, node_id, instance_id,
+                              api_version)
 
     def get_ports(self, node_uuid):
         ports = []
@@ -153,9 +155,10 @@
     @classmethod
     @retry_on_conflict
     def set_node_provision_state(cls, node_id, state, configdrive=None,
-                                 clean_steps=None):
+                                 clean_steps=None, rescue_password=None):
         cls.baremetal_client.set_node_provision_state(
-            node_id, state, configdrive=configdrive, clean_steps=clean_steps)
+            node_id, state, configdrive=configdrive,
+            clean_steps=clean_steps, rescue_password=rescue_password)
 
     def verify_connectivity(self, ip=None):
         if ip:
diff --git a/ironic_tempest_plugin/tests/scenario/baremetal_standalone_manager.py b/ironic_tempest_plugin/tests/scenario/baremetal_standalone_manager.py
index 0137db8..9eb5d7f 100644
--- a/ironic_tempest_plugin/tests/scenario/baremetal_standalone_manager.py
+++ b/ironic_tempest_plugin/tests/scenario/baremetal_standalone_manager.py
@@ -146,6 +146,18 @@
         return floating_ip['floating_ip_address']
 
     @classmethod
+    def get_server_ip(cls, node_id):
+        """Get the server fixed IP.
+
+        :param node_id: Name or UUID of the node.
+        :returns: IP address of associated fixed IP.
+        """
+        vif = cls.get_node_vifs(node_id)[0]
+        body = cls.ports_client.show_port(vif)['port']
+        fixed_ip = body['fixed_ips'][0]
+        return fixed_ip['ip_address']
+
+    @classmethod
     def cleanup_floating_ip(cls, ip_address):
         """Removes floating IP."""
         body = cls.os_admin.floating_ips_client.list_floatingips()
@@ -272,6 +284,27 @@
             timeout=CONF.baremetal.unprovision_timeout,
             interval=1)
 
+    @classmethod
+    def rescue_node(cls, node_id, rescue_password):
+        """Rescue the node."""
+        cls.set_node_provision_state(node_id, 'rescue',
+                                     rescue_password=rescue_password)
+        cls.wait_provisioning_state(
+            node_id,
+            bm.BaremetalProvisionStates.RESCUE,
+            timeout=CONF.baremetal.rescue_timeout,
+            interval=1)
+
+    @classmethod
+    def unrescue_node(cls, node_id):
+        """Unrescue the node."""
+        cls.set_node_provision_state(node_id, 'unrescue')
+        cls.wait_provisioning_state(
+            node_id,
+            bm.BaremetalProvisionStates.ACTIVE,
+            timeout=CONF.baremetal.unrescue_timeout,
+            interval=1)
+
 
 class BaremetalStandaloneScenarioTest(BaremetalStandaloneManager):
 
@@ -281,9 +314,18 @@
     # The node driver to use in the test
     driver = None
 
-    # The deploy interface to use by the HW type
+    # The deploy interface to use by the HW type. The deploy interface of
+    # the node used in the test will be set to this value. If set to None,
+    # the node will retain its existing deploy_interface value (which may have
+    # been set via a different test).
     deploy_interface = None
 
+    # The rescue interface to use by the HW type. The rescue interface of
+    # the node used in the test will be set to this value. If set to None,
+    # the node will retain its existing rescue_interface value (which may have
+    # been set via a different test).
+    rescue_interface = None
+
     # User image ref to boot node with.
     image_ref = None
 
@@ -318,6 +360,13 @@
                 "in the list of enabled deploy interfaces %(enabled)s" % {
                     'iface': cls.deploy_interface,
                     'enabled': CONF.baremetal.enabled_deploy_interfaces})
+        if (cls.rescue_interface and cls.rescue_interface not in
+                CONF.baremetal.enabled_rescue_interfaces):
+            raise cls.skipException(
+                "Rescue interface %(iface)s required by test is not "
+                "in the list of enabled rescue interfaces %(enabled)s" % {
+                    'iface': cls.rescue_interface,
+                    'enabled': CONF.baremetal.enabled_rescue_interfaces})
         if not cls.wholedisk_image and CONF.baremetal.use_provision_network:
             raise cls.skipException(
                 'Partitioned images are not supported with multitenancy.')
@@ -336,12 +385,22 @@
         boot_kwargs = {'image_checksum': image_checksum}
         if cls.deploy_interface:
             boot_kwargs['deploy_interface'] = cls.deploy_interface
+        if cls.rescue_interface:
+            boot_kwargs['rescue_interface'] = cls.rescue_interface
         cls.node = cls.boot_node(cls.driver, cls.image_ref, **boot_kwargs)
-        cls.node_ip = cls.add_floatingip_to_node(cls.node['uuid'])
+        if CONF.validation.connect_method == 'floating':
+            cls.node_ip = cls.add_floatingip_to_node(cls.node['uuid'])
+        elif CONF.validation.connect_method == 'fixed':
+            cls.node_ip = cls.get_server_ip(cls.node['uuid'])
+        else:
+            m = ('Configuration option "[validation]/connect_method" '
+                 'must be set.')
+            raise lib_exc.InvalidConfiguration(m)
 
     @classmethod
     def resource_cleanup(cls):
-        cls.cleanup_floating_ip(cls.node_ip)
+        if CONF.validation.connect_method == 'floating':
+            cls.cleanup_floating_ip(cls.node_ip)
         vifs = cls.get_node_vifs(cls.node['uuid'])
         # Remove ports before deleting node, to catch regression for cases
         # when user did this prior unprovision node.
diff --git a/ironic_tempest_plugin/tests/scenario/ironic_standalone/test_basic_ops.py b/ironic_tempest_plugin/tests/scenario/ironic_standalone/test_basic_ops.py
index 946a0e6..f90f8ca 100644
--- a/ironic_tempest_plugin/tests/scenario/ironic_standalone/test_basic_ops.py
+++ b/ironic_tempest_plugin/tests/scenario/ironic_standalone/test_basic_ops.py
@@ -192,3 +192,57 @@
     def test_ip_access_to_server(self):
         self.assertTrue(self.ping_ip_address(self.node_ip,
                                              should_succeed=True))
+
+
+class BaremetalIpmiRescueWholedisk(bsm.BaremetalStandaloneScenarioTest):
+
+    api_microversion = '1.38'
+    min_microversion = '1.38'
+    driver = 'ipmi'
+    rescue_interface = 'agent'
+    image_ref = CONF.baremetal.whole_disk_image_ref
+    wholedisk_image = True
+
+    # NOTE(tiendc) Using direct deploy interface and a whole disk
+    # image may lead to the bug:
+    # https://bugs.launchpad.net/ironic/+bug/1750958
+    # This is a workaround by using iscsi deploy interface.
+    deploy_interface = 'iscsi'
+
+    @decorators.idempotent_id('d6a1780f-c4bb-4136-8144-29e822e14d66')
+    @utils.services('image', 'network')
+    def test_rescue_mode(self):
+        self.rescue_node(self.node['uuid'], 'abc123')
+        self.assertTrue(self.ping_ip_address(self.node_ip,
+                                             should_succeed=True))
+
+        self.unrescue_node(self.node['uuid'])
+        self.assertTrue(self.ping_ip_address(self.node_ip,
+                                             should_succeed=True))
+
+
+class BaremetalIpmiRescuePartitioned(bsm.BaremetalStandaloneScenarioTest):
+
+    api_microversion = '1.38'
+    min_microversion = '1.38'
+    driver = 'ipmi'
+    rescue_interface = 'agent'
+    image_ref = CONF.baremetal.partition_image_ref
+    wholedisk_image = False
+
+    # NOTE(jroll) the ansible deploy interface doesn't support partition images
+    # with netboot mode. Since that's what is happening here, explicitly choose
+    # a deploy interface to be sure we don't end up with a node using the
+    # ansible interface here.
+    deploy_interface = 'iscsi'
+
+    @decorators.idempotent_id('113acd0a-9872-4631-b3ee-54da7e3bb262')
+    @utils.services('image', 'network')
+    def test_rescue_mode(self):
+        self.rescue_node(self.node['uuid'], 'abc123')
+        self.assertTrue(self.ping_ip_address(self.node_ip,
+                                             should_succeed=True))
+
+        self.unrescue_node(self.node['uuid'])
+        self.assertTrue(self.ping_ip_address(self.node_ip,
+                                             should_succeed=True))
diff --git a/ironic_tempest_plugin/tests/scenario/test_baremetal_basic_ops.py b/ironic_tempest_plugin/tests/scenario/test_baremetal_basic_ops.py
index 47fc07e..f78155d 100644
--- a/ironic_tempest_plugin/tests/scenario/test_baremetal_basic_ops.py
+++ b/ironic_tempest_plugin/tests/scenario/test_baremetal_basic_ops.py
@@ -35,6 +35,7 @@
         * Monitors the associated Ironic node for power and
           expected state transitions
         * Validates Ironic node's port data has been properly updated
+        * Validates Ironic node's resource class and traits have been honoured
         * Verifies SSH connectivity using created keypair via fixed IP
         * Associates a floating ip
         * Verifies SSH connectivity using created keypair via floating IP
@@ -44,6 +45,16 @@
           expected state transitions
     """
 
+    @staticmethod
+    def _is_version_supported(version):
+        """Return whether an API microversion is supported."""
+        min_version = api_version_request.APIVersionRequest(
+            CONF.baremetal.min_microversion)
+        max_version = api_version_request.APIVersionRequest(
+            CONF.baremetal.max_microversion)
+        version = api_version_request.APIVersionRequest(version)
+        return min_version <= version <= max_version
+
     def rebuild_instance(self, preserve_ephemeral=False):
         self.rebuild_server(server_id=self.instance['id'],
                             preserve_ephemeral=preserve_ephemeral,
@@ -105,9 +116,7 @@
         vifs = []
         # TODO(vsaienko) switch to get_node_vifs() when all stable releases
         # supports Ironic API 1.28
-        if (api_version_request.APIVersionRequest(
-            CONF.baremetal.max_microversion) >=
-                api_version_request.APIVersionRequest('1.28')):
+        if self._is_version_supported('1.28'):
             vifs = self.get_node_vifs(node_uuid)
         else:
             for port in self.get_ports(self.node['uuid']):
@@ -124,12 +133,65 @@
             self.assertEqual(n_port['device_id'], self.instance['id'])
             self.assertIn(n_port['mac_address'], ir_ports_addresses)
 
+    def validate_scheduling(self):
+        """Validate scheduling attributes of the node against the flavor.
+
+        Validates the resource class and traits requested by the flavor against
+        those set on the node. Does not assume that resource classes and traits
+        are in use.
+        """
+        # Try to get a node with resource class (1.21) and traits (1.37).
+        # TODO(mgoddard): Remove this when all stable releases support these
+        # API versions.
+        for version in ('1.37', '1.21'):
+            if self._is_version_supported(version):
+                node = self.get_node(instance_id=self.instance['id'],
+                                     api_version=version)
+                break
+        else:
+            # Neither API is supported - cannot test.
+            LOG.warning("Cannot validate resource class and trait based "
+                        "scheduling as these require API version 1.21 and "
+                        "1.37 respectively")
+            return
+
+        f_id = self.instance['flavor']['id']
+        extra_specs = self.flavors_client.list_flavor_extra_specs(f_id)
+        extra_specs = extra_specs['extra_specs']
+
+        # Pull the requested resource class and traits from the flavor.
+        resource_class = None
+        traits = set()
+        for key, value in extra_specs.items():
+            if key.startswith('resources:CUSTOM_') and value == '1':
+                resource_class = key.partition(':')[2]
+            if key.startswith('trait:') and value == 'required':
+                trait = key.partition(':')[2]
+                traits.add(trait)
+
+        # Validate requested resource class and traits against the node.
+        if resource_class is not None:
+            # The resource class in ironic may be lower case, and must omit the
+            # CUSTOM_ prefix. Normalise it.
+            node_resource_class = node['resource_class']
+            node_resource_class = node_resource_class.upper()
+            node_resource_class = 'CUSTOM_' + node_resource_class
+            self.assertEqual(resource_class, node_resource_class)
+
+        if 'traits' in node and traits:
+            self.assertIn('traits', node['instance_info'])
+            # All flavor traits should be added as instance traits.
+            self.assertEqual(traits, set(node['instance_info']['traits']))
+            # Flavor traits should be a subset of node traits.
+            self.assertTrue(traits.issubset(set(node['traits'])))
+
     @decorators.idempotent_id('549173a5-38ec-42bb-b0e2-c8b9f4a08943')
     @utils.services('compute', 'image', 'network')
     def test_baremetal_server_ops(self):
         self.add_keypair()
         self.instance, self.node = self.boot_instance()
         self.validate_ports()
+        self.validate_scheduling()
         ip_address = self.get_server_ip(self.instance)
         self.get_remote_client(ip_address).validate_authentication()
         vm_client = self.get_remote_client(ip_address)
diff --git a/ironic_tempest_plugin/tests/scenario/test_baremetal_multitenancy.py b/ironic_tempest_plugin/tests/scenario/test_baremetal_multitenancy.py
index 013eb2e..69ee6c8 100644
--- a/ironic_tempest_plugin/tests/scenario/test_baremetal_multitenancy.py
+++ b/ironic_tempest_plugin/tests/scenario/test_baremetal_multitenancy.py
@@ -44,6 +44,11 @@
         if not CONF.baremetal.use_provision_network:
             msg = 'Ironic/Neutron tenant isolation is not configured.'
             raise cls.skipException(msg)
+        if (CONF.baremetal.available_nodes is not None and
+                CONF.baremetal.available_nodes < 2):
+            msg = ('Not enough baremetal nodes, %d configured, test requires '
+                   'a minimum of 2') % CONF.baremetal.available_nodes
+            raise cls.skipException(msg)
 
     def create_tenant_network(self, clients, tenant_cidr):
         network = self._create_network(
diff --git a/zuul.d/project.yaml b/zuul.d/project.yaml
index e6646a2..a38e8ec 100644
--- a/zuul.d/project.yaml
+++ b/zuul.d/project.yaml
@@ -4,10 +4,10 @@
         - ironic-dsvm-standalone
         - ironic-dsvm-standalone-queens
         - ironic-dsvm-standalone-pike
-        - ironic-tempest-dsvm-ipa-wholedisk-bios-agent_ipmitool-tinyipa
-        - ironic-tempest-dsvm-ipa-wholedisk-bios-agent_ipmitool-tinyipa-queens
-        - ironic-tempest-dsvm-ipa-wholedisk-bios-agent_ipmitool-tinyipa-pike
-        - ironic-tempest-dsvm-ipa-wholedisk-bios-agent_ipmitool-tinyipa-ocata
+        - ironic-tempest-dsvm-ipa-wholedisk-agent_ipmitool-tinyipa-multinode
+        - ironic-tempest-dsvm-ipa-wholedisk-agent_ipmitool-tinyipa-multinode-queens
+        - ironic-tempest-dsvm-ipa-wholedisk-agent_ipmitool-tinyipa-multinode-pike
+        - ironic-tempest-dsvm-ipa-wholedisk-agent_ipmitool-tinyipa-multinode-ocata
         - ironic-tempest-dsvm-ironic-inspector
         - ironic-tempest-dsvm-ironic-inspector-queens
         - ironic-tempest-dsvm-ironic-inspector-pike
@@ -21,10 +21,10 @@
         - ironic-dsvm-standalone
         - ironic-dsvm-standalone-queens
         - ironic-dsvm-standalone-pike
-        - ironic-tempest-dsvm-ipa-wholedisk-bios-agent_ipmitool-tinyipa
-        - ironic-tempest-dsvm-ipa-wholedisk-bios-agent_ipmitool-tinyipa-queens
-        - ironic-tempest-dsvm-ipa-wholedisk-bios-agent_ipmitool-tinyipa-pike
-        - ironic-tempest-dsvm-ipa-wholedisk-bios-agent_ipmitool-tinyipa-ocata
+        - ironic-tempest-dsvm-ipa-wholedisk-agent_ipmitool-tinyipa-multinode
+        - ironic-tempest-dsvm-ipa-wholedisk-agent_ipmitool-tinyipa-multinode-queens
+        - ironic-tempest-dsvm-ipa-wholedisk-agent_ipmitool-tinyipa-multinode-pike
+        - ironic-tempest-dsvm-ipa-wholedisk-agent_ipmitool-tinyipa-multinode-ocata
         - ironic-tempest-dsvm-ironic-inspector
         - ironic-tempest-dsvm-ironic-inspector-queens
         - ironic-tempest-dsvm-ironic-inspector-pike
diff --git a/zuul.d/stable-jobs.yaml b/zuul.d/stable-jobs.yaml
index 5b51164..32c5080 100644
--- a/zuul.d/stable-jobs.yaml
+++ b/zuul.d/stable-jobs.yaml
@@ -10,18 +10,18 @@
     override-checkout: stable/pike
 
 - job:
-    name: ironic-tempest-dsvm-ipa-wholedisk-bios-agent_ipmitool-tinyipa-queens
-    parent: ironic-tempest-dsvm-ipa-wholedisk-bios-agent_ipmitool-tinyipa
+    name: ironic-tempest-dsvm-ipa-wholedisk-agent_ipmitool-tinyipa-multinode-queens
+    parent: ironic-tempest-dsvm-ipa-wholedisk-agent_ipmitool-tinyipa-multinode
     override-checkout: stable/queens
 
 - job:
-    name: ironic-tempest-dsvm-ipa-wholedisk-bios-agent_ipmitool-tinyipa-pike
-    parent: ironic-tempest-dsvm-ipa-wholedisk-bios-agent_ipmitool-tinyipa
+    name: ironic-tempest-dsvm-ipa-wholedisk-agent_ipmitool-tinyipa-multinode-pike
+    parent: ironic-tempest-dsvm-ipa-wholedisk-agent_ipmitool-tinyipa-multinode
     override-checkout: stable/pike
 
 - job:
-    name: ironic-tempest-dsvm-ipa-wholedisk-bios-agent_ipmitool-tinyipa-ocata
-    parent: ironic-tempest-dsvm-ipa-wholedisk-bios-agent_ipmitool-tinyipa
+    name: ironic-tempest-dsvm-ipa-wholedisk-agent_ipmitool-tinyipa-multinode-ocata
+    parent: ironic-tempest-dsvm-ipa-wholedisk-agent_ipmitool-tinyipa-multinode
     override-checkout: stable/ocata
 
 - job:
