From 80c6b5140a0c0ac13d3eb3d4da4d1403a497534e Mon Sep 17 00:00:00 2001 From: Julia Kreger Date: Wed, 3 Apr 2024 07:24:51 -0700 Subject: [PATCH] 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 --- .../scenario/baremetal_standalone_manager.py | 41 +++++++++++-------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/ironic_tempest_plugin/tests/scenario/baremetal_standalone_manager.py b/ironic_tempest_plugin/tests/scenario/baremetal_standalone_manager.py index a66d7d6e..a2c91aef 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 @@ class BaremetalStandaloneManager(bm.BaremetalScenarioTest, """ 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 @@ class BaremetalStandaloneScenarioTest(BaremetalStandaloneManager): 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 @@ class BaremetalStandaloneScenarioTest(BaremetalStandaloneManager): 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 @@ class BaremetalStandaloneScenarioTest(BaremetalStandaloneManager): 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):