def _create_checksum_file(self, checksum, filename): compressed_blocks = None compress = Compress(self.source_filename) if compress.get_format(): compressed_blocks = self._block_list( os.path.getsize(self.source_filename) ) compress.uncompress(temporary=True) blocks = self._block_list( os.path.getsize(compress.uncompressed_filename) ) checksum = self._calculate_hash_hexdigest( hashlib.md5(), compress.uncompressed_filename ) else: blocks = self._block_list( os.path.getsize(self.source_filename) ) with open(filename, 'w') as checksum_file: if compressed_blocks: checksum_file.write( '%s %s %s %s %s\n' % ( checksum, blocks.blocks, blocks.blocksize, compressed_blocks.blocks, compressed_blocks.blocksize ) ) else: checksum_file.write( '%s %s %s\n' % ( checksum, blocks.blocks, blocks.blocksize ) )
def sync_data(self): """ Synchronize data from the given base image to the target root directory. """ if not self.unknown_uri: compressor = Compress(self.image_file) if compressor.get_format(): compressor.uncompress(True) self.uncompressed_image = compressor.uncompressed_filename else: self.uncompressed_image = self.image_file image_uri = '{0}:{1}'.format( self.archive_transport, self.uncompressed_image ) else: log.warning('Bypassing base image URI to OCI tools') image_uri = self.unknown_uri oci = OCI.new() oci.import_container_image(image_uri) oci.unpack() oci.import_rootfs(self.root_dir) # A copy of the uncompressed image and its checksum are # kept inside the root_dir in order to ensure the later steps # i.e. system create are atomic and don't need any third # party archive. image_copy = Defaults.get_imported_root_image(self.root_dir) Path.create(os.path.dirname(image_copy)) oci.export_container_image( image_copy, 'oci-archive', Defaults.get_container_base_image_tag() ) self._make_checksum(image_copy)
def _create_checksum_file(self, checksum, filename): """ Creates the text file that contains the checksum :param str checksum: checksum to include into the file :param str filename: filename of the output file """ compressed_blocks = None compress = Compress(self.source_filename) if compress.get_format(): compressed_blocks = self._block_list( os.path.getsize(self.source_filename)) compress.uncompress(temporary=True) blocks = self._block_list( os.path.getsize(compress.uncompressed_filename)) checksum = self._calculate_hash_hexdigest( hashlib.md5(), compress.uncompressed_filename) else: blocks = self._block_list(os.path.getsize(self.source_filename)) with open(filename, encoding=self.ascii, mode='w') as checksum_file: if compressed_blocks: checksum_file.write( '%s %s %s %s %s\n' % (checksum, blocks.blocks, blocks.blocksize, compressed_blocks.blocks, compressed_blocks.blocksize)) else: checksum_file.write( '%s %s %s\n' % (checksum, blocks.blocks, blocks.blocksize))
def test_get_format_invalid_format(self, mock_run): mock_run.side_effect = ValueError("nothing") invalid = Compress("../data/gz_data.gz") invalid.supported_zipper = ["mock_zip"] with self._caplog.at_level(logging.DEBUG): assert invalid.get_format() is None mock_run.assert_called_once_with( ['mock_zip', '-l', '../data/gz_data.gz']) assert 'Error running "mock_zip -l ../data/gz_data.gz", got a' ' ValueError: nothing' in self._caplog.text
def test_get_format_invalid_format(self, mock_run, mock_log): mock_run.side_effect = ValueError("nothing") invalid = Compress("../data/gz_data.gz") invalid.supported_zipper = ["mock_zip"] assert invalid.get_format() is None mock_run.assert_called_once_with( ['mock_zip', '-l', '../data/gz_data.gz']) mock_log.assert_called_once_with( 'Error running "mock_zip -l ../data/gz_data.gz", got a' ' ValueError: nothing')
def extract_oci_image(self): """ Extract and converts to OCI the image from the provided image file to a temporary location to KIWI can work with it. """ if not self.unknown_uri: compressor = Compress(self.image_file) if compressor.get_format(): compressor.uncompress(True) self.uncompressed_image = compressor.uncompressed_filename else: self.uncompressed_image = self.image_file skopeo_uri = 'docker-archive:{0}'.format(self.uncompressed_image) else: log.warning('Bypassing base image URI to skopeo tool') skopeo_uri = self.unknown_uri Command.run([ 'skopeo', 'copy', skopeo_uri, 'oci:{0}:base_layer'.format(self.oci_layout_dir) ])
def _create_checksum_file(self, checksum, filename): compressed_blocks = None compress = Compress(self.source_filename) if compress.get_format(): compressed_blocks = self._block_list( os.path.getsize(self.source_filename)) compress.uncompress(temporary=True) blocks = self._block_list( os.path.getsize(compress.uncompressed_filename)) checksum = self._calculate_hash_hexdigest( hashlib.md5(), compress.uncompressed_filename) else: blocks = self._block_list(os.path.getsize(self.source_filename)) with open(filename, 'w') as checksum_file: if compressed_blocks: checksum_file.write( '%s %s %s %s %s\n' % (checksum, blocks.blocks, blocks.blocksize, compressed_blocks.blocks, compressed_blocks.blocksize)) else: checksum_file.write( '%s %s %s\n' % (checksum, blocks.blocks, blocks.blocksize))
def _create_checksum_file(self, checksum, filename): """ Creates the text file that contains the checksum :param str checksum: checksum to include into the file :param str filename: filename of the output file """ compressed_blocks = None compress = Compress(self.source_filename) if compress.get_format(): compressed_blocks = self._block_list( os.path.getsize(self.source_filename) ) compress.uncompress(temporary=True) blocks = self._block_list( os.path.getsize(compress.uncompressed_filename) ) checksum = self._calculate_hash_hexdigest( hashlib.md5(), compress.uncompressed_filename ) else: blocks = self._block_list( os.path.getsize(self.source_filename) ) with open(filename, 'w') as checksum_file: if compressed_blocks: checksum_file.write( '%s %s %s %s %s\n' % ( checksum, blocks.blocks, blocks.blocksize, compressed_blocks.blocks, compressed_blocks.blocksize ) ) else: checksum_file.write( '%s %s %s\n' % ( checksum, blocks.blocks, blocks.blocksize ) )
def test_get_format(self, mock_which): mock_which.return_value = 'ziptool' xz = Compress('../data/xz_data.xz') assert xz.get_format() == 'xz' gzip = Compress('../data/gz_data.gz') assert gzip.get_format() == 'gzip'
def test_get_format(self): xz = Compress('../data/xz_data.xz') assert xz.get_format() == 'xz' gzip = Compress('../data/gz_data.gz') assert gzip.get_format() == 'gzip'