Revision dcb93971 scripts/gnt-node
b/scripts/gnt-node | ||
---|---|---|
130 | 130 |
SubmitOpCode(op) |
131 | 131 |
|
132 | 132 |
|
133 |
def ListVolumes(opts, args): |
|
134 |
"""List logical volumes on node(s). |
|
135 |
|
|
136 |
""" |
|
137 |
if opts.output is None: |
|
138 |
selected_fields = ["node", "phys", "vg", |
|
139 |
"name", "size", "instance"] |
|
140 |
else: |
|
141 |
selected_fields = opts.output.split(",") |
|
142 |
|
|
143 |
op = opcodes.OpQueryNodeVolumes(nodes=args, output_fields=selected_fields) |
|
144 |
output = SubmitOpCode(op) |
|
145 |
|
|
146 |
mlens = [0 for name in selected_fields] |
|
147 |
format_fields = [] |
|
148 |
unitformat_fields = ("size",) |
|
149 |
for field in selected_fields: |
|
150 |
if field in unitformat_fields: |
|
151 |
format_fields.append("%*s") |
|
152 |
else: |
|
153 |
format_fields.append("%-*s") |
|
154 |
|
|
155 |
separator = opts.separator |
|
156 |
if "%" in separator: |
|
157 |
separator = separator.replace("%", "%%") |
|
158 |
format = separator.join(format_fields) |
|
159 |
|
|
160 |
for row in output: |
|
161 |
for idx, val in enumerate(row): |
|
162 |
if opts.human_readable and selected_fields[idx] in unitformat_fields: |
|
163 |
try: |
|
164 |
val = int(val) |
|
165 |
except ValueError: |
|
166 |
pass |
|
167 |
else: |
|
168 |
val = row[idx] = utils.FormatUnit(val) |
|
169 |
mlens[idx] = max(mlens[idx], len(val)) |
|
170 |
|
|
171 |
if not opts.no_headers: |
|
172 |
header_list = {"node": "Node", "phys": "PhysDev", |
|
173 |
"vg": "VG", "name": "Name", |
|
174 |
"size": "Size", "instance": "Instance"} |
|
175 |
args = [] |
|
176 |
for idx, name in enumerate(selected_fields): |
|
177 |
hdr = header_list[name] |
|
178 |
mlens[idx] = max(mlens[idx], len(hdr)) |
|
179 |
args.append(mlens[idx]) |
|
180 |
args.append(hdr) |
|
181 |
logger.ToStdout(format % tuple(args)) |
|
182 |
|
|
183 |
for row in output: |
|
184 |
args = [] |
|
185 |
for idx, val in enumerate(row): |
|
186 |
args.append(mlens[idx]) |
|
187 |
args.append(val) |
|
188 |
logger.ToStdout(format % tuple(args)) |
|
189 |
|
|
190 |
return 0 |
|
191 |
|
|
192 |
|
|
133 | 193 |
commands = { |
134 | 194 |
'add': (AddNode, ARGS_ONE, |
135 | 195 |
[DEBUG_OPT, |
... | ... | |
140 | 200 |
'info': (ShowNodeConfig, ARGS_ANY, [DEBUG_OPT], |
141 | 201 |
"[<node_name>...]", "Show information about the node(s)"), |
142 | 202 |
'list': (ListNodes, ARGS_NONE, |
143 |
[DEBUG_OPT, NOHDR_OPT, SEP_OPT, USEUNITS_OPT, |
|
144 |
make_option("-o", "--output", dest="output", action="store", |
|
145 |
type="string", help="Select output fields", |
|
146 |
metavar="FIELDS") |
|
147 |
], |
|
203 |
[DEBUG_OPT, NOHDR_OPT, SEP_OPT, USEUNITS_OPT, FIELDS_OPT], |
|
148 | 204 |
"", "Lists the nodes in the cluster"), |
149 | 205 |
'remove': (RemoveNode, ARGS_ONE, [DEBUG_OPT], |
150 | 206 |
"<node_name>", "Removes a node from the cluster"), |
207 |
'volumes': (ListVolumes, ARGS_ANY, |
|
208 |
[DEBUG_OPT, NOHDR_OPT, SEP_OPT, USEUNITS_OPT, FIELDS_OPT], |
|
209 |
"[<node_name>...]", "List logical volumes on node(s)"), |
|
151 | 210 |
} |
152 | 211 |
|
153 | 212 |
|
Also available in: Unified diff