summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQianbiao.NG <iampurse@vip.qq.com>2020-09-15 18:09:25 +0800
committerQianBiao Ng <iampurse@vip.qq.com>2020-10-12 07:44:10 +0000
commit6b160580d1850bcde3f328e44b2f8bd8f0171ee8 (patch)
treed4d8ee7701821c377d26479df5b9b7ef78b1407e
parent353dfe0915b80fbabb6145d7fee68933217f8f0b (diff)
downloadironic-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)
-rw-r--r--ironic_python_agent/hardware_managers/cna.py23
-rw-r--r--ironic_python_agent/tests/unit/hardware_managers/test_cna.py40
-rw-r--r--releasenotes/notes/fix-mlnx-hardware-mgr-never-run-72072580be4d6e7a.yaml7
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.