def erase_block_device(self, node, block_device): # Check if the block device is virtual media and skip the device. if self._is_virtual_media_device(block_device): LOG.info("Skipping the erase of virtual media device %s", block_device.name) return # Note(TheJulia) Use try/except to capture and log the failure # and then revert to attempting to shred the volume if enabled. try: if self._ata_erase(block_device): return except errors.BlockDeviceEraseError as e: info = node.get('driver_internal_info', {}) execute_shred = info.get( 'agent_continue_if_ata_erase_failed', False) if execute_shred: LOG.warning('Failed to invoke ata_erase, ' 'falling back to shred: %(err)s', {'err': e}) else: msg = ('Failed to invoke ata_erase, ' 'fallback to shred is not enabled: %(err)s' % {'err': e}) LOG.error(msg) raise errors.IncompatibleHardwareMethodError(msg) if self._shred_block_device(node, block_device): return msg = ('Unable to erase block device {}: device is unsupported.' ).format(block_device.name) LOG.error(msg) raise errors.IncompatibleHardwareMethodError(msg)
def get_interface_info(self, interface_name): """Return the interface information when its Mellanox and InfiniBand In case of Mellanox and InfiniBand interface we do the following: 1. Calculate the "InfiniBand MAC" according to InfiniBand GUID 2. Calculate the client-id according to InfiniBand GUID """ address = netutils.get_mac_addr(interface_name) if address is None: raise errors.IncompatibleHardwareMethodError() vendor = hardware._get_device_info(interface_name, 'net', 'vendor') if (len(address) != netutils.INFINIBAND_ADDR_LEN or vendor != MLNX_VENDOR_ID): raise errors.IncompatibleHardwareMethodError() mac_addr = _infiniband_address_to_mac(address) client_id = _generate_client_id(address) return hardware.NetworkInterface( interface_name, mac_addr, ipv4_address=netutils.get_ipv4_addr(interface_name), has_carrier=netutils.interface_has_carrier(interface_name), lldp=None, vendor=vendor, product=hardware._get_device_info(interface_name, 'net', 'device'), client_id=client_id)
def erase_block_device(self, block_device): if self._ata_erase(block_device): return msg = ('Unable to erase block device {0}: device is unsupported.' ).format(block_device.name) LOG.error(msg) raise errors.IncompatibleHardwareMethodError(msg)
def test_error_classes(self): cases = [ (errors.InvalidContentError(DETAILS), SAME_DETAILS), (errors.NotFound(), SAME_CL_DETAILS), (errors.CommandExecutionError(DETAILS), SAME_DETAILS), (errors.InvalidCommandError(DETAILS), SAME_DETAILS), (errors.InvalidCommandParamsError(DETAILS), SAME_DETAILS), (errors.RequestedObjectNotFoundError('type_descr', 'obj_id'), DIFF_CL_DETAILS), (errors.IronicAPIError(DETAILS), SAME_DETAILS), (errors.HeartbeatError(DETAILS), SAME_DETAILS), (errors.LookupNodeError(DETAILS), SAME_DETAILS), (errors.LookupAgentIPError(DETAILS), SAME_DETAILS), (errors.LookupAgentInterfaceError(DETAILS), SAME_DETAILS), (errors.ImageDownloadError('image_id', DETAILS), DIFF_CL_DETAILS), (errors.ImageChecksumError('image_id', '/foo/image_id', 'incorrect', 'correct'), DIFF_CL_DETAILS), (errors.ImageWriteError('device', 'exit_code', 'stdout', 'stderr'), DIFF_CL_DETAILS), (errors.ConfigDriveTooLargeError('filename', 'filesize'), DIFF_CL_DETAILS), (errors.ConfigDriveWriteError('device', 'exit_code', 'stdout', 'stderr'), DIFF_CL_DETAILS), (errors.SystemRebootError('exit_code', 'stdout', 'stderr'), DIFF_CL_DETAILS), (errors.BlockDeviceEraseError(DETAILS), SAME_DETAILS), (errors.BlockDeviceError(DETAILS), SAME_DETAILS), (errors.VirtualMediaBootError(DETAILS), SAME_DETAILS), (errors.UnknownNodeError(), DEFAULT_DETAILS), (errors.UnknownNodeError(DETAILS), SAME_DETAILS), (errors.HardwareManagerNotFound(), DEFAULT_DETAILS), (errors.HardwareManagerNotFound(DETAILS), SAME_DETAILS), (errors.HardwareManagerMethodNotFound('method'), DIFF_CL_DETAILS), (errors.IncompatibleHardwareMethodError(), DEFAULT_DETAILS), (errors.IncompatibleHardwareMethodError(DETAILS), SAME_DETAILS), ] for (obj, check_details) in cases: self._test_class(obj, check_details)
def get_interface_info(self, interface_name): mac_addr = netutils.get_mac_addr(interface_name) if mac_addr is None: raise errors.IncompatibleHardwareMethodError() return NetworkInterface( interface_name, mac_addr, ipv4_address=self.get_ipv4_addr(interface_name), has_carrier=netutils.interface_has_carrier(interface_name), vendor=_get_device_info(interface_name, 'net', 'vendor'), product=_get_device_info(interface_name, 'net', 'device'), biosdevname=self.get_bios_given_nic_name(interface_name))
def erase_block_device(self, node, block_device): # Check if the block device is virtual media and skip the device. if self._is_virtual_media_device(block_device): LOG.info("Skipping the erase of virtual media device %s", block_device.name) return if self._ata_erase(block_device): return if self._shred_block_device(node, block_device): return msg = ( 'Unable to erase block device {0}: device is unsupported.').format( block_device.name) LOG.error(msg) raise errors.IncompatibleHardwareMethodError(msg)
def get_interface_info(self, interface_name): raise errors.IncompatibleHardwareMethodError()
def get_boot_info(self): raise errors.IncompatibleHardwareMethodError()
def get_bmc_address(self): raise errors.IncompatibleHardwareMethodError()