Add method to update a disk object size
[ganeti-local] / lib / cli.py
index c378038..917b345 100644 (file)
@@ -26,6 +26,7 @@ import sys
 import textwrap
 import os.path
 import copy
+import time
 from cStringIO import StringIO
 
 from ganeti import utils
@@ -176,9 +177,6 @@ FIELDS_OPT = make_option("-o", "--output", dest="output", action="store",
 FORCE_OPT = make_option("-f", "--force", dest="force", action="store_true",
                         default=False, help="Force the operation")
 
-_LOCK_OPT = make_option("--lock-retries", default=None,
-                        type="int", help=SUPPRESS_HELP)
-
 TAG_SRC_OPT = make_option("--from", dest="tags_source",
                           default=None, help="File with tag names")
 
@@ -253,16 +251,15 @@ def _ParseArgs(argv, commands, aliases):
            "\n%(bin)s <command> --help to see details, or"
            " man %(bin)s\n" % {"bin": binary})
     # compute the max line length for cmd + usage
-    mlen = max([len(" %s %s" % (cmd, commands[cmd][3])) for cmd in commands])
+    mlen = max([len(" %s" % cmd) for cmd in commands])
     mlen = min(60, mlen) # should not get here...
     # and format a nice command list
     print "Commands:"
     for cmd in sortedcmds:
-      cmdstr = " %s %s" % (cmd, commands[cmd][3])
+      cmdstr = " %s" % (cmd,)
       help_text = commands[cmd][4]
       help_lines = textwrap.wrap(help_text, 79-3-mlen)
-      print "%-*s - %s" % (mlen, cmdstr,
-                                          help_lines.pop(0))
+      print "%-*s - %s" % (mlen, cmdstr, help_lines.pop(0))
       for line in help_lines:
         print "%-*s   %s" % (mlen, "", line)
     print
@@ -282,7 +279,6 @@ def _ParseArgs(argv, commands, aliases):
     cmd = aliases[cmd]
 
   func, nargs, parser_opts, usage, description = commands[cmd]
-  parser_opts.append(_LOCK_OPT)
   parser = OptionParser(option_list=parser_opts,
                         description=description,
                         formatter=TitledHelpFormatter(),
@@ -381,27 +377,48 @@ def SubmitOpCode(op, proc=None, feedback_fn=None):
   interaction functions.
 
   """
-  if feedback_fn is None:
-    feedback_fn = logger.ToStdout
-  if proc is None:
-    proc = mcpu.Processor(feedback=feedback_fn)
-  return proc.ExecOpCode(op)
+  # TODO: Fix feedback_fn situation.
+  cl = luxi.Client()
+  job = opcodes.Job(op_list=[op])
+  jid = SubmitJob(job)
+
+  query = {
+    "object": "jobs",
+    "fields": ["status"],
+    "names": [jid],
+    }
+
+  while True:
+    jdata = SubmitQuery(query)
+    if not jdata:
+      # job not found, go away!
+      raise errors.JobLost("Job with id %s lost" % jid)
+
+    status = jdata[0][0]
+    if status in (opcodes.Job.STATUS_SUCCESS, opcodes.Job.STATUS_FAIL):
+      break
+    time.sleep(1)
+
+  query["fields"].extend(["op_list", "op_status", "op_result"])
+  jdata = SubmitQuery(query)
+  if not jdata:
+    raise errors.JobLost("Job with id %s lost" % jid)
+  status, op_list, op_status, op_result = jdata[0]
+  if status != opcodes.Job.STATUS_SUCCESS:
+    raise errors.OpExecError(op_result[0])
+  return op_result[0]
 
 
 def SubmitJob(job, cl=None):
   if cl is None:
     cl = luxi.Client()
-  jid = cl.SubmitJob(job)
-  return jid
+  return cl.SubmitJob(job)
 
 
 def SubmitQuery(data, cl=None):
   if cl is None:
     cl = luxi.Client()
-  result = cl.Query(data)
-  if not result['success']:
-    raise ValueError(result)
-  return result['result']
+  return cl.Query(data)
 
 
 def FormatError(err):
@@ -489,17 +506,9 @@ def GenericMain(commands, override=None, aliases=None):
     for key, val in override.iteritems():
       setattr(options, key, val)
 
-  logger.SetupLogging(debug=options.debug, program=binary)
+  logger.SetupLogging(program=binary, debug=options.debug)
 
   utils.debug = options.debug
-  try:
-    utils.Lock('cmd', max_retries=options.lock_retries, debug=options.debug)
-  except errors.LockError, err:
-    logger.ToStderr(str(err))
-    return 1
-  except KeyboardInterrupt:
-    logger.ToStderr("Aborting.")
-    return 1
 
   if old_cmdline:
     logger.Info("run with arguments '%s'" % old_cmdline)
@@ -507,14 +516,10 @@ def GenericMain(commands, override=None, aliases=None):
     logger.Info("run with no arguments")
 
   try:
-    try:
-      result = func(options, args)
-    except errors.GenericError, err:
-      result, err_msg = FormatError(err)
-      logger.ToStderr(err_msg)
-  finally:
-    utils.Unlock('cmd')
-    utils.LockCleanup()
+    result = func(options, args)
+  except errors.GenericError, err:
+    result, err_msg = FormatError(err)
+    logger.ToStderr(err_msg)
 
   return result