from ganeti import errors
+_LIST_DEF_FIELDS = ["id", "status"]
+
+_USER_JOB_STATUS = {
+ constants.JOB_STATUS_QUEUED: "queued",
+ constants.JOB_STATUS_RUNNING: "running",
+ constants.JOB_STATUS_CANCELED: "canceled",
+ constants.JOB_STATUS_SUCCESS: "success",
+ constants.JOB_STATUS_ERROR: "error",
+ }
+
+
def ListJobs(opts, args):
"""List the jobs
"""
if opts.output is None:
- selected_fields = ["id", "status"]
+ selected_fields = _LIST_DEF_FIELDS
+ elif opts.output.startswith("+"):
+ selected_fields = _LIST_DEF_FIELDS + opts.output[1:].split(",")
else:
selected_fields = opts.output.split(",")
- query = {
- "object": "jobs",
- "fields": selected_fields,
- "names": [],
- }
-
- output = SubmitQuery(query)
+ output = GetClient().QueryJobs(None, selected_fields)
if not opts.no_headers:
+ # TODO: Implement more fields
headers = {
"id": "ID",
"status": "Status",
- "op_list": "OpCodes",
- "op_status": "OpStatus",
- "op_result": "OpResult",
+ "ops": "OpCodes",
+ "opresult": "OpCode_result",
+ "opstatus": "OpCode_status",
}
else:
headers = None
# we don't have yet unitfields here
unitfields = None
- numfields = ["id"]
+ numfields = None
# change raw values to nicer strings
for row in output:
for idx, field in enumerate(selected_fields):
val = row[idx]
if field == "status":
- if val == opcodes.Job.STATUS_PENDING:
- val = "pending"
- elif val == opcodes.Job.STATUS_RUNNING:
- val = "running"
- elif val == opcodes.Job.STATUS_SUCCESS:
- val = "finished"
- elif val == opcodes.Job.STATUS_FAIL:
- val = "failed"
- elif val == opcodes.Job.STATUS_ABORT:
- val = "aborted"
+ if val in _USER_JOB_STATUS:
+ val = _USER_JOB_STATUS[val]
else:
raise errors.ProgrammerError("Unknown job status code '%s'" % val)
return 0
+def ArchiveJobs(opts, args):
+ client = GetClient()
+
+ for job_id in args:
+ client.ArchiveJob(job_id)
+
+ return 0
+
+
commands = {
'list': (ListJobs, ARGS_NONE,
[DEBUG_OPT, NOHDR_OPT, SEP_OPT, USEUNITS_OPT, FIELDS_OPT],
" (see the man page for details): id, status, op_list,"
" op_status, op_result."
" The default field"
- " list is (in order): id, status."),
+ " list is (in order): %s." % ", ".join(_LIST_DEF_FIELDS)),
+ 'archive': (ArchiveJobs, ARGS_ANY,
+ [DEBUG_OPT],
+ "<job-id> [<job-id> ...]",
+ "Archive specified jobs"),
}