Fix: make Intel CNA hardware manager none generic

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 dc63d2f240)
(cherry picked from commit fad38ee376)
This commit is contained in:
Qianbiao.NG 2020-09-15 18:09:25 +08:00 committed by QianBiao Ng
parent 353dfe0915
commit 6b160580d1
3 changed files with 35 additions and 35 deletions

View File

@ -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)

View File

@ -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')

View File

@ -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.