diff options
Diffstat (limited to 'ironic/drivers/modules/drac/inspect.py')
-rw-r--r-- | ironic/drivers/modules/drac/inspect.py | 53 |
1 files changed, 52 insertions, 1 deletions
diff --git a/ironic/drivers/modules/drac/inspect.py b/ironic/drivers/modules/drac/inspect.py index bdccfd018..b452da6b0 100644 --- a/ironic/drivers/modules/drac/inspect.py +++ b/ironic/drivers/modules/drac/inspect.py @@ -119,11 +119,18 @@ class DracInspect(base.InspectInterface): {'node_uuid': node.uuid, 'error': exc}) raise exception.HardwareInspectionFailure(error=exc) + pxe_dev_nics = self._get_pxe_dev_nics(client, nics, node) + if pxe_dev_nics is None: + LOG.warning('No PXE enabled NIC was found for node ' + '%(node_uuid)s.', {'node_uuid': node.uuid}) + for nic in nics: try: port = objects.Port(task.context, address=nic.mac, - node_id=node.id) + node_id=node.id, + pxe_enabled=(nic.id in pxe_dev_nics)) port.create() + LOG.info('Port created with MAC address %(mac)s ' 'for node %(node_uuid)s during inspection', {'mac': nic.mac, 'node_uuid': node.uuid}) @@ -161,3 +168,47 @@ class DracInspect(base.InspectInterface): return cpu.cores * 2 else: return cpu.cores + + def _get_pxe_dev_nics(self, client, nics, node): + """Get a list of pxe device interfaces. + + :param client: Dracclient to list the bios settings and nics + :param nics: list of nics + + :returns: Returns list of pxe device interfaces. + """ + pxe_dev_nics = [] + pxe_params = ["PxeDev1EnDis", "PxeDev2EnDis", + "PxeDev3EnDis", "PxeDev4EnDis"] + pxe_nics = ["PxeDev1Interface", "PxeDev2Interface", + "PxeDev3Interface", "PxeDev4Interface"] + + try: + bios_settings = client.list_bios_settings() + except drac_exceptions.BaseClientException as exc: + LOG.error('DRAC driver failed to list bios settings ' + 'for %(node_uuid)s. Reason: %(error)s.', + {'node_uuid': node.uuid, 'error': exc}) + raise exception.HardwareInspectionFailure(error=exc) + + if bios_settings["BootMode"].current_value == "Uefi": + for param, nic in zip(pxe_params, pxe_nics): + if param in bios_settings and bios_settings[ + param].current_value == "Enabled": + pxe_dev_nics.append( + bios_settings[nic].current_value) + elif bios_settings["BootMode"].current_value == "Bios": + for nic in nics: + try: + nic_cap = client.list_nic_settings(nic_id=nic.id) + except drac_exceptions.BaseClientException as exc: + LOG.error('DRAC driver failed to list nic settings ' + 'for %(node_uuid)s. Reason: %(error)s.', + {'node_uuid': node.uuid, 'error': exc}) + raise exception.HardwareInspectionFailure(error=exc) + + if ("LegacyBootProto" in nic_cap and nic_cap[ + 'LegacyBootProto'].current_value == "PXE"): + pxe_dev_nics.append(nic.id) + + return pxe_dev_nics |