cros_vm: clean up normal error output

The vm module throws VMError for "normal" errors that shows users
the problem (e.g. missing file).  But cros_vm code doesn't catch
those, so it turns into a raw traceback.  Clean up the code so we
log it properly and then exit non-zero.

BUG=None
TEST=CQ passes

Change-Id: I52a7bbf8995a0efc29d61862bcaa62111d3e4255
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/3586977
Tested-by: Mike Frysinger <vapier@chromium.org>
Auto-Submit: Mike Frysinger <vapier@chromium.org>
Reviewed-by: Lizzy Presland <zland@google.com>
Commit-Queue: Lizzy Presland <zland@google.com>
diff --git a/scripts/cros_vm.py b/scripts/cros_vm.py
index 8cd0aef..9e7c905 100644
--- a/scripts/cros_vm.py
+++ b/scripts/cros_vm.py
@@ -4,6 +4,8 @@
 
 """CLI entry point into lib/vm.py; used for VM management."""
 
+import logging
+
 from chromite.lib import vm
 
 
@@ -11,4 +13,13 @@
   opts = vm.VM.GetParser().parse_args(argv)
   opts.Freeze()
 
-  vm.VM(opts).Run()
+  try:
+    vm.VM(opts).Run()
+    return 0
+  except vm.VMError as e:
+    logging.error('%s', e)
+    if opts.debug:
+      raise
+
+    logging.error('(Re-run with --debug for more details.)')
+    return 1