On Thu, 2017-12-07 at 20:42 +0000, Radostin Stoyanov wrote: > The `skopeo copy` command has changed it's behaviour to keep only a files for > single container image per directory. To get around this and keep cache of > downloaded images is used temporary destination directory for 'skopeo copy' > and image files are then moved in the cache folder. > --- > src/virtBootstrap/sources/docker_source.py | 16 +++++++++++++--- > src/virtBootstrap/utils.py | 14 ++++++++++++++ > 2 files changed, 27 insertions(+), 3 deletions(-) > > diff --git a/src/virtBootstrap/sources/docker_source.py b/src/virtBootstrap/sources/docker_source.py > index a73fa64..ec1a812 100644 > --- a/src/virtBootstrap/sources/docker_source.py > +++ b/src/virtBootstrap/sources/docker_source.py > @@ -137,10 +137,16 @@ class DockerSource(object): > """ > Download image layers using "skopeo copy". > """ > + > + if self.no_cache: > + dest_dir = self.images_dir > + else: > + dest_dir = utils.get_image_dir(no_cache=True) > + > # Note: we don't want to expose --src-cert-dir to users as > # they should place the certificates in the system > # folders for broader enablement > - skopeo_copy = ["skopeo", "copy", self.url, "dir:" + self.images_dir] > + skopeo_copy = ["skopeo", "copy", self.url, "dir:" + dest_dir] > > if self.insecure: > skopeo_copy.append('--src-tls-verify=false') > @@ -150,8 +156,12 @@ class DockerSource(object): > self.progress("Downloading container image", value=0, logger=logger) > # Run "skopeo copy" command > self.read_skopeo_progress(skopeo_copy) > - # Remove the manifest file as it is not needed > - os.remove(os.path.join(self.images_dir, "manifest.json")) > + > + if not self.no_cache: > + os.remove(os.path.join(dest_dir, "manifest.json")) > + os.remove(os.path.join(dest_dir, "version")) Do we really need to remove those file? after all they don't harm if they stay in the cache, right? > + utils.copytree(dest_dir, self.images_dir) > + shutil.rmtree(dest_dir) > > def parse_output(self, proc): > """ > diff --git a/src/virtBootstrap/utils.py b/src/virtBootstrap/utils.py > index 20a59d2..ec6a96e 100644 > --- a/src/virtBootstrap/utils.py > +++ b/src/virtBootstrap/utils.py > @@ -32,6 +32,7 @@ import subprocess > import sys > import tempfile > import logging > +import shutil > > import passlib.hosts > > @@ -355,6 +356,19 @@ def get_mime_type(path): > return output.read().decode('utf-8').split()[1] > > > +def copytree(src, dst, symlinks=False, ignore=None): > + """ > + Copy an entire directory of files into an existing directory. > + """ > + for item in os.listdir(src): > + src_item = os.path.join(src, item) > + dst_item = os.path.join(dst, item) > + if os.path.isdir(src_item): > + shutil.copytree(src_item, dst_item, symlinks, ignore) > + else: > + shutil.copy2(src_item, dst_item) > + > + > def get_image_dir(no_cache=False): > """ > Get the directory where image layers are stored. ACK -- Cedric _______________________________________________ virt-tools-list mailing list virt-tools-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/virt-tools-list