[libvirt] [PATCH sandbox v5 08/20] Image: Add delete function
Cedric Bosdonnat
cbosdonnat at suse.com
Wed Sep 9 11:57:18 UTC 2015
On Tue, 2015-09-08 at 17:29 +0100, Daniel P. Berrange wrote:
> From: Eren Yagdiran <erenyagdiran at gmail.com>
>
> Refactoring delete function from virt-sandbox-image to DockerSource. Delete function
> can delete templates by name.
>
> Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
> ---
> libvirt-sandbox/image/cli.py | 58 ++++-----------------------
> libvirt-sandbox/image/sources/DockerSource.py | 50 +++++++++++++++++++++++
> libvirt-sandbox/image/sources/Source.py | 10 +++++
> 3 files changed, 67 insertions(+), 51 deletions(-)
>
> diff --git a/libvirt-sandbox/image/cli.py b/libvirt-sandbox/image/cli.py
> index f3c0ab7..5490c4b 100755
> --- a/libvirt-sandbox/image/cli.py
> +++ b/libvirt-sandbox/image/cli.py
> @@ -69,55 +69,6 @@ def debug(msg):
> def info(msg):
> sys.stdout.write(msg)
>
> -def delete_template(name, destdir):
> - imageusage = {}
> - imageparent = {}
> - imagenames = {}
> - imagedirs = os.listdir(destdir)
> - for imagetagid in imagedirs:
> - indexfile = destdir + "/" + imagetagid + "/index.json"
> - if os.path.exists(indexfile):
> - with open(indexfile, "r") as f:
> - index = json.load(f)
> - imagenames[index["name"]] = imagetagid
> - jsonfile = destdir + "/" + imagetagid + "/template.json"
> - if os.path.exists(jsonfile):
> - with open(jsonfile, "r") as f:
> - template = json.load(f)
> -
> - parent = template.get("parent", None)
> - if parent:
> - if parent not in imageusage:
> - imageusage[parent] = []
> - imageusage[parent].append(imagetagid)
> - imageparent[imagetagid] = parent
> -
> - if not name in imagenames:
> - raise ValueError(["Image %s does not exist locally" % name])
> -
> - imagetagid = imagenames[name]
> - while imagetagid != None:
> - debug("Remove %s\n" % imagetagid)
> - parent = imageparent.get(imagetagid, None)
> -
> - indexfile = destdir + "/" + imagetagid + "/index.json"
> - if os.path.exists(indexfile):
> - os.remove(indexfile)
> - jsonfile = destdir + "/" + imagetagid + "/template.json"
> - if os.path.exists(jsonfile):
> - os.remove(jsonfile)
> - datafile = destdir + "/" + imagetagid + "/template.tar.gz"
> - if os.path.exists(datafile):
> - os.remove(datafile)
> - imagedir = destdir + "/" + imagetagid
> - os.rmdir(imagedir)
> -
> - if parent:
> - if len(imageusage[parent]) != 1:
> - debug("Parent %s is shared\n" % parent)
> - parent = None
> - imagetagid = parent
> -
> def download(args):
> try:
> dynamic_source_loader(args.source).download_template(templatename=args.template,
> @@ -131,8 +82,11 @@ def download(args):
> print "Download Error %s" % str(e)
>
> def delete(args):
> - info("Deleting %s from %s\n" % (args.template, default_template_dir))
> - delete_template(args.template, default_template_dir)
> + try:
> + dynamic_source_loader(args.source).delete_template(templatename=args.template,
> + templatedir=args.template_dir)
> + except Exception,e:
> + print "Delete Error %s", str(e)
>
> def create(args):
> try:
> @@ -183,6 +137,8 @@ def gen_delete_args(subparser):
> parser = subparser.add_parser("delete",
> help=_("Delete template data"))
> requires_template(parser)
> + requires_source(parser)
> + requires_template_dir(parser)
> parser.set_defaults(func=delete)
>
> def gen_create_args(subparser):
> diff --git a/libvirt-sandbox/image/sources/DockerSource.py b/libvirt-sandbox/image/sources/DockerSource.py
> index c1c8a7d..ab18b52 100644
> --- a/libvirt-sandbox/image/sources/DockerSource.py
> +++ b/libvirt-sandbox/image/sources/DockerSource.py
> @@ -295,5 +295,55 @@ class DockerSource(Source):
> cmd = cmd + params
> subprocess.call(cmd)
>
> + def delete_template(self, templatename, templatedir):
> + imageusage = {}
> + imageparent = {}
> + imagenames = {}
> + imagedirs = os.listdir(templatedir)
> + for imagetagid in imagedirs:
> + indexfile = templatedir + "/" + imagetagid + "/index.json"
> + if os.path.exists(indexfile):
> + with open(indexfile,"r") as f:
> + index = json.load(f)
> + imagenames[index["name"]] = imagetagid
> + jsonfile = templatedir + "/" + imagetagid + "/template.json"
> + if os.path.exists(jsonfile):
> + with open(jsonfile,"r") as f:
> + template = json.load(f)
> +
> + parent = template.get("parent",None)
> + if parent:
> + if parent not in imageusage:
> + imageusage[parent] = []
> + imageusage[parent].append(imagetagid)
> + imageparent[imagetagid] = parent
> +
> +
> + if not templatename in imagenames:
> + raise ValueError(["Image %s does not exist locally" %templatename])
> +
> + imagetagid = imagenames[templatename]
> + while imagetagid != None:
> + debug("Remove %s\n" % imagetagid)
> + parent = imageparent.get(imagetagid,None)
> +
> + indexfile = templatedir + "/" + imagetagid + "/index.json"
> + if os.path.exists(indexfile):
> + os.remove(indexfile)
> + jsonfile = templatedir + "/" + imagetagid + "/template.json"
> + if os.path.exists(jsonfile):
> + os.remove(jsonfile)
> + datafile = templatedir + "/" + imagetagid + "/template.tar.gz"
> + if os.path.exists(datafile):
> + os.remove(datafile)
> + imagedir = templatedir + "/" + imagetagid
> + shutil.rmtree(imagedir)
> +
> + if parent:
> + if len(imageusage[parent]) != 1:
> + debug("Parent %s is shared\n" % parent)
> + parent = None
> + imagetagid = parent
> +
> def debug(msg):
> sys.stderr.write(msg)
> diff --git a/libvirt-sandbox/image/sources/Source.py b/libvirt-sandbox/image/sources/Source.py
> index 436eef6..4aea5c9 100644
> --- a/libvirt-sandbox/image/sources/Source.py
> +++ b/libvirt-sandbox/image/sources/Source.py
> @@ -61,3 +61,13 @@ class Source():
> inside a sandbox using the requested libvirt connection URI.
> """
> pass
> +
> + @abstractmethod
> + def delete_template(self, templatename, templatedir):
> + """
> + :param templatename: name of the template image to delete
> + :param templatedir: local directory path from which to delete template
> +
> + Delete all local files associated with the template
> + """
> + pass
ACK
--
Cedric
More information about the libvir-list
mailing list