X-Git-Url: https://code.grnet.gr/git/ganeti-local/blobdiff_plain/e588764dc9d0affab8f459bb0b8983e249e9d2a9..af1a81d191543ed692184d1185363de04b069d9b:/scripts/gnt-backup diff --git a/scripts/gnt-backup b/scripts/gnt-backup index e037035..877933a 100755 --- a/scripts/gnt-backup +++ b/scripts/gnt-backup @@ -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" @@ -71,31 +72,22 @@ def ExportInstance(opts, args): @return: the desired exit code """ + 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, - shutdown_timeout=opts.shutdown_timeout) - - 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 + shutdown_timeout=opts.shutdown_timeout, + remove_instance=opts.remove_instance, + ignore_remove_failures=ignore_remove_failures) + + SubmitOpCode(op, opts=opts) + return 0 + def ImportInstance(opts, args): """Add an instance to the cluster. @@ -139,12 +131,15 @@ import_opts = [ NONAMECHECK_OPT, NONICS_OPT, NWSYNC_OPT, + OSPARAMS_OPT, OS_SIZE_OPT, SRC_DIR_OPT, SRC_NODE_OPT, SUBMIT_OPT, + DRY_RUN_OPT, ] + commands = { 'list': ( PrintExportList, ARGS_NONE, @@ -152,7 +147,8 @@ commands = { "", "Lists instance exports available in the ganeti cluster"), 'export': ( ExportInstance, ARGS_ONE_INSTANCE, - [FORCE_OPT, SINGLE_NODE_OPT, NOSHUTDOWN_OPT, SHUTDOWN_TIMEOUT_OPT], + [FORCE_OPT, SINGLE_NODE_OPT, NOSHUTDOWN_OPT, SHUTDOWN_TIMEOUT_OPT, + REMOVE_INSTANCE_OPT, IGNORE_REMOVE_FAILURES_OPT, DRY_RUN_OPT], "-n [opts...] ", "Exports an instance to an image"), 'import': ( @@ -160,7 +156,7 @@ commands = { "[...] -t disk-type -n node[:secondary-node] ", "Imports an instance from an exported image"), 'remove': ( - RemoveExport, [ArgUnknown(min=1, max=1)], [], + RemoveExport, [ArgUnknown(min=1, max=1)], [DRY_RUN_OPT], "", "Remove exports of named instance from the filesystem."), }