Revision 4b413e49 lib/cmdlib.py

b/lib/cmdlib.py
40 40
import tempfile
41 41
import shutil
42 42
import itertools
43
import operator
43 44

  
44 45
from ganeti import ssh
45 46
from ganeti import utils
......
3770 3771
    nodenames = self.acquired_locks[locking.LEVEL_NODE]
3771 3772
    volumes = self.rpc.call_node_volumes(nodenames)
3772 3773

  
3773
    ilist = [self.cfg.GetInstanceInfo(iname) for iname
3774
             in self.cfg.GetInstanceList()]
3774
    ilist = self.cfg.GetAllInstancesInfo()
3775 3775

  
3776
    lv_by_node = dict([(inst, inst.MapLVsByNode()) for inst in ilist])
3776
    vol2inst = dict(((node, vol), inst.name)
3777
                    for inst in ilist.values()
3778
                    for (node, vols) in inst.MapLVsByNode().items()
3779
                    for vol in vols)
3777 3780

  
3778 3781
    output = []
3779 3782
    for node in nodenames:
......
3785 3788
        self.LogWarning("Can't compute volume data on node %s: %s", node, msg)
3786 3789
        continue
3787 3790

  
3788
      node_vols = nresult.payload[:]
3789
      node_vols.sort(key=lambda vol: vol['dev'])
3791
      node_vols = sorted(nresult.payload,
3792
                         key=operator.itemgetter("dev"))
3790 3793

  
3791 3794
      for vol in node_vols:
3792 3795
        node_output = []
......
3802 3805
          elif field == "size":
3803 3806
            val = int(float(vol['size']))
3804 3807
          elif field == "instance":
3805
            for inst in ilist:
3806
              if node not in lv_by_node[inst]:
3807
                continue
3808
              if vol['name'] in lv_by_node[inst][node]:
3809
                val = inst.name
3810
                break
3811
            else:
3812
              val = '-'
3808
            val = vol2inst.get((node, vol["vg"] + "/" + vol["name"]), "-")
3813 3809
          else:
3814 3810
            raise errors.ParameterError(field)
3815 3811
          node_output.append(str(val))

Also available in: Unified diff