diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/virtBootstrap/sources/docker_source.py | 12 | ||||
-rw-r--r-- | src/virtBootstrap/sources/file_source.py | 3 | ||||
-rw-r--r-- | src/virtBootstrap/utils.py | 19 |
3 files changed, 21 insertions, 13 deletions
diff --git a/src/virtBootstrap/sources/docker_source.py b/src/virtBootstrap/sources/docker_source.py index 54d8903..246356a 100644 --- a/src/virtBootstrap/sources/docker_source.py +++ b/src/virtBootstrap/sources/docker_source.py @@ -65,6 +65,7 @@ class DockerSource(object): self.images_dir = utils.get_image_dir(self.no_cache) self.manifest = None self.layers = [] + self.checksums = [] if self.username and not self.password: self.password = getpass.getpass() @@ -94,9 +95,13 @@ class DockerSource(object): layer_digest = layer[digest_field] layer_size = layer['size'] if 'size' in layer else None + # Store checksums of layers sum_type, layer_sum = layer_digest.split(':') + self.checksums.append([sum_type, layer_sum]) + + # Store file path and size of each layer file_path = os.path.join(self.images_dir, layer_sum + '.tar') - self.layers.append([sum_type, layer_sum, file_path, layer_size]) + self.layers.append([file_path, layer_size]) def gen_valid_uri(self, uri): """ @@ -230,7 +235,10 @@ class DockerSource(object): and have valid hash sum. """ self.progress("Checking cached layers", value=0, logger=logger) - for sum_type, sum_expected, path, _ignore in self.layers: + for index, checksum in enumerate(self.checksums): + path = self.layers[index][0] + sum_type, sum_expected = checksum + logger.debug("Checking layer: %s", path) if not (os.path.exists(path) and utils.checksum(path, sum_type, sum_expected)): diff --git a/src/virtBootstrap/sources/file_source.py b/src/virtBootstrap/sources/file_source.py index c02f735..412db8a 100644 --- a/src/virtBootstrap/sources/file_source.py +++ b/src/virtBootstrap/sources/file_source.py @@ -57,10 +57,11 @@ class FileSource(object): if not os.path.isfile(self.path): raise Exception('Invalid file source "%s"' % self.path) + layer = [[self.path, os.path.getsize(self.path)]] if self.output_format == 'dir': self.progress("Extracting files into destination directory", value=0, logger=logger) - utils.safe_untar(self.path, dest) + utils.untar_layers(layer, dest, self.progress) elif self.output_format == 'qcow2': # Remove the old path diff --git a/src/virtBootstrap/utils.py b/src/virtBootstrap/utils.py index 9d477db..a04627e 100644 --- a/src/virtBootstrap/utils.py +++ b/src/virtBootstrap/utils.py @@ -146,17 +146,16 @@ def size_to_bytes(number, fmt): else False) -def log_layer_extract(layer, current, total, progress): +def log_layer_extract(tar_file, tar_size, current, total, progress): """ Create log message on layer extract. """ - sum_type, sum_value, layer_file, layer_size = layer msg = 'Extracting layer (%s/%s)' % (current, total) - if layer_size: - msg += " with size: %s" % bytes_to_size(layer_size) + if tar_size: + msg += " with size: %s" % bytes_to_size(tar_size) progress(msg, logger=logger) - logger.debug('Untar layer: (%s:%s) %s', sum_type, sum_value, layer_file) + logger.debug('Untar layer: %s', tar_file) def untar_layers(layers_list, dest_dir, progress): @@ -165,11 +164,11 @@ def untar_layers(layers_list, dest_dir, progress): """ nlayers = len(layers_list) for index, layer in enumerate(layers_list): - log_layer_extract(layer, index + 1, nlayers, progress) - layer_file = layer[2] + tar_file, tar_size = layer + log_layer_extract(tar_file, tar_size, index + 1, nlayers, progress) # Extract layer tarball into destination directory - safe_untar(layer_file, dest_dir) + safe_untar(tar_file, dest_dir) # Update progress value progress(value=(float(index + 1) / nlayers * 50) + 50) @@ -246,8 +245,8 @@ def extract_layers_in_qcow2(layers_list, dest_dir, progress): nlayers = len(layers_list) for index, layer in enumerate(layers_list): - log_layer_extract(layer, index + 1, nlayers, progress) - tar_file = layer[2] + tar_file, tar_size = layer + log_layer_extract(tar_file, tar_size, index + 1, nlayers, progress) # Name format for the qcow2 image qcow2_layer_file = "{}/layer-{}.qcow2".format(dest_dir, index) |