Commit ca4ac9c9 authored by Adeodato Simo's avatar Adeodato Simo
Browse files

Convert “gnt-group list” to query2

Signed-off-by: default avatarAdeodato Simo <>
Reviewed-by: default avatarMichael Hanselmann <>
parent 31a5d995
......@@ -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}
"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
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,
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:
@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": (
"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,
......@@ -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** [field...]
List available fields for node groups.
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment