Convert “gnt-group list” to query2
authorAdeodato Simo <dato@google.com>
Wed, 5 Jan 2011 12:04:15 +0000 (12:04 +0000)
committerAdeodato Simo <dato@google.com>
Thu, 6 Jan 2011 13:02:04 +0000 (13:02 +0000)
Signed-off-by: Adeodato Simo <dato@google.com>
Reviewed-by: Michael Hanselmann <hansmi@google.com>

lib/client/gnt_group.py
man/gnt-group.rst

index d3b477b..f4578aa 100644 (file)
@@ -25,7 +25,7 @@
 # W0614: Unused import %s from wildcard import (since we need cli)
 
 from ganeti.cli import *
-from ganeti import compat
+from ganeti import constants
 from ganeti import opcodes
 from ganeti import utils
 
@@ -34,15 +34,6 @@ from ganeti import utils
 _LIST_DEF_FIELDS = ["name", "node_cnt", "pinst_cnt", "alloc_policy"]
 
 
-#: headers (and full field list) for L{ListGroups}
-_LIST_HEADERS = {
-  "name": "Group", "uuid": "UUID", "alloc_policy": "AllocPolicy",
-  "node_cnt": "Nodes", "node_list": "NodeList",
-  "pinst_cnt": "Instances", "pinst_list": "InstanceList",
-  "ctime": "CTime", "mtime": "MTime", "serial_no": "SerialNo",
-}
-
-
 def AddGroup(opts, args):
   """Add a node group to the cluster.
 
@@ -70,40 +61,25 @@ def ListGroups(opts, args):
 
   """
   desired_fields = ParseFields(opts.output, _LIST_DEF_FIELDS)
+  fmtoverride = dict.fromkeys(["node_list", "pinst_list"], (",".join, False))
 
-  output = GetClient().QueryGroups(args, desired_fields, opts.do_locking)
-
-  if opts.no_headers:
-    headers = None
-  else:
-    headers = _LIST_HEADERS
-
-  int_type_fields = frozenset(["node_cnt", "pinst_cnt", "serial_no"])
-  list_type_fields = frozenset(["node_list", "pinst_list"])
-  date_type_fields = frozenset(["mtime", "ctime"])
-
-  for row in output:
-    for idx, field in enumerate(desired_fields):
-      val = row[idx]
-
-      if field in list_type_fields:
-        val = ",".join(val)
-      elif opts.roman_integers and field in int_type_fields:
-        val = compat.TryToRoman(val)
-      elif field in date_type_fields:
-        val = utils.FormatTime(val)
-      elif val is None:
-        val = "?"
+  return GenericList(constants.QR_GROUP, desired_fields, args, None,
+                     opts.separator, not opts.no_headers,
+                     format_override=fmtoverride)
 
-      row[idx] = str(val)
 
-  data = GenerateTable(separator=opts.separator, headers=headers,
-                       fields=desired_fields, data=output)
+def ListGroupFields(opts, args):
+  """List node fields.
 
-  for line in data:
-    ToStdout(line)
+  @param opts: the command line options selected by the user
+  @type args: list
+  @param args: fields to list, or empty for all
+  @rtype: int
+  @return: the desired exit code
 
-  return 0
+  """
+  return GenericListFields(constants.QR_GROUP, args, opts.separator,
+                           not opts.no_headers)
 
 
 def SetGroupParams(opts, args):
@@ -174,11 +150,14 @@ commands = {
     "<group_name>", "Add a new node group to the cluster"),
   "list": (
     ListGroups, ARGS_MANY_GROUPS,
-    [NOHDR_OPT, SEP_OPT, FIELDS_OPT, SYNC_OPT, ROMAN_OPT],
+    [NOHDR_OPT, SEP_OPT, FIELDS_OPT],
     "[<group_name>...]",
-    "Lists the node groups in the cluster. The available fields are (see"
-    " the man page for details): %s. The default list is (in order): %s." %
-    (utils.CommaJoin(_LIST_HEADERS), utils.CommaJoin(_LIST_DEF_FIELDS))),
+    "Lists the node groups in the cluster. The available fields can be shown"
+    " using the \"list-fields\" command (see the man page for details)."
+    " The default list is (in order): %s." % utils.CommaJoin(_LIST_DEF_FIELDS)),
+  "list-fields": (
+    ListGroupFields, [ArgUnknown()], [NOHDR_OPT, SEP_OPT], "[fields...]",
+    "Lists all available fields for node groups"),
   "modify": (
     SetGroupParams, ARGS_ONE_GROUP,
     [DRY_RUN_OPT, SUBMIT_OPT, ALLOC_POLICY_OPT, NODE_PARAMS_OPT],
index 6d71f4b..712d38c 100644 (file)
@@ -135,6 +135,13 @@ serial_no
 If no group names are given, then all groups are included. Otherwise,
 only the named groups will be listed.
 
+LIST-FIELDS
+~~~~~~~~~~~
+
+**list-fields** [field...]
+
+List available fields for node groups.
+
 RENAME
 ~~~~~~