Statistics
| Branch: | Tag: | Revision:

root / lib / client / base.py @ f3aebf6f

History | View | Annotate | Download (2.2 kB)

1 fcafd191 Jose A. Lopes
#
2 fcafd191 Jose A. Lopes
#
3 fcafd191 Jose A. Lopes
4 fcafd191 Jose A. Lopes
# Copyright (C) 2014 Google Inc.
5 fcafd191 Jose A. Lopes
#
6 fcafd191 Jose A. Lopes
# This program is free software; you can redistribute it and/or modify
7 fcafd191 Jose A. Lopes
# it under the terms of the GNU General Public License as published by
8 fcafd191 Jose A. Lopes
# the Free Software Foundation; either version 2 of the License, or
9 fcafd191 Jose A. Lopes
# (at your option) any later version.
10 fcafd191 Jose A. Lopes
#
11 fcafd191 Jose A. Lopes
# This program is distributed in the hope that it will be useful, but
12 fcafd191 Jose A. Lopes
# WITHOUT ANY WARRANTY; without even the implied warranty of
13 fcafd191 Jose A. Lopes
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 fcafd191 Jose A. Lopes
# General Public License for more details.
15 fcafd191 Jose A. Lopes
#
16 fcafd191 Jose A. Lopes
# You should have received a copy of the GNU General Public License
17 fcafd191 Jose A. Lopes
# along with this program; if not, write to the Free Software
18 fcafd191 Jose A. Lopes
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 fcafd191 Jose A. Lopes
# 02110-1301, USA.
20 fcafd191 Jose A. Lopes
21 fcafd191 Jose A. Lopes
22 fcafd191 Jose A. Lopes
"""Utils for CLI commands"""
23 fcafd191 Jose A. Lopes
24 fcafd191 Jose A. Lopes
from ganeti import cli
25 fcafd191 Jose A. Lopes
from ganeti import constants
26 fcafd191 Jose A. Lopes
from ganeti import ht
27 fcafd191 Jose A. Lopes
28 fcafd191 Jose A. Lopes
29 fcafd191 Jose A. Lopes
def GetResult(cl, opts, result):
30 fcafd191 Jose A. Lopes
  """Waits for jobs and returns whether they have succeeded
31 fcafd191 Jose A. Lopes

32 fcafd191 Jose A. Lopes
  Some OpCodes return of list of jobs.  This function can be used
33 fcafd191 Jose A. Lopes
  after issueing a given OpCode to look at the OpCode's result and, if
34 fcafd191 Jose A. Lopes
  it is of type L{ht.TJobIdListOnly}, then it will wait for the jobs
35 fcafd191 Jose A. Lopes
  to complete, otherwise just return L{constants.EXIT_SUCCESS}.
36 fcafd191 Jose A. Lopes

37 fcafd191 Jose A. Lopes
  @type cl: L{ganeti.luxi.Client}
38 fcafd191 Jose A. Lopes
  @param cl: client that was used to submit the OpCode, which will
39 fcafd191 Jose A. Lopes
             also be used to poll the jobs
40 fcafd191 Jose A. Lopes

41 fcafd191 Jose A. Lopes
  @param opts: CLI options
42 fcafd191 Jose A. Lopes

43 fcafd191 Jose A. Lopes
  @param result: result of the opcode which might contain job
44 fcafd191 Jose A. Lopes
         information, in which case the jobs will be polled, or simply
45 fcafd191 Jose A. Lopes
         the result of the opcode
46 fcafd191 Jose A. Lopes

47 fcafd191 Jose A. Lopes
  @rtype: int
48 fcafd191 Jose A. Lopes
  @return: L{constants.EXIT_SUCCESS} if all jobs completed
49 fcafd191 Jose A. Lopes
           successfully, L{constants.EXIT_FAILURE} otherwise
50 fcafd191 Jose A. Lopes

51 fcafd191 Jose A. Lopes
  """
52 fcafd191 Jose A. Lopes
  if not ht.TJobIdListOnly(result):
53 fcafd191 Jose A. Lopes
    return constants.EXIT_SUCCESS
54 fcafd191 Jose A. Lopes
55 fcafd191 Jose A. Lopes
  jex = cli.JobExecutor(cl=cl, opts=opts)
56 fcafd191 Jose A. Lopes
57 fcafd191 Jose A. Lopes
  for (status, job_id) in result[constants.JOB_IDS_KEY]:
58 fcafd191 Jose A. Lopes
    jex.AddJobId(None, status, job_id)
59 fcafd191 Jose A. Lopes
60 fcafd191 Jose A. Lopes
  bad_jobs = [job_result
61 fcafd191 Jose A. Lopes
              for success, job_result in jex.GetResults()
62 fcafd191 Jose A. Lopes
              if not success]
63 fcafd191 Jose A. Lopes
64 fcafd191 Jose A. Lopes
  if len(bad_jobs) > 0:
65 fcafd191 Jose A. Lopes
    for job in bad_jobs:
66 fcafd191 Jose A. Lopes
      cli.ToStdout("Job failed, result is '%s'.", job)
67 fcafd191 Jose A. Lopes
    cli.ToStdout("%s job(s) failed.", bad_jobs)
68 fcafd191 Jose A. Lopes
    return constants.EXIT_FAILURE
69 fcafd191 Jose A. Lopes
  else:
70 fcafd191 Jose A. Lopes
    return constants.EXIT_SUCCESS