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

Merge branch 'next' into branch-2.1

* next:
  Add “gnt-job watch” command
  jqueue: Fix error when WaitForJobChange gets invalid ID
  jqueue: Update message for cancelling running job
parents abae1b2b e7d6946c
No related branches found
No related tags found
No related merge requests found
......@@ -1107,6 +1107,10 @@ class JobQueue(object):
"""
logging.debug("Waiting for changes in job %s", job_id)
job_info = None
log_entries = None
end_time = time.time() + timeout
while True:
delta_time = end_time - time.time()
......@@ -1148,7 +1152,10 @@ class JobQueue(object):
logging.debug("Job %s changed", job_id)
return (job_info, log_entries)
if job_info is None and log_entries is None:
return None
else:
return (job_info, log_entries)
@utils.LockedMethod
@_RequireOpenQueue
......@@ -1172,8 +1179,8 @@ class JobQueue(object):
if job_status not in (constants.JOB_STATUS_QUEUED,
constants.JOB_STATUS_WAITLOCK):
logging.debug("Job %s is no longer in the queue", job.id)
return (False, "Job %s is no longer in the queue" % job.id)
logging.debug("Job %s is no longer waiting in the queue", job.id)
return (False, "Job %s is no longer waiting in the queue" % job.id)
if job_status == constants.JOB_STATUS_QUEUED:
self.CancelJobUnlocked(job)
......
......@@ -231,6 +231,20 @@
</para>
</refsect2>
<refsect2>
<title>WATCH</title>
<cmdsynopsis>
<command>watch</command>
<arg>id</arg>
</cmdsynopsis>
<para>
This command follows the output of the job by the given
<replaceable>id</replaceable> and prints it.
</para>
</refsect2>
</refsect1>
&footer;
......
......@@ -29,6 +29,7 @@ from ganeti.cli import *
from ganeti import constants
from ganeti import errors
from ganeti import utils
from ganeti import cli
#: default list of fields for L{ListJobs}
......@@ -312,6 +313,32 @@ def ShowJobs(opts, args):
return 0
def WatchJob(opts, args):
"""Follow a job and print its output as it arrives.
@param opts: the command line options selected by the user
@type args: list
@param args: Contains the job ID
@rtype: int
@return: the desired exit code
"""
job_id = args[0]
msg = ("Output from job %s follows" % job_id)
ToStdout(msg)
ToStdout("-" * len(msg))
retcode = 0
try:
cli.PollJob(job_id)
except errors.GenericError, err:
(retcode, job_result) = cli.FormatError(err)
ToStderr("Job %s failed: %s", job_id, job_result)
return retcode
commands = {
'list': (ListJobs, ARGS_ANY,
[DEBUG_OPT, NOHDR_OPT, SEP_OPT, FIELDS_OPT],
......@@ -336,6 +363,9 @@ commands = {
'info': (ShowJobs, ARGS_ANY, [DEBUG_OPT],
"<job-id> [<job-id> ...]",
"Show detailed information about the specified jobs"),
'watch': (WatchJob, ARGS_ONE, [DEBUG_OPT],
"<job-id>",
"Follows a job and prints its output as it arrives"),
}
......
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