Revision b82c5ff5 lib/client/gnt_instance.py

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,

Also available in: Unified diff