Revision b82c5ff5

b/lib/client/gnt_instance.py
245 245
  """
246 246
  selected_fields = ParseFields(opts.output, _LIST_DEF_FIELDS)
247 247

  
248
  output = GetClient().QueryInstances(args, selected_fields, opts.do_locking)
249

  
250
  if not opts.no_headers:
251
    headers = {
252
      "name": "Instance", "os": "OS", "pnode": "Primary_node",
253
      "snodes": "Secondary_Nodes", "admin_state": "Autostart",
254
      "oper_state": "Running",
255
      "oper_ram": "Memory", "disk_template": "Disk_template",
256
      "oper_vcpus": "VCPUs",
257
      "ip": "IP_address", "mac": "MAC_address",
258
      "nic_mode": "NIC_Mode", "nic_link": "NIC_Link",
259
      "bridge": "Bridge",
260
      "sda_size": "Disk/0", "sdb_size": "Disk/1",
261
      "disk_usage": "DiskUsage",
262
      "status": "Status", "tags": "Tags",
263
      "network_port": "Network_port",
264
      "hv/kernel_path": "Kernel_path",
265
      "hv/initrd_path": "Initrd_path",
266
      "hv/boot_order": "Boot_order",
267
      "hv/acpi": "ACPI",
268
      "hv/pae": "PAE",
269
      "hv/cdrom_image_path": "CDROM_image_path",
270
      "hv/nic_type": "NIC_type",
271
      "hv/disk_type": "Disk_type",
272
      "hv/vnc_bind_address": "VNC_bind_address",
273
      "serial_no": "SerialNo", "hypervisor": "Hypervisor",
274
      "hvparams": "Hypervisor_parameters",
275
      "be/memory": "Configured_memory",
276
      "be/vcpus": "VCPUs",
277
      "vcpus": "VCPUs",
278
      "be/auto_balance": "Auto_balance",
279
      "disk.count": "Disks", "disk.sizes": "Disk_sizes",
280
      "nic.count": "NICs", "nic.ips": "NIC_IPs",
281
      "nic.modes": "NIC_modes", "nic.links": "NIC_links",
282
      "nic.bridges": "NIC_bridges", "nic.macs": "NIC_MACs",
283
      "ctime": "CTime", "mtime": "MTime", "uuid": "UUID",
284
      }
285
  else:
286
    headers = None
287

  
288
  unitfields = ["be/memory", "oper_ram", "sd(a|b)_size", "disk\.size/.*"]
289
  numfields = ["be/memory", "oper_ram", "sd(a|b)_size", "be/vcpus",
290
               "serial_no", "(disk|nic)\.count", "disk\.size/.*"]
291

  
292
  list_type_fields = ("tags", "disk.sizes", "nic.macs", "nic.ips",
293
                      "nic.modes", "nic.links", "nic.bridges")
294
  # change raw values to nicer strings
295
  for row in output:
296
    for idx, field in enumerate(selected_fields):
297
      val = row[idx]
298
      if field == "snodes":
299
        val = ",".join(val) or "-"
300
      elif field == "admin_state":
301
        if val:
302
          val = "yes"
303
        else:
304
          val = "no"
305
      elif field == "oper_state":
306
        if val is None:
307
          val = "(node down)"
308
        elif val: # True
309
          val = "running"
310
        else:
311
          val = "stopped"
312
      elif field == "oper_ram":
313
        if val is None:
314
          val = "(node down)"
315
      elif field == "oper_vcpus":
316
        if val is None:
317
          val = "(node down)"
318
      elif field == "sda_size" or field == "sdb_size":
319
        if val is None:
320
          val = "N/A"
321
      elif field == "ctime" or field == "mtime":
322
        val = utils.FormatTime(val)
323
      elif field in list_type_fields:
324
        val = ",".join(str(item) for item in val)
325
      elif val is None:
326
        val = "-"
327
      if opts.roman_integers and isinstance(val, int):
328
        val = compat.TryToRoman(val)
329
      row[idx] = str(val)
330

  
331
  data = GenerateTable(separator=opts.separator, headers=headers,
332
                       fields=selected_fields, unitfields=unitfields,
333
                       numfields=numfields, data=output, units=opts.units)
334

  
335
  for line in data:
336
    ToStdout(line)
248
  fmtoverride = dict.fromkeys(["tags", "disk.sizes", "nic.macs", "nic.ips",
249
                               "nic.modes", "nic.links", "nic.bridges",
250
                               "snodes"],
251
                              (lambda value: ",".join(str(item)
252
                                                      for item in value),
253
                               False))
337 254

  
338
  return 0
255
  return GenericList(constants.QR_INSTANCE, selected_fields, args, opts.units,
256
                     opts.separator, not opts.no_headers,
257
                     format_override=fmtoverride)
258

  
259

  
260
def ListInstanceFields(opts, args):
261
  """List instance fields.
262

  
263
  @param opts: the command line options selected by the user
264
  @type args: list
265
  @param args: fields to list, or empty for all
266
  @rtype: int
267
  @return: the desired exit code
268

  
269
  """
270
  return GenericListFields(constants.QR_INSTANCE, args, opts.separator,
271
                           not opts.no_headers)
339 272

  
340 273

  
341 274
def AddInstance(opts, args):
......
1421 1354
    "Show information on the specified instance(s)"),
1422 1355
  'list': (
1423 1356
    ListInstances, ARGS_MANY_INSTANCES,
1424
    [NOHDR_OPT, SEP_OPT, USEUNITS_OPT, FIELDS_OPT, SYNC_OPT, ROMAN_OPT],
1357
    [NOHDR_OPT, SEP_OPT, USEUNITS_OPT, FIELDS_OPT],
1425 1358
    "[<instance>...]",
1426
    "Lists the instances and their status. The available fields are"
1427
    " (see the man page for details): status, oper_state, oper_ram,"
1428
    " oper_vcpus, name, os, pnode, snodes, admin_state, admin_ram,"
1429
    " disk_template, ip, mac, nic_mode, nic_link, sda_size, sdb_size,"
1430
    " vcpus, serial_no,"
1431
    " nic.count, nic.mac/N, nic.ip/N, nic.mode/N, nic.link/N,"
1432
    " nic.macs, nic.ips, nic.modes, nic.links,"
1433
    " disk.count, disk.size/N, disk.sizes,"
1434
    " hv/NAME, be/memory, be/vcpus, be/auto_balance,"
1435
    " hypervisor."
1436
    " The default field"
1437
    " list is (in order): %s." % utils.CommaJoin(_LIST_DEF_FIELDS),
1359
    "Lists the instances and their status. The available fields can be shown"
1360
    " using the \"list-fields\" command (see the man page for details)."
1361
    " The default field list is (in order): %s." %
1362
    utils.CommaJoin(_LIST_DEF_FIELDS),
1438 1363
    ),
1364
  "list-fields": (
1365
    ListInstanceFields, [ArgUnknown()],
1366
    [NOHDR_OPT, SEP_OPT],
1367
    "[fields...]",
1368
    "Lists all available fields for instances"),
1439 1369
  'reinstall': (
1440 1370
    ReinstallInstance, [ArgInstance()],
1441 1371
    [FORCE_OPT, OS_OPT, FORCE_VARIANT_OPT, m_force_multi, m_node_opt,
b/man/gnt-instance.rst
620 620

  
621 621
| **list**
622 622
| [--no-headers] [--separator=*SEPARATOR*] [--units=*UNITS*]
623
| [-o *[+]FIELD,...*] [--roman] [instance...]
623
| [-o *[+]FIELD,...*] [instance...]
624 624

  
625 625
Shows the currently configured instances with memory usage, disk
626 626
usage, the node they are running on, and their run status.
......
637 637
parsing by scripts. In both cases, the ``--units`` option can be
638 638
used to enforce a given output unit.
639 639

  
640
The ``--roman`` option allows latin people to better understand the
641
cluster instances' status.
642

  
643 640
The ``-o`` option takes a comma-separated list of output fields.
644 641
The available fields and their meaning are:
645 642

  
......
816 813
The default output field list is: name, os, pnode, admin\_state,
817 814
oper\_state, oper\_ram.
818 815

  
816

  
817
LIST-FIELDS
818
~~~~~~~~~~
819

  
820
**list-fields** [field...]
821

  
822
Lists available fields for instances.
823

  
824

  
819 825
INFO
820 826
^^^^
821 827

  

Also available in: Unified diff