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 4b0ef13d08)
This commit is contained in:
Qianbiao.NG 2020-09-15 18:09:25 +08:00 committed by QianBiao Ng
parent 1a29800cc5
commit 3c548670b7
3 changed files with 31 additions and 33 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,13 +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.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()
mock_log.info.assert_called_once()
mock_disable_lldp_agent.assert_called_once()
@mock.patch.object(cna, 'LOG', autospec=True)
@mock.patch.object(cna, '_detect_cna_card', autospec=True)
def test_evaluate_hardware_support_no_cna_card_detected(self,
@ -135,19 +151,3 @@ class TestIntelCnaHardwareManager(base.IronicAgentTest):
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)

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.