Unprovision iso ramdisk boot from test

The boot_iso ramdisk test unfortunately has been discovered to
orphan occupied "nodes" after the test has executed. This change
triggers the test to send a command to force the node to be
unprovisioned at the end of the test.

Closes-Bug: 2055469
Change-Id: Ib525fe099d5884f442cdc375c5a8d230710d20a4
diff --git a/ironic_tempest_plugin/tests/scenario/baremetal_standalone_manager.py b/ironic_tempest_plugin/tests/scenario/baremetal_standalone_manager.py
index a66d7d6..a2c91ae 100644
--- a/ironic_tempest_plugin/tests/scenario/baremetal_standalone_manager.py
+++ b/ironic_tempest_plugin/tests/scenario/baremetal_standalone_manager.py
@@ -192,7 +192,12 @@
         """
         vifs = cls.get_node_vifs(node_id)
         for vif in vifs:
-            cls.baremetal_client.vif_detach(node_id, vif)
+            try:
+                cls.baremetal_client.vif_detach(node_id, vif)
+            except lib_exc.BadRequest:
+                # When the vif was already removed, such as the
+                # node was already unprovisioned.
+                pass
             if force_delete:
                 try:
                     cls.ports_client.delete_port(vif)
@@ -873,8 +878,7 @@
         self.assertTrue(self.ping_ip_address(self.node_ip,
                                              should_succeed=True))
 
-    @classmethod
-    def boot_node_ramdisk(cls, ramdisk_ref, iso=False):
+    def boot_node_ramdisk(self, ramdisk_ref, iso=False):
         """Boot ironic using a ramdisk node.
 
         The following actions are executed:
@@ -890,11 +894,11 @@
                     us actually an ISO image.
         """
         if ramdisk_ref is None:
-            ramdisk_ref = cls.image_ref
+            ramdisk_ref = self.image_ref
 
-        network, subnet, router = cls.create_networks()
-        n_port = cls.create_neutron_port(network_id=network['id'])
-        cls.vif_attach(node_id=cls.node['uuid'], vif_id=n_port['id'])
+        network, subnet, router = self.create_networks()
+        n_port = self.create_neutron_port(network_id=network['id'])
+        self.vif_attach(node_id=self.node['uuid'], vif_id=n_port['id'])
         if iso:
             patch_path = '/instance_info/boot_iso'
         else:
@@ -905,22 +909,25 @@
         patch = [{'path': patch_path,
                   'op': 'add',
                   'value': ramdisk_ref}]
-        cls.update_node(cls.node['uuid'], patch=patch)
-        cls.set_node_provision_state(cls.node['uuid'], 'active')
+        self.update_node(self.node['uuid'], patch=patch)
+        self.set_node_provision_state(self.node['uuid'], 'active')
+        self.addCleanup(
+            self.set_node_provision_state,
+            self.node['uuid'], 'deleted')
         if CONF.validation.connect_method == 'floating':
-            cls.node_ip = cls.add_floatingip_to_node(cls.node['uuid'])
+            self.node_ip = self.add_floatingip_to_node(self.node['uuid'])
         elif CONF.validation.connect_method == 'fixed':
-            cls.node_ip = cls.get_server_ip(cls.node['uuid'])
+            self.node_ip = self.get_server_ip(self.node['uuid'])
         else:
             m = ('Configuration option "[validation]/connect_method" '
                  'must be set.')
             raise lib_exc.InvalidConfiguration(m)
-        cls.wait_power_state(cls.node['uuid'],
-                             bm.BaremetalPowerStates.POWER_ON)
-        cls.wait_provisioning_state(cls.node['uuid'],
-                                    bm.BaremetalProvisionStates.ACTIVE,
-                                    timeout=CONF.baremetal.active_timeout,
-                                    interval=30)
+        self.wait_power_state(self.node['uuid'],
+                              bm.BaremetalPowerStates.POWER_ON)
+        self.wait_provisioning_state(self.node['uuid'],
+                                     bm.BaremetalProvisionStates.ACTIVE,
+                                     timeout=CONF.baremetal.active_timeout,
+                                     interval=30)
 
     def boot_and_verify_ramdisk_node(self, ramdisk_ref=None, iso=False,
                                      should_succeed=True):