Revision ac6a221f snf-cyclades-app/synnefo/management/pprint.py

b/snf-cyclades-app/synnefo/management/pprint.py
41 41
from synnefo.db.pools import bitarray_to_map
42 42

  
43 43
from synnefo.logic.rapi import GanetiApiError
44
from synnefo.logic.reconciliation import nics_from_instance
44
from synnefo.logic.reconciliation import (nics_from_instance,
45
                                          disks_from_instance)
45 46
from synnefo.management.common import get_image
46 47

  
47 48

  
......
259 260
            return
260 261
        raise e
261 262

  
262
    nics = nics_from_instance(vm_info)
263
    disks = disks_from_instance(vm_info)
263 264
    try:
264
        gnt_nic = filter(lambda nic: nic.get("name") == port.backend_uuid,
265
                         nics)[0]
266
        gnt_nic["instance"] = vm_info["name"]
265
        gnt_disk = filter(lambda disk: disk.get("name") == port.backend_uuid,
266
                          disks)[0]
267
        gnt_disk["instance"] = vm_info["name"]
267 268
    except IndexError:
268 269
        stdout.write("Port %s is not attached to instance %s\n" %
269 270
                     (port.id, vm.id))
270 271
        return
271
    pprint_table(stdout, gnt_nic.items(), None, separator=" | ",
272
    pprint_table(stdout, gnt_disk.items(), None, separator=" | ",
272 273
                 title=title)
273 274

  
274 275
    vm.put_client(client)
......
382 383
                     separator=" | ",
383 384
                     title="Ganeti Job %s" % server_job["id"])
384 385
    server.put_client(client)
386

  
387

  
388
def pprint_volume(volume, display_mails=False, stdout=None, title=None):
389
    if stdout is None:
390
        stdout = sys.stdout
391
    if title is None:
392
        title = "State of volume %s in DB" % volume.id
393

  
394
    ucache = UserCache(ASTAKOS_AUTH_URL, ASTAKOS_TOKEN)
395
    userid = volume.userid
396

  
397
    volume_dict = OrderedDict([
398
        ("id", volume.id),
399
        ("size", volume.size),
400
        ("disk_template", volume.disk_template),
401
        ("disk_provider", volume.disk_provider),
402
        ("server_id", volume.machine_id),
403
        ("userid", volume.userid),
404
        ("username", ucache.get_name(userid) if display_mails else None),
405
        ("name", volume.name),
406
        ("state", volume.status),
407
        ("deleted", volume.deleted),
408
        ("backendjobid", volume.backendjobid),
409
        ])
410

  
411
    pprint_table(stdout, volume_dict.items(), None, separator=" | ",
412
                 title=title)
413

  
414

  
415
def pprint_volume_in_ganeti(volume, stdout=None, title=None):
416
    if stdout is None:
417
        stdout = sys.stdout
418
    if title is None:
419
        title = "State of volume %s in Ganeti" % volume.id
420

  
421
    vm = volume.machine
422
    if vm is None:
423
        stdout.write("volume is not attached to any instance.\n")
424
        return
425

  
426
    client = vm.get_client()
427
    try:
428
        vm_info = client.GetInstance(vm.backend_vm_id)
429
    except GanetiApiError as e:
430
        if e.code == 404:
431
            stdout.write("Volume seems attached to server %s, but"
432
                         " server does not exist in backend.\n"
433
                         % vm)
434
            return
435
        raise e
436

  
437
    disks = disks_from_instance(vm_info)
438
    try:
439
        gnt_disk = filter(lambda disk:
440
                          disk.get("name") == volume.backend_volume_uuid,
441
                          disks)[0]
442
        gnt_disk["instance"] = vm_info["name"]
443
    except IndexError:
444
        stdout.write("Volume %s is not attached to instance %s\n" % (volume.id,
445
                                                                     vm.id))
446
        return
447
    pprint_table(stdout, gnt_disk.items(), None, separator=" | ",
448
                 title=title)
449

  
450
    vm.put_client(client)

Also available in: Unified diff