Tear down raid sets
We need to explicitly tear down the raid sets and not just
remove the hint because the code will try to use the raid
set if it is there.
Depends-On: https://review.opendev.org/#/c/759906
Change-Id: I4c6829833889e03588d5723dadb94338696c9122
diff --git a/ironic_tempest_plugin/tests/scenario/baremetal_standalone_manager.py b/ironic_tempest_plugin/tests/scenario/baremetal_standalone_manager.py
index 6b9d9e3..10a83a6 100644
--- a/ironic_tempest_plugin/tests/scenario/baremetal_standalone_manager.py
+++ b/ironic_tempest_plugin/tests/scenario/baremetal_standalone_manager.py
@@ -172,7 +172,7 @@
@classmethod
@bm.retry_on_conflict
- def detach_all_vifs_from_node(cls, node_id):
+ def detach_all_vifs_from_node(cls, node_id, force_delete=False):
"""Detach all VIFs from a given node.
:param node_id: Name or UUID of the node.
@@ -180,6 +180,11 @@
vifs = cls.get_node_vifs(node_id)
for vif in vifs:
cls.baremetal_client.vif_detach(node_id, vif)
+ if force_delete:
+ try:
+ cls.ports_client.delete_port(vif)
+ except lib_exc.NotFound:
+ pass
@classmethod
@bm.retry_on_conflict
@@ -280,7 +285,7 @@
interval=30)
@classmethod
- def terminate_node(cls, node_id):
+ def terminate_node(cls, node_id, force_delete=False):
"""Terminate active ironic node.
The following actions are executed:
@@ -290,9 +295,9 @@
:param node_id: Name or UUID for the node.
"""
- cls.detach_all_vifs_from_node(node_id)
+ cls.detach_all_vifs_from_node(node_id, force_delete=force_delete)
- if cls.delete_node:
+ if cls.delete_node or force_delete:
cls.set_node_provision_state(node_id, 'deleted')
# NOTE(vsaienko) We expect here fast switching from deleted to
# available as automated cleaning is disabled so poll status
@@ -593,6 +598,7 @@
'CUSTOM_RAID', steps=steps)
self.baremetal_client.add_node_trait(self.node['uuid'],
'CUSTOM_RAID')
+
else:
steps = [
{
@@ -612,6 +618,11 @@
config)
self.manual_cleaning(self.node, clean_steps=steps)
+ # The node has been changed, anything at this point, we need to back
+ # out the raid configuration.
+ if not deploy_time:
+ self.addCleanup(self.remove_raid_configuration, self.node)
+
# NOTE(dtantsur): this is not required, but it allows us to check that
# the RAID device was in fact created and is used for deployment.
patch = [{'path': '/properties/root_device',
@@ -623,14 +634,27 @@
# NOTE(dtantsur): apparently cirros cannot boot from md devices :(
# So we only move the node to active (verifying deployment).
self.set_node_to_active()
+ if deploy_time:
+ self.addCleanup(self.remove_raid_configuration, self.node)
def remove_root_device_hint(self):
patch = [{'path': '/properties/root_device',
'op': 'remove'}]
self.update_node(self.node['uuid'], patch=patch)
- def remove_raid_configuration(self):
- self.baremetal_client.set_node_raid_config(self.node['uuid'], {})
+ def remove_raid_configuration(self, node):
+ self.baremetal_client.set_node_raid_config(node['uuid'], {})
+ steps = [
+ {
+ "interface": "raid",
+ "step": "delete_configuration",
+ },
+ {
+ "interface": "deploy",
+ "step": "erase_devices_metadata",
+ }
+ ]
+ self.manual_cleaning(node, clean_steps=steps)
def rescue_unrescue(self):
rescue_password = uuidutils.generate_uuid()
diff --git a/ironic_tempest_plugin/tests/scenario/ironic_standalone/test_cleaning.py b/ironic_tempest_plugin/tests/scenario/ironic_standalone/test_cleaning.py
index 47e5f63..08abcfa 100644
--- a/ironic_tempest_plugin/tests/scenario/ironic_standalone/test_cleaning.py
+++ b/ironic_tempest_plugin/tests/scenario/ironic_standalone/test_cleaning.py
@@ -90,6 +90,7 @@
api_microversion = '1.55'
# Software RAID is always local boot
boot_option = 'local'
+ delete_node = False
raid_config = {
"logical_disks": [
@@ -118,11 +119,7 @@
# remove the root device hint, so it is best for us to go ahead
# and remove it before exiting the test.
self.remove_root_device_hint()
- # Removes RAID configuration
- # TODO(TheJulia): We _should_ tear the raid configuration down
- # however bouncing neutron ports with known DHCP reload bugs
- # is not a super great idea for tempest tests.
- self.remove_raid_configuration()
+ self.terminate_node(self.node['uuid'], force_delete=True)
class SoftwareRaidDirect(bsm.BaremetalStandaloneScenarioTest):
@@ -138,6 +135,7 @@
api_microversion = '1.55'
# Software RAID is always local boot
boot_option = 'local'
+ delete_node = False
# TODO(dtantsur): more complex layout in this job
raid_config = {
@@ -167,8 +165,4 @@
# remove the root device hint, so it is best for us to go ahead
# and remove it before exiting the test.
self.remove_root_device_hint()
- # Removes RAID configuration
- # TODO(TheJulia): We _should_ tear the raid configuration down
- # however bouncing neutron ports with known DHCP reload bugs
- # is not a super great idea for tempest tests.
- self.remove_raid_configuration()
+ self.terminate_node(self.node['uuid'], force_delete=True)