[libvirt] [sandbox 10/11] virt-sandbox-image: fix exception catching

Cédric Bosdonnat cbosdonnat at suse.com
Wed Sep 23 07:53:40 UTC 2015


Catch the exception in the main to avoid problems when auto-calling
another function that fails. For example if run calls create and that
one fails, run would have ignored the error.
---
 libvirt-sandbox/image/cli.py | 156 ++++++++++++++++++++-----------------------
 1 file changed, 73 insertions(+), 83 deletions(-)

diff --git a/libvirt-sandbox/image/cli.py b/libvirt-sandbox/image/cli.py
index f4472d9..eb6bbb4 100755
--- a/libvirt-sandbox/image/cli.py
+++ b/libvirt-sandbox/image/cli.py
@@ -66,98 +66,85 @@ def info(msg):
     sys.stdout.write(msg)
 
 def download(args):
-    try:
-        tmpl = template.Template.from_uri(args.template)
-        source = tmpl.get_source_impl()
-        source.download_template(template=tmpl,
-                                 templatedir=args.template_dir)
-    except Exception,e:
-        print "Download Error %s" % str(e)
+    tmpl = template.Template.from_uri(args.template)
+    source = tmpl.get_source_impl()
+    source.download_template(template=tmpl,
+                             templatedir=args.template_dir)
 
 def delete(args):
-    try:
-        tmpl = template.Template.from_uri(args.template)
-        source = tmpl.get_source_impl()
-        source.delete_template(template=tmpl,
-                               templatedir=args.template_dir)
-    except Exception,e:
-        print "Delete Error %s" % str(e)
+    tmpl = template.Template.from_uri(args.template)
+    source = tmpl.get_source_impl()
+    source.delete_template(template=tmpl,
+                           templatedir=args.template_dir)
 
 def create(args):
-    try:
-        tmpl = template.Template.from_uri(args.template)
-        source = tmpl.get_source_impl()
+    tmpl = template.Template.from_uri(args.template)
+    source = tmpl.get_source_impl()
 
-        if not source.was_downloaded(tmpl, args.template_dir):
-            download(args)
+    if not source.was_downloaded(tmpl, args.template_dir):
+        download(args)
 
-        fmt = default_format
-        if "format" in vars(args):
-            fmt = args.format
+    fmt = default_format
+    if "format" in vars(args):
+        fmt = args.format
 
-        source.create_template(template=tmpl,
-                               templatedir=args.template_dir,
-                               connect=args.connect,
-                               format=fmt)
-    except Exception,e:
-        print "Create Error %s" % str(e)
+    source.create_template(template=tmpl,
+                           templatedir=args.template_dir,
+                           connect=args.connect,
+                           format=fmt)
 
 def run(args):
-    try:
-        if args.connect is not None:
-            check_connect(args.connect)
-        tmpl = template.Template.from_uri(args.template)
-        source = tmpl.get_source_impl()
-
-        # Create the template image if needed
-        if not source.has_template(tmpl, args.template_dir):
-            create(args)
-
-        name = args.name
-        if name is None:
-            randomid = ''.join(random.choice(string.lowercase) for i in range(10))
-            name = tmpl.path[1:] + ":" + randomid
-
-        diskfile = source.get_disk(template=tmpl,
-                                   templatedir=args.template_dir,
-                                   imagedir=args.image_dir,
-                                   sandboxname=name)
-
-        format = "qcow2"
-        commandToRun = source.get_command(tmpl, args.template_dir, args.args)
-        if len(commandToRun) == 0:
-            commandToRun = ["/bin/sh"]
-        cmd = ['virt-sandbox', '--name', name]
-        if args.connect is not None:
-            cmd.append("-c")
-            cmd.append(args.connect)
-        params = ['-m','host-image:/=%s,format=%s' %(diskfile,format)]
-
-        networkArgs = args.network
-        if networkArgs is not None:
-            params.append('-N')
-            params.append(networkArgs)
-
-        allEnvs = source.get_env(tmpl, args.template_dir)
-        envArgs = args.env
-        if envArgs is not None:
-            allEnvs = allEnvs + envArgs
-        for env in allEnvs:
-            envsplit = env.split("=")
-            envlen = len(envsplit)
-            if envlen == 2:
-                params.append("--env")
-                params.append(env)
-            else:
-                pass
-
-        cmd = cmd + params + ['--'] + commandToRun
-        subprocess.call(cmd)
-        os.unlink(diskfile)
-        source.post_run(tmpl, args.template_dir, name)
-
-    except Exception,e:
-        print "Run Error %s" % str(e)
+    if args.connect is not None:
+        check_connect(args.connect)
+    tmpl = template.Template.from_uri(args.template)
+    source = tmpl.get_source_impl()
+
+    # Create the template image if needed
+    if not source.has_template(tmpl, args.template_dir):
+        create(args)
+
+    name = args.name
+    if name is None:
+        randomid = ''.join(random.choice(string.lowercase) for i in range(10))
+        name = tmpl.path[1:] + ":" + randomid
+
+    diskfile = source.get_disk(template=tmpl,
+                               templatedir=args.template_dir,
+                               imagedir=args.image_dir,
+                               sandboxname=name)
+
+    format = "qcow2"
+    commandToRun = source.get_command(tmpl, args.template_dir, args.args)
+    if len(commandToRun) == 0:
+        commandToRun = ["/bin/sh"]
+    cmd = ['virt-sandbox', '--name', name]
+    if args.connect is not None:
+        cmd.append("-c")
+        cmd.append(args.connect)
+    params = ['-m','host-image:/=%s,format=%s' %(diskfile,format)]
+
+    networkArgs = args.network
+    if networkArgs is not None:
+        params.append('-N')
+        params.append(networkArgs)
+
+    allEnvs = source.get_env(tmpl, args.template_dir)
+    envArgs = args.env
+    if envArgs is not None:
+        allEnvs = allEnvs + envArgs
+    for env in allEnvs:
+        envsplit = env.split("=")
+        envlen = len(envsplit)
+        if envlen == 2:
+            params.append("--env")
+            params.append(env)
+        else:
+            pass
+
+    cmd = cmd + params + ['--'] + commandToRun
+    subprocess.call(cmd)
+    os.unlink(diskfile)
+    source.post_run(tmpl, args.template_dir, name)
 
 def requires_template(parser):
     parser.add_argument("template",
@@ -276,3 +263,6 @@ def main():
         sys.stderr.write("%s: %s\n" % (sys.argv[0], e))
         sys.stderr.flush()
         sys.exit(1)
+    except Exception, e:
+        print e.message
+        sys.exit(1)
-- 
2.1.4




More information about the libvir-list mailing list