Add get PXE port MACs for BIOS mode
This change adds the ability to retrieve the list of PXE-enabled device MAC addresses for legacy BIOS boot mode. Change-Id: I4bf42bde631c5b41710ff1faead0477063e89971
This commit is contained in:
parent
b9d65b5ef2
commit
bec107ce58
|
@ -23,11 +23,18 @@ from sushy.resources.oem import base as oem_base
|
|||
from sushy_oem_idrac import asynchronous
|
||||
from sushy_oem_idrac import constants
|
||||
from sushy_oem_idrac.resources import common as res_common
|
||||
from sushy_oem_idrac.resources.manager import constants as mgr_cons
|
||||
from sushy_oem_idrac.resources.manager import mappings as mgr_maps
|
||||
from sushy_oem_idrac import utils
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
# System Configuration Tag Constant
|
||||
_SYSTEM_CONFIG_TAG = "SystemConfiguration"
|
||||
|
||||
# Response Code Constant
|
||||
_RESPONSE_OK_CODE = 200
|
||||
|
||||
|
||||
class DellManagerActionsField(base.CompositeField):
|
||||
import_system_configuration = common.ActionField(
|
||||
|
@ -243,6 +250,44 @@ VFDD\
|
|||
LOG.error('Dell OEM export system configuration failed : %s', exc)
|
||||
raise
|
||||
|
||||
def get_pxe_port_macs_bios(self, ethernet_interfaces_mac):
|
||||
"""Get a list of pxe port MAC addresses for BIOS.
|
||||
|
||||
:param ethernet_interfaces_mac: Dictionary of ethernet interfaces.
|
||||
:returns: List of pxe port MAC addresses.
|
||||
:raises: ExtensionError on failure to perform requested operation.
|
||||
"""
|
||||
pxe_port_macs = []
|
||||
# Get NIC configuration
|
||||
nic_settings = self._export_system_configuration(
|
||||
target=mgr_cons.EXPORT_NIC_CONFIG)
|
||||
|
||||
if nic_settings.status_code != _RESPONSE_OK_CODE:
|
||||
error = (('An error occurred when attempting to export '
|
||||
'the system configuration. Status code: %(code), '
|
||||
'Error details: %(err)'),
|
||||
{'code': nic_settings.status_code,
|
||||
'err': nic_settings.__dict__})
|
||||
LOG.error(error)
|
||||
raise sushy.exceptions.ExtensionError(error=error)
|
||||
# Parse the exported system configuration for the NIC
|
||||
# ports that are set to PXE boot
|
||||
json_data = nic_settings.json()
|
||||
if _SYSTEM_CONFIG_TAG in json_data.keys():
|
||||
for root in json_data[_SYSTEM_CONFIG_TAG]['Components']:
|
||||
nic_id = root['FQDD']
|
||||
for child in root['Attributes']:
|
||||
if child.get('Name') == "LegacyBootProto":
|
||||
if child['Value'] == "PXE":
|
||||
mac_address = ethernet_interfaces_mac[nic_id]
|
||||
pxe_port_macs.append(mac_address)
|
||||
return pxe_port_macs
|
||||
|
||||
else:
|
||||
error = (('Failed to get system configuration from response'))
|
||||
LOG.error(error)
|
||||
raise sushy.exceptions.ExtensionError(error=error)
|
||||
|
||||
|
||||
def get_extension(*args, **kwargs):
|
||||
return DellManagerExtension
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -100,3 +100,55 @@ class ManagerTestCase(BaseTestCase):
|
|||
target = "xyz"
|
||||
self.assertRaises(sushy.exceptions.InvalidParameterValueError,
|
||||
oem._export_system_configuration, target)
|
||||
|
||||
@mock.patch('sushy.resources.oem.common._global_extn_mgrs_by_resource', {})
|
||||
def test_get_pxe_port_macs_bios(self):
|
||||
oem = self.manager.get_oem_extension('Dell')
|
||||
oem._export_system_configuration = mock.Mock()
|
||||
with open('sushy_oem_idrac/tests/unit/json_samples/'
|
||||
'export_configuration_nic_bios.json') as f:
|
||||
mock_response = oem._export_system_configuration.return_value
|
||||
mock_response.json.return_value = json.load(f)
|
||||
mock_response.status_code = 200
|
||||
ethernet_interfaces_mac = {'NIC.Integrated.1-4-1': '68:05:CA:AF:AA:C9',
|
||||
'NIC.Slot.7-2-1': '3C:FD:FE:CD:67:31',
|
||||
'NIC.Slot.7-1-1': '3C:FD:FE:CD:67:30',
|
||||
'NIC.Integrated.1-2-1': '68:05:CA:AF:AA:C7',
|
||||
'NIC.Integrated.1-3-1': '68:05:CA:AF:AA:C8',
|
||||
'NIC.Integrated.1-1-1': '68:05:CA:AF:AA:C6'}
|
||||
|
||||
self.assertEqual(["68:05:CA:AF:AA:C8"],
|
||||
oem.get_pxe_port_macs_bios(ethernet_interfaces_mac))
|
||||
|
||||
@mock.patch('sushy.resources.oem.common._global_extn_mgrs_by_resource', {})
|
||||
def test_get_pxe_port_macs_bios_invalid_system_config_tag(self):
|
||||
oem = self.manager.get_oem_extension('Dell')
|
||||
oem._export_system_configuration = mock.Mock()
|
||||
mock_response = oem._export_system_configuration.return_value
|
||||
mock_response.json.return_value = {'Model': 'PowerEdge R7525'}
|
||||
mock_response.status_code = 200
|
||||
ethernet_interfaces_mac = {'NIC.Integrated.1-4-1': '68:05:CA:AF:AA:C9',
|
||||
'NIC.Slot.7-2-1': '3C:FD:FE:CD:67:31',
|
||||
'NIC.Slot.7-1-1': '3C:FD:FE:CD:67:30',
|
||||
'NIC.Integrated.1-2-1': '68:05:CA:AF:AA:C7',
|
||||
'NIC.Integrated.1-3-1': '68:05:CA:AF:AA:C8',
|
||||
'NIC.Integrated.1-1-1': '68:05:CA:AF:AA:C6'}
|
||||
|
||||
self.assertRaises(sushy.exceptions.ExtensionError,
|
||||
oem.get_pxe_port_macs_bios, ethernet_interfaces_mac)
|
||||
|
||||
@mock.patch('sushy.resources.oem.common._global_extn_mgrs_by_resource', {})
|
||||
def test_get_pxe_port_macs_bios_invalid_response(self):
|
||||
oem = self.manager.get_oem_extension('Dell')
|
||||
oem._export_system_configuration = mock.Mock()
|
||||
mock_response = oem._export_system_configuration.return_value
|
||||
mock_response.status_code = 204
|
||||
ethernet_interfaces_mac = {'NIC.Integrated.1-4-1': '68:05:CA:AF:AA:C9',
|
||||
'NIC.Slot.7-2-1': '3C:FD:FE:CD:67:31',
|
||||
'NIC.Slot.7-1-1': '3C:FD:FE:CD:67:30',
|
||||
'NIC.Integrated.1-2-1': '68:05:CA:AF:AA:C7',
|
||||
'NIC.Integrated.1-3-1': '68:05:CA:AF:AA:C8',
|
||||
'NIC.Integrated.1-1-1': '68:05:CA:AF:AA:C6'}
|
||||
|
||||
self.assertRaises(sushy.exceptions.ExtensionError,
|
||||
oem.get_pxe_port_macs_bios, ethernet_interfaces_mac)
|
||||
|
|
Loading…
Reference in New Issue