Skip to content
Snippets Groups Projects
Commit af30b2fd authored by Michael Hanselmann's avatar Michael Hanselmann
Browse files

Make "gnt-job list" work again

"gnt-job list" was broken after my recent changes in the RPC
between clients and the master. This patch makes it work again.

Reviewed-by: iustinp
parent 8c229cc7
No related branches found
No related tags found
No related merge requests found
...@@ -41,7 +41,7 @@ from optparse import (OptionParser, make_option, TitledHelpFormatter, ...@@ -41,7 +41,7 @@ from optparse import (OptionParser, make_option, TitledHelpFormatter,
Option, OptionValueError, SUPPRESS_HELP) Option, OptionValueError, SUPPRESS_HELP)
__all__ = ["DEBUG_OPT", "NOHDR_OPT", "SEP_OPT", "GenericMain", __all__ = ["DEBUG_OPT", "NOHDR_OPT", "SEP_OPT", "GenericMain",
"SubmitOpCode", "SubmitOpCode", "GetClient",
"cli_option", "GenerateTable", "AskUser", "cli_option", "GenerateTable", "AskUser",
"ARGS_NONE", "ARGS_FIXED", "ARGS_ATLEAST", "ARGS_ANY", "ARGS_ONE", "ARGS_NONE", "ARGS_FIXED", "ARGS_ATLEAST", "ARGS_ANY", "ARGS_ONE",
"USEUNITS_OPT", "FIELDS_OPT", "FORCE_OPT", "USEUNITS_OPT", "FIELDS_OPT", "FORCE_OPT",
...@@ -394,7 +394,7 @@ def SubmitOpCode(op, proc=None, feedback_fn=None): ...@@ -394,7 +394,7 @@ def SubmitOpCode(op, proc=None, feedback_fn=None):
break break
time.sleep(1) time.sleep(1)
jobs = cl.QueryJobs([job_id], ["status", "result"]) jobs = cl.QueryJobs([job_id], ["status", "opresult"])
if not jobs: if not jobs:
raise errors.JobLost("Job with id %s lost" % job_id) raise errors.JobLost("Job with id %s lost" % job_id)
...@@ -405,6 +405,11 @@ def SubmitOpCode(op, proc=None, feedback_fn=None): ...@@ -405,6 +405,11 @@ def SubmitOpCode(op, proc=None, feedback_fn=None):
raise errors.OpExecError(result) raise errors.OpExecError(result)
def GetClient():
# TODO: Cache object?
return luxi.Client()
def FormatError(err): def FormatError(err):
"""Return a formatted error message for a given error. """Return a formatted error message for a given error.
......
...@@ -46,6 +46,13 @@ class _QueuedOpCode(object): ...@@ -46,6 +46,13 @@ class _QueuedOpCode(object):
self.result = None self.result = None
self._lock = threading.Lock() self._lock = threading.Lock()
@utils.LockedMethod
def GetInput(self):
"""Returns the original opcode.
"""
return self.input
@utils.LockedMethod @utils.LockedMethod
def SetStatus(self, status, result): def SetStatus(self, status, result):
"""Update the opcode status and result. """Update the opcode status and result.
...@@ -228,9 +235,12 @@ class JobQueue: ...@@ -228,9 +235,12 @@ class JobQueue:
row.append(job.id) row.append(job.id)
elif fname == "status": elif fname == "status":
row.append(job.GetStatus()) row.append(job.GetStatus())
elif fname == "result": elif fname == "ops":
# TODO row.append([op.GetInput().__getstate__() for op in job._ops])
elif fname == "opresult":
row.append([op.GetResult() for op in job._ops]) row.append([op.GetResult() for op in job._ops])
elif fname == "opstatus":
row.append([op.GetStatus() for op in job._ops])
else: else:
raise errors.OpExecError("Invalid job query field '%s'" % fname) raise errors.OpExecError("Invalid job query field '%s'" % fname)
return row return row
......
...@@ -35,6 +35,14 @@ from ganeti import errors ...@@ -35,6 +35,14 @@ from ganeti import errors
_LIST_DEF_FIELDS = ["id", "status"] _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): def ListJobs(opts, args):
"""List the jobs """List the jobs
...@@ -46,20 +54,15 @@ def ListJobs(opts, args): ...@@ -46,20 +54,15 @@ def ListJobs(opts, args):
else: else:
selected_fields = opts.output.split(",") selected_fields = opts.output.split(",")
query = { output = GetClient().QueryJobs(None, selected_fields)
"object": "jobs",
"fields": selected_fields,
"names": [],
}
output = SubmitQuery(query)
if not opts.no_headers: if not opts.no_headers:
# TODO: Implement more fields
headers = { headers = {
"id": "ID", "id": "ID",
"status": "Status", "status": "Status",
"op_list": "OpCodes", "ops": "OpCodes",
"op_status": "OpStatus", "opresult": "OpCode_result",
"op_result": "OpResult", "opstatus": "OpCode_status",
} }
else: else:
headers = None headers = None
...@@ -73,16 +76,8 @@ def ListJobs(opts, args): ...@@ -73,16 +76,8 @@ def ListJobs(opts, args):
for idx, field in enumerate(selected_fields): for idx, field in enumerate(selected_fields):
val = row[idx] val = row[idx]
if field == "status": if field == "status":
if val == opcodes.Job.STATUS_PENDING: if val in _USER_JOB_STATUS:
val = "pending" val = _USER_JOB_STATUS[val]
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"
else: else:
raise errors.ProgrammerError("Unknown job status code '%s'" % val) raise errors.ProgrammerError("Unknown job status code '%s'" % val)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment