[virt-tools-list] [virt-bootstrap] [PATCH 3/4] docker-source: Support blobs without .tar ext
Cedric Bosdonnat
cbosdonnat at suse.com
Tue May 15 07:24:05 UTC 2018
On Sat, 2018-04-28 at 23:21 +0100, Radostin Stoyanov wrote:
> Since skopeo v0.1.29 [1] blobs are saved without the .tar extension.
> This commit changes the docker-source module to handle both cases (with
> or without .tar extension)
>
> [1] commit: projectatomic/skopeo at 43acc74
> Fix skopeo tests with changes to dir transport
>
> The dir transport has been changed to save the blobs without the .tar extension
> Fixes the skopeo tests failing due to this change
>
> Signed-off-by: Radostin Stoyanov <rstoyanov1 at gmail.com>
> ---
> src/virtBootstrap/sources/docker_source.py | 21 +++++++++++++++++++--
> tests/docker_source.py | 6 +++---
> 2 files changed, 22 insertions(+), 5 deletions(-)
>
> diff --git a/src/virtBootstrap/sources/docker_source.py b/src/virtBootstrap/sources/docker_source.py
> index 715e560..5b6378f 100644
> --- a/src/virtBootstrap/sources/docker_source.py
> +++ b/src/virtBootstrap/sources/docker_source.py
> @@ -107,7 +107,7 @@ class DockerSource(object):
> self.checksums.append([sum_type, layer_sum]) # Store checksums
>
> # Layers are tar files with hashsum used as name
> - file_path = os.path.join(self.images_dir, layer_sum + '.tar')
> + file_path = os.path.join(self.images_dir, layer_sum)
> # Store 'file path' and set placeholder for 'size'
> self.layers.append([file_path, None])
>
> @@ -158,6 +158,17 @@ class DockerSource(object):
> utils.copytree(dest_dir, self.images_dir)
> shutil.rmtree(dest_dir)
>
> + # Old versions of skopeo use '.tar' extension to blobs.
> + # Make sure we use the correct file name.
> + for i in range(len(self.layers)):
> + path = self.layers[i][0]
> + if not os.path.exists(path):
> + if os.path.exists(path + '.tar'):
> + self.layers[i][0] += '.tar'
> + else:
> + raise ValueError('Blob %s does not exist.' % path)
> +
> +
> def parse_output(self, proc):
> """
> Read stdout from skopeo's process asynchconosly.
> @@ -258,8 +269,14 @@ class DockerSource(object):
> sum_type, sum_expected = checksum
>
> logger.debug("Checking layer: %s", path)
> - if not (os.path.exists(path)
> + if (os.path.exists(path)
> and utils.checksum(path, sum_type, sum_expected)):
> + continue
> + if (not path.endswith('.tar')
> + and os.path.exists(path + '.tar')
> + and utils.checksum(path + '.tar', sum_type, sum_expected)):
> + self.layers[index][0] += '.tar'
> + else:
> return False
> return True
>
> diff --git a/tests/docker_source.py b/tests/docker_source.py
> index 0521322..585b9d2 100644
> --- a/tests/docker_source.py
> +++ b/tests/docker_source.py
> @@ -368,9 +368,9 @@ class TestDockerSource(unittest.TestCase):
> }
>
> expected_result = [
> - ['/images_path/a7050fc1.tar', None],
> - ['/images_path/c6ff40b6.tar', None],
> - ['/images_path/75c416ea.tar', None]
> + ['/images_path/a7050fc1', None],
> + ['/images_path/c6ff40b6', None],
> + ['/images_path/75c416ea', None]
> ]
>
> with mock.patch('os.path.getsize') as m_getsize:
ACK
--
Cedric
More information about the virt-tools-list
mailing list