X-Git-Url: https://code.grnet.gr/git/ganeti-local/blobdiff_plain/3ccb3a647a5bd7ae9c04d421b3070d3cc15d2f4c..86aa9ba32f810956948ff4e578c828351998a82c:/lib/client/gnt_backup.py diff --git a/lib/client/gnt_backup.py b/lib/client/gnt_backup.py index 10cfabc..edc8b44 100644 --- a/lib/client/gnt_backup.py +++ b/lib/client/gnt_backup.py @@ -30,6 +30,10 @@ from ganeti.cli import * from ganeti import opcodes from ganeti import constants from ganeti import errors +from ganeti import qlang + + +_LIST_DEF_FIELDS = ["node", "export"] def PrintExportList(opts, args): @@ -42,18 +46,27 @@ def PrintExportList(opts, args): @return: the desired exit code """ - exports = GetClient().QueryExports(opts.nodes, False) - retcode = 0 - for node in exports: - ToStdout("Node: %s", node) - ToStdout("Exports:") - if isinstance(exports[node], list): - for instance_name in exports[node]: - ToStdout("\t%s", instance_name) - else: - ToStdout(" Could not get exports list") - retcode = 1 - return retcode + selected_fields = ParseFields(opts.output, _LIST_DEF_FIELDS) + + qfilter = qlang.MakeSimpleFilter("node", opts.nodes) + + return GenericList(constants.QR_EXPORT, selected_fields, None, opts.units, + opts.separator, not opts.no_headers, + verbose=opts.verbose, qfilter=qfilter) + + +def ListExportFields(opts, args): + """List export fields. + + @param opts: the command line options selected by the user + @type args: list + @param args: fields to list, or empty for all + @rtype: int + @return: the desired exit code + + """ + return GenericListFields(constants.QR_EXPORT, args, opts.separator, + not opts.no_headers) def ExportInstance(opts, args): @@ -80,7 +93,7 @@ def ExportInstance(opts, args): remove_instance=opts.remove_instance, ignore_remove_failures=ignore_remove_failures) - SubmitOpCode(op, opts=opts) + SubmitOrSend(op, opts) return 0 @@ -106,7 +119,7 @@ def RemoveExport(opts, args): """ op = opcodes.OpBackupRemove(instance_name=args[0]) - SubmitOpCode(op, opts=opts) + SubmitOrSend(op, opts) return 0 @@ -122,13 +135,18 @@ import_opts = [ commands = { "list": ( PrintExportList, ARGS_NONE, - [NODE_LIST_OPT], + [NODE_LIST_OPT, NOHDR_OPT, SEP_OPT, USEUNITS_OPT, FIELDS_OPT, VERBOSE_OPT], "", "Lists instance exports available in the ganeti cluster"), + "list-fields": ( + ListExportFields, [ArgUnknown()], + [NOHDR_OPT, SEP_OPT], + "[fields...]", + "Lists all available fields for exports"), "export": ( ExportInstance, ARGS_ONE_INSTANCE, [FORCE_OPT, SINGLE_NODE_OPT, NOSHUTDOWN_OPT, SHUTDOWN_TIMEOUT_OPT, REMOVE_INSTANCE_OPT, IGNORE_REMOVE_FAILURES_OPT, DRY_RUN_OPT, - PRIORITY_OPT], + PRIORITY_OPT, SUBMIT_OPT], "-n [opts...] ", "Exports an instance to an image"), "import": ( @@ -136,7 +154,8 @@ commands = { "[...] -t disk-type -n node[:secondary-node] ", "Imports an instance from an exported image"), "remove": ( - RemoveExport, [ArgUnknown(min=1, max=1)], [DRY_RUN_OPT, PRIORITY_OPT], + RemoveExport, [ArgUnknown(min=1, max=1)], + [DRY_RUN_OPT, PRIORITY_OPT, SUBMIT_OPT], "", "Remove exports of named instance from the filesystem."), }