4 # Copyright (C) 2006, 2007 Google Inc.
6 # This program is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 2 of the License, or
9 # (at your option) any later version.
11 # This program is distributed in the hope that it will be useful, but
12 # WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 # General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with this program; if not, write to the Free Software
18 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
25 from optparse import make_option
26 from cStringIO import StringIO
28 from ganeti.cli import *
29 from ganeti import opcodes
30 from ganeti import logger
31 from ganeti import constants
32 from ganeti import utils
33 from ganeti import errors
36 _LIST_DEF_FIELDS = ["id", "status"]
39 constants.JOB_STATUS_QUEUED: "queued",
40 constants.JOB_STATUS_RUNNING: "running",
41 constants.JOB_STATUS_CANCELED: "canceled",
42 constants.JOB_STATUS_SUCCESS: "success",
43 constants.JOB_STATUS_ERROR: "error",
46 def ListJobs(opts, args):
50 if opts.output is None:
51 selected_fields = _LIST_DEF_FIELDS
52 elif opts.output.startswith("+"):
53 selected_fields = _LIST_DEF_FIELDS + opts.output[1:].split(",")
55 selected_fields = opts.output.split(",")
57 output = GetClient().QueryJobs(None, selected_fields)
58 if not opts.no_headers:
59 # TODO: Implement more fields
64 "opresult": "OpCode_result",
65 "opstatus": "OpCode_status",
70 # we don't have yet unitfields here
74 # change raw values to nicer strings
76 for idx, field in enumerate(selected_fields):
79 if val in _USER_JOB_STATUS:
80 val = _USER_JOB_STATUS[val]
82 raise errors.ProgrammerError("Unknown job status code '%s'" % val)
86 data = GenerateTable(separator=opts.separator, headers=headers,
87 fields=selected_fields, unitfields=unitfields,
88 numfields=numfields, data=output)
96 'list': (ListJobs, ARGS_NONE,
97 [DEBUG_OPT, NOHDR_OPT, SEP_OPT, USEUNITS_OPT, FIELDS_OPT],
98 "", "List the jobs and their status. The available fields are"
99 " (see the man page for details): id, status, op_list,"
100 " op_status, op_result."
102 " list is (in order): %s." % ", ".join(_LIST_DEF_FIELDS))
106 if __name__ == '__main__':
107 sys.exit(GenericMain(commands))