def do_copyimage(self): LOG.debug('--- Copying images (do_copyimage) ---') for image in self.driver.image_scheme.images: LOG.debug('Processing image: %s' % image.uri) processing = au.Chain() LOG.debug('Appending uri processor: %s' % image.uri) processing.append(image.uri) if image.uri.startswith('http://'): LOG.debug('Appending HTTP processor') processing.append(au.HttpUrl) elif image.uri.startswith('file://'): LOG.debug('Appending FILE processor') processing.append(au.LocalFile) if image.container == 'gzip': LOG.debug('Appending GZIP processor') processing.append(au.GunzipStream) LOG.debug('Appending TARGET processor: %s' % image.target_device) error = None if not os.path.exists(image.target_device): error = "TARGET processor '{0}' does not exist." elif not hw.is_block_device(image.target_device): error = "TARGET processor '{0}' is not a block device." if error: error = error.format(image.target_device) LOG.error(error) raise errors.WrongDeviceError(error) processing.append(image.target_device) LOG.debug('Launching image processing chain') processing.process() if image.size and image.md5: LOG.debug('Trying to compare image checksum') actual_md5 = utils.calculate_md5(image.target_device, image.size) if actual_md5 == image.md5: LOG.debug('Checksum matches successfully: md5=%s' % actual_md5) else: raise errors.ImageChecksumMismatchError( 'Actual checksum %s mismatches with expected %s for ' 'file %s' % (actual_md5, image.md5, image.target_device)) else: LOG.debug('Skipping image checksum comparing. ' 'Ether size or hash have been missed') # TODO(agordeev): separate to another action? LOG.debug('Extending image file systems') if image.format in ('ext2', 'ext3', 'ext4', 'xfs'): LOG.debug('Extending %s %s' % (image.format, image.target_device)) fu.extend_fs(image.format, image.target_device) self.move_files_to_their_places()
def do_copyimage(self): LOG.debug('--- Copying images (do_copyimage) ---') for image in self.driver.image_scheme.images: LOG.debug('Processing image: %s' % image.uri) processing = au.Chain() LOG.debug('Appending uri processor: %s' % image.uri) processing.append(image.uri) if image.uri.startswith('http://'): LOG.debug('Appending HTTP processor') processing.append(au.HttpUrl) elif image.uri.startswith('file://'): LOG.debug('Appending FILE processor') processing.append(au.LocalFile) if image.container == 'gzip': LOG.debug('Appending GZIP processor') processing.append(au.GunzipStream) LOG.debug('Appending TARGET processor: %s' % image.target_device) error = None if not os.path.exists(image.target_device): error = "TARGET processor '{0}' does not exist." elif not hw.is_block_device(image.target_device): error = "TARGET processor '{0}' is not a block device." if error: error = error.format(image.target_device) LOG.error(error) raise errors.WrongDeviceError(error) processing.append(image.target_device) LOG.debug('Launching image processing chain') processing.process() if image.size and image.md5: LOG.debug('Trying to compare image checksum') actual_md5 = utils.calculate_md5(image.target_device, image.size) if actual_md5 == image.md5: LOG.debug('Checksum matches successfully: md5=%s' % actual_md5) else: raise errors.ImageChecksumMismatchError( 'Actual checksum %s mismatches with expected %s for ' 'file %s' % (actual_md5, image.md5, image.target_device)) else: LOG.debug('Skipping image checksum comparing. ' 'Ether size or hash have been missed') # TODO(agordeev): separate to another action? LOG.debug('Extending image file systems') if image.format in ('ext2', 'ext3', 'ext4', 'xfs'): LOG.debug('Extending %s %s' % (image.format, image.target_device)) fu.extend_fs(image.format, image.target_device)
def test_is_block_device(self, mock_isblk, mock_os_stat): filepath = mock.sentinel hu.is_block_device(filepath) mock_os_stat.assert_called_once_with(filepath) self.assertTrue(mock_isblk.called)