cli: Pass options in {Add,Remove}Tags
[ganeti-local] / scripts / gnt-backup
index b7e49d1..877933a 100755 (executable)
@@ -1,7 +1,7 @@
 #!/usr/bin/python
 #
 
-# Copyright (C) 2006, 2007 Google Inc.
+# Copyright (C) 2006, 2007, 2010 Google Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -31,6 +31,7 @@ import sys
 from ganeti.cli import *
 from ganeti import opcodes
 from ganeti import constants
+from ganeti import errors
 
 
 _VALUE_TRUE = "true"
@@ -73,6 +74,10 @@ def ExportInstance(opts, args):
   """
   ignore_remove_failures = opts.ignore_remove_failures
 
+  if not opts.node:
+    raise errors.OpPrereqError("Target node must be specified",
+                               errors.ECODE_INVAL)
+
   op = opcodes.OpExportInstance(instance_name=args[0],
                                 target_node=opts.node,
                                 shutdown=opts.shutdown,
@@ -80,26 +85,8 @@ def ExportInstance(opts, args):
                                 remove_instance=opts.remove_instance,
                                 ignore_remove_failures=ignore_remove_failures)
 
-  fin_resu, dlist = SubmitOpCode(op, opts=opts)
-  if not isinstance(dlist, list):
-    ToStderr("Cannot parse execution results")
-    return 1
-  # TODO: handle diskless instances
-  if dlist.count(False) == 0:
-    # all OK
-    rcode = 0
-  elif dlist.count(True) == 0:
-    ToStderr("Error: No disks were backed up successfully."
-             " The export doesn't have any valid data,"
-             " it is recommended to retry the operation.")
-    rcode = 1
-  else:
-    ToStderr("Partial export failure: %d disks backed up, %d disks failed.",
-             dlist.count(True), dlist.count(False))
-    rcode = 2
-  if not fin_resu:
-    rcode = 1
-  return rcode
+  SubmitOpCode(op, opts=opts)
+  return 0
 
 
 def ImportInstance(opts, args):
@@ -149,6 +136,7 @@ import_opts = [
   SRC_DIR_OPT,
   SRC_NODE_OPT,
   SUBMIT_OPT,
+  DRY_RUN_OPT,
   ]
 
 
@@ -160,7 +148,7 @@ commands = {
   'export': (
     ExportInstance, ARGS_ONE_INSTANCE,
     [FORCE_OPT, SINGLE_NODE_OPT, NOSHUTDOWN_OPT, SHUTDOWN_TIMEOUT_OPT,
-     REMOVE_INSTANCE_OPT, IGNORE_REMOVE_FAILURES_OPT],
+     REMOVE_INSTANCE_OPT, IGNORE_REMOVE_FAILURES_OPT, DRY_RUN_OPT],
     "-n <target_node> [opts...] <name>",
     "Exports an instance to an image"),
   'import': (
@@ -168,7 +156,7 @@ commands = {
     "[...] -t disk-type -n node[:secondary-node] <name>",
     "Imports an instance from an exported image"),
   'remove': (
-    RemoveExport, [ArgUnknown(min=1, max=1)], [],
+    RemoveExport, [ArgUnknown(min=1, max=1)], [DRY_RUN_OPT],
     "<name>", "Remove exports of named instance from the filesystem."),
   }