Revision ca4ac9c9 lib/client/gnt_group.py
b/lib/client/gnt_group.py | ||
---|---|---|
25 | 25 |
# W0614: Unused import %s from wildcard import (since we need cli) |
26 | 26 |
|
27 | 27 |
from ganeti.cli import * |
28 |
from ganeti import compat
|
|
28 |
from ganeti import constants
|
|
29 | 29 |
from ganeti import opcodes |
30 | 30 |
from ganeti import utils |
31 | 31 |
|
... | ... | |
34 | 34 |
_LIST_DEF_FIELDS = ["name", "node_cnt", "pinst_cnt", "alloc_policy"] |
35 | 35 |
|
36 | 36 |
|
37 |
#: headers (and full field list) for L{ListGroups} |
|
38 |
_LIST_HEADERS = { |
|
39 |
"name": "Group", "uuid": "UUID", "alloc_policy": "AllocPolicy", |
|
40 |
"node_cnt": "Nodes", "node_list": "NodeList", |
|
41 |
"pinst_cnt": "Instances", "pinst_list": "InstanceList", |
|
42 |
"ctime": "CTime", "mtime": "MTime", "serial_no": "SerialNo", |
|
43 |
} |
|
44 |
|
|
45 |
|
|
46 | 37 |
def AddGroup(opts, args): |
47 | 38 |
"""Add a node group to the cluster. |
48 | 39 |
|
... | ... | |
70 | 61 |
|
71 | 62 |
""" |
72 | 63 |
desired_fields = ParseFields(opts.output, _LIST_DEF_FIELDS) |
64 |
fmtoverride = dict.fromkeys(["node_list", "pinst_list"], (",".join, False)) |
|
73 | 65 |
|
74 |
output = GetClient().QueryGroups(args, desired_fields, opts.do_locking) |
|
75 |
|
|
76 |
if opts.no_headers: |
|
77 |
headers = None |
|
78 |
else: |
|
79 |
headers = _LIST_HEADERS |
|
80 |
|
|
81 |
int_type_fields = frozenset(["node_cnt", "pinst_cnt", "serial_no"]) |
|
82 |
list_type_fields = frozenset(["node_list", "pinst_list"]) |
|
83 |
date_type_fields = frozenset(["mtime", "ctime"]) |
|
84 |
|
|
85 |
for row in output: |
|
86 |
for idx, field in enumerate(desired_fields): |
|
87 |
val = row[idx] |
|
88 |
|
|
89 |
if field in list_type_fields: |
|
90 |
val = ",".join(val) |
|
91 |
elif opts.roman_integers and field in int_type_fields: |
|
92 |
val = compat.TryToRoman(val) |
|
93 |
elif field in date_type_fields: |
|
94 |
val = utils.FormatTime(val) |
|
95 |
elif val is None: |
|
96 |
val = "?" |
|
66 |
return GenericList(constants.QR_GROUP, desired_fields, args, None, |
|
67 |
opts.separator, not opts.no_headers, |
|
68 |
format_override=fmtoverride) |
|
97 | 69 |
|
98 |
row[idx] = str(val) |
|
99 | 70 |
|
100 |
data = GenerateTable(separator=opts.separator, headers=headers,
|
|
101 |
fields=desired_fields, data=output)
|
|
71 |
def ListGroupFields(opts, args):
|
|
72 |
"""List node fields.
|
|
102 | 73 |
|
103 |
for line in data: |
|
104 |
ToStdout(line) |
|
74 |
@param opts: the command line options selected by the user |
|
75 |
@type args: list |
|
76 |
@param args: fields to list, or empty for all |
|
77 |
@rtype: int |
|
78 |
@return: the desired exit code |
|
105 | 79 |
|
106 |
return 0 |
|
80 |
""" |
|
81 |
return GenericListFields(constants.QR_GROUP, args, opts.separator, |
|
82 |
not opts.no_headers) |
|
107 | 83 |
|
108 | 84 |
|
109 | 85 |
def SetGroupParams(opts, args): |
... | ... | |
174 | 150 |
"<group_name>", "Add a new node group to the cluster"), |
175 | 151 |
"list": ( |
176 | 152 |
ListGroups, ARGS_MANY_GROUPS, |
177 |
[NOHDR_OPT, SEP_OPT, FIELDS_OPT, SYNC_OPT, ROMAN_OPT],
|
|
153 |
[NOHDR_OPT, SEP_OPT, FIELDS_OPT], |
|
178 | 154 |
"[<group_name>...]", |
179 |
"Lists the node groups in the cluster. The available fields are (see" |
|
180 |
" the man page for details): %s. The default list is (in order): %s." % |
|
181 |
(utils.CommaJoin(_LIST_HEADERS), utils.CommaJoin(_LIST_DEF_FIELDS))), |
|
155 |
"Lists the node groups in the cluster. The available fields can be shown" |
|
156 |
" using the \"list-fields\" command (see the man page for details)." |
|
157 |
" The default list is (in order): %s." % utils.CommaJoin(_LIST_DEF_FIELDS)), |
|
158 |
"list-fields": ( |
|
159 |
ListGroupFields, [ArgUnknown()], [NOHDR_OPT, SEP_OPT], "[fields...]", |
|
160 |
"Lists all available fields for node groups"), |
|
182 | 161 |
"modify": ( |
183 | 162 |
SetGroupParams, ARGS_ONE_GROUP, |
184 | 163 |
[DRY_RUN_OPT, SUBMIT_OPT, ALLOC_POLICY_OPT, NODE_PARAMS_OPT], |
Also available in: Unified diff