diff --git a/ironic_python_agent/hardware_managers/cna.py b/ironic_python_agent/hardware_managers/cna.py index 6998422ae..2d49d9e03 100644 --- a/ironic_python_agent/hardware_managers/cna.py +++ b/ironic_python_agent/hardware_managers/cna.py @@ -69,29 +69,20 @@ def _disable_embedded_lldp_agent_in_cna_card(): .format(str(failed_dirs).strip('[]'))) -class IntelCnaHardwareManager(hardware.GenericHardwareManager): +class IntelCnaHardwareManager(hardware.HardwareManager): HARDWARE_MANAGER_NAME = 'IntelCnaHardwareManager' HARDWARE_MANAGER_VERSION = '1.0' def evaluate_hardware_support(self): if _detect_cna_card(): LOG.debug('Found Intel CNA network card') + # On Intel CNA cards, in order to make LLDP info collecting + # possible, the embedded LLDP agent, which runs inside that + # card, needs to be turned off. + if CONF.collect_lldp: + LOG.info('Disable CNA network card embedded lldp agent now') + _disable_embedded_lldp_agent_in_cna_card() return hardware.HardwareSupport.MAINLINE else: LOG.debug('No Intel CNA network card found') return hardware.HardwareSupport.NONE - - def collect_lldp_data(self, interface_names): - """Collect and convert LLDP info from the node. - - On Intel CNA cards, in order to make LLDP info collecting possible, - the embedded LLDP agent, which runs inside that card, needs to be - turned off. Then we can give the control back to the super class. - - :param interface_names: list of names of node's interfaces. - :return: a dict, containing the lldp data from every interface. - """ - - _disable_embedded_lldp_agent_in_cna_card() - return super(IntelCnaHardwareManager, self).collect_lldp_data( - interface_names) diff --git a/ironic_python_agent/tests/unit/hardware_managers/test_cna.py b/ironic_python_agent/tests/unit/hardware_managers/test_cna.py index 3253ad4cf..78967b92b 100644 --- a/ironic_python_agent/tests/unit/hardware_managers/test_cna.py +++ b/ironic_python_agent/tests/unit/hardware_managers/test_cna.py @@ -118,12 +118,29 @@ class TestIntelCnaHardwareManager(base.IronicAgentTest): @mock.patch.object(cna, 'LOG', autospec=True) @mock.patch.object(cna, '_detect_cna_card', autospec=True) - def test_evaluate_hardware_support(self, mock_detect_card, mock_log): + def test_evaluate_hardware_support_with_collect_lldp_disabled( + self, mock_detect_card, mock_log): mock_detect_card.return_value = True expected_support = hardware.HardwareSupport.MAINLINE actual_support = self.hardware.evaluate_hardware_support() self.assertEqual(expected_support, actual_support) - mock_log.debug.assert_called_once() + mock_log.debug.assert_called_once_with('Found Intel CNA network card') + + @mock.patch.object(cna, 'LOG', autospec=True) + @mock.patch.object(cna, '_detect_cna_card', autospec=True) + @mock.patch.object(cna, '_disable_embedded_lldp_agent_in_cna_card', + autospec=True) + def test_evaluate_hardware_support_with_collect_lldp_enabled( + self, mock_disable_lldp_agent, mock_detect_card, mock_log): + self.config(collect_lldp=True) + mock_detect_card.return_value = True + expected_support = hardware.HardwareSupport.MAINLINE + actual_support = self.hardware.evaluate_hardware_support() + self.assertEqual(expected_support, actual_support) + mock_log.debug.assert_called_once_with('Found Intel CNA network card') + mock_log.info.assert_called_once_with( + 'Disable CNA network card embedded lldp agent now') + mock_disable_lldp_agent.assert_called_once_with() @mock.patch.object(cna, 'LOG', autospec=True) @mock.patch.object(cna, '_detect_cna_card', autospec=True) @@ -134,20 +151,5 @@ class TestIntelCnaHardwareManager(base.IronicAgentTest): expected_support = hardware.HardwareSupport.NONE actual_support = self.hardware.evaluate_hardware_support() self.assertEqual(expected_support, actual_support) - mock_log.debug.assert_called_once() - - @mock.patch.object(hardware.GenericHardwareManager, 'collect_lldp_data', - autospec=True) - def test_collect_lldp_data(self, mock_super_collect): - iface_names = ['eth0', 'eth1'] - returned_lldp_data = [ - (0, 'foo'), - (1, 'bar'), - ] - mock_super_collect.return_value = returned_lldp_data - with mock.patch.object(cna, '_disable_embedded_lldp_agent_in_cna_card', - autospec=True): - result = self.hardware.collect_lldp_data(iface_names) - mock_super_collect.assert_called_once_with(self.hardware, - iface_names) - self.assertEqual(returned_lldp_data, result) + mock_log.debug.assert_called_once_with( + 'No Intel CNA network card found') diff --git a/releasenotes/notes/fix-mlnx-hardware-mgr-never-run-72072580be4d6e7a.yaml b/releasenotes/notes/fix-mlnx-hardware-mgr-never-run-72072580be4d6e7a.yaml new file mode 100644 index 000000000..28aaf1c4b --- /dev/null +++ b/releasenotes/notes/fix-mlnx-hardware-mgr-never-run-72072580be4d6e7a.yaml @@ -0,0 +1,7 @@ +--- +fixes: + - | + Fixes an issue with the IntelCnaHardwareManager which prevented hardware + managers with lower priority to be executed and therefore may blocked the + initialization and collection of hardware these managers are supposed to take + care of.