Re: [sandbox v2 5/5] virt-sandbox-image: add a virt-builder source

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Oct 05, 2015 at 04:37:59PM +0200, Cédric Bosdonnat wrote:
> Allow virt-sandbox-image to pull templates from virt-builder and run
> sandboxes on top of them.
> ---
>  libvirt-sandbox.spec.in                            |  1 +
>  libvirt-sandbox/image/cli.py                       |  1 +
>  libvirt-sandbox/image/sources/Makefile.am          |  1 +
>  libvirt-sandbox/image/sources/VirtBuilderSource.py | 84 ++++++++++++++++++++++
>  libvirt-sandbox/image/template.py                  |  2 +
>  5 files changed, 89 insertions(+)
>  create mode 100644 libvirt-sandbox/image/sources/VirtBuilderSource.py

> +class VirtBuilderSource(Source):
> +
> +    def _get_template_name(self, template):
> +        # We shouldn't have '/' in the names, but let's make sure
> +        # nobody can try to alter the folders structure later.
> +        return template.path[1:].replace('/', '_')
> +
> +    def has_template(self, template, templatedir):
> +        imagepath = "%s/%s.qcow2" % (templatedir, template.path)
> +        return os.path.exists(imagepath)
> +
> +    def create_template(self, template, templatedir, connect=None):
> +        if not os.path.exists(templatedir):
> +            os.makedirs(templatedir)
> +
> +        # Get the image using virt-builder
> +        templatename = self._get_template_name(template)
> +        imagepath_original = "%s/%s-original.qcow2" % (templatedir, templatename)
> +        imagepath = "%s/%s.qcow2" % (templatedir, templatename)
> +        cmd = ["virt-builder", templatename,
> +               "-o", imagepath_original, "--format", "qcow2"]
> +        subprocess.call(cmd)
> +
> +        # We need to convert this image into a single partition one.
> +        tarfile = "%s/%s.tar" % (templatedir, templatename)
> +        cmd = ["virt-tar-out", "-a", imagepath_original, "/", tarfile]
> +        subprocess.call(cmd)
> +
> +        os.unlink(imagepath_original)
> +
> +        cmd = ["qemu-img", "create", "-q", "-f", "qcow2", imagepath, "10G"]
> +        subprocess.call(cmd)
> +
> +        self.format_disk(imagepath, "qcow2", connect)
> +        self.extract_tarball(imagepath, "qcow2", tarfile, connect)
> +        os.unlink(tarfile)

We should probably wrap the method in a try/finally block, and put the
two os.unlink() calls in the finally block so we can guarantee we
clean up the intermediate files if an exception is raised.

Aside from that it looks fine. It is a shame virt-builder cannot produce
a partitionless image straight away for us :-(


Regards,
Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]