diff options
author | Qianbiao.NG <iampurse@vip.qq.com> | 2020-09-15 18:09:25 +0800 |
---|---|---|
committer | QianBiao Ng <iampurse@vip.qq.com> | 2020-10-12 07:44:10 +0000 |
commit | 6b160580d1850bcde3f328e44b2f8bd8f0171ee8 (patch) | |
tree | d4d8ee7701821c377d26479df5b9b7ef78b1407e | |
parent | 353dfe0915b80fbabb6145d7fee68933217f8f0b (diff) | |
download | ironic-python-agent-stable/rocky.tar.gz |
Fix: make Intel CNA hardware manager none genericrocky-eolstable/rocky
Currently, IntelCnaHardwareManager inherits GenericHardwareManager
which makes it a new "GenericHardwareManager" with "MAINLINE" priority.
This causes all other hardware-managers with lower priority than
"MAINLINE" never be used. To fix this, make IntelCnaHardwareManager
inherit basic HardwareManager.
Change-Id: I28b665d8841b0b2e83b132e1f25df95e03e7ba10
Story: 2008142
Task: 40882
(cherry picked from commit dc63d2f240698148e1de6c43251b89c7e5cfdf33)
(cherry picked from commit fad38ee376b8fe7679f54c6ddfe984cd8f5ae6b7)
3 files changed, 35 insertions, 35 deletions
diff --git a/ironic_python_agent/hardware_managers/cna.py b/ironic_python_agent/hardware_managers/cna.py index 6998422a..2d49d9e0 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 5948bb75..6494144f 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 00000000..28aaf1c4 --- /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. |