From a8d2ed88a23cb9ea91552a42a11923c3627b912f Mon Sep 17 00:00:00 2001 From: Kaifeng Wang Date: Tue, 29 Jul 2025 10:57:30 +0800 Subject: [PATCH] Orphaned accelerators after devices removed Fixes the issue that when accelerator devices were removed from node, a re-introspection does not remove previous accelerator device information from the node. Closes-Bug: 2118958 Change-Id: Ia57902a9095b78e0128a728693c03e0a01c6421b Signed-off-by: Kaifeng Wang --- .../modules/inspector/hooks/accelerators.py | 2 ++ .../inspector/hooks/test_accelerators.py | 24 +++++++++++++++++++ ...removed-accelerators-0c67ace5990c2ac3.yaml | 6 +++++ 3 files changed, 32 insertions(+) create mode 100644 releasenotes/notes/clean-removed-accelerators-0c67ace5990c2ac3.yaml diff --git a/ironic/drivers/modules/inspector/hooks/accelerators.py b/ironic/drivers/modules/inspector/hooks/accelerators.py index 3803cb1c73..349f037516 100644 --- a/ironic/drivers/modules/inspector/hooks/accelerators.py +++ b/ironic/drivers/modules/inspector/hooks/accelerators.py @@ -78,3 +78,5 @@ class AcceleratorsHook(base.InspectionHook): else: LOG.info('No known accelerator devices found for node %s', task.node.uuid) + task.node.set_property('accelerators', accelerators) + task.node.save() diff --git a/ironic/tests/unit/drivers/modules/inspector/hooks/test_accelerators.py b/ironic/tests/unit/drivers/modules/inspector/hooks/test_accelerators.py index 82fc48d9de..c570e99bfa 100644 --- a/ironic/tests/unit/drivers/modules/inspector/hooks/test_accelerators.py +++ b/ironic/tests/unit/drivers/modules/inspector/hooks/test_accelerators.py @@ -78,3 +78,27 @@ class AcceleratorsTestCase(db_base.DbTestCase): 'device_info': 'NVIDIA Corporation Tesla T4', 'pci_address': '0000:00:01.2'}] self.assertEqual(result, expected) + + def test_accelerators_cleanup(self): + with task_manager.acquire(self.context, self.node.id) as task: + prop = self.node.properties + prop['accelerators'] = [ + {'vendor_id': '0de', + 'device_id': '1eb8', + 'type': 'GPU', + 'device_info': 'NVIDIA Corporation Tesla T4', + 'pci_address': '0000:00:01.2'} + ] + self.node.properties = prop + self.node.save() + self.plugin_data = {'pci_devices': [{ + "vendor_id": "8086", + "product_id": "324c", + "class": "088000", + "revision": "00", + "bus": "0000:ff:00.7" + }]} + self.accelerators_hook.__call__(task, self.inventory, + self.plugin_data) + self.node.refresh() + self.assertEqual(self.node.properties.get('accelerators'), []) diff --git a/releasenotes/notes/clean-removed-accelerators-0c67ace5990c2ac3.yaml b/releasenotes/notes/clean-removed-accelerators-0c67ace5990c2ac3.yaml new file mode 100644 index 0000000000..d26dd5235c --- /dev/null +++ b/releasenotes/notes/clean-removed-accelerators-0c67ace5990c2ac3.yaml @@ -0,0 +1,6 @@ +--- +fixes: + - | + Fixes an issue that when accelerator devices were removed from node, + a re-introspection does not remove previous accelerator device + information from the node.