xm: Sort pvSCSI devices information by virtual HCTL
authorKeir Fraser <keir.fraser@citrix.com>
Wed, 11 Mar 2009 10:13:46 +0000 (10:13 +0000)
committerKeir Fraser <keir.fraser@citrix.com>
Wed, 11 Mar 2009 10:13:46 +0000 (10:13 +0000)
Signed-off-by: Masaki Kanno <kanno.masaki@jp.fujitsu.com>
tools/python/xen/xm/main.py

index 193141236a835b614a5821220b9330bb560fee8d..2ffa50a0fe653d5d724080649eb25216ffb10e43 100644 (file)
@@ -2231,6 +2231,33 @@ def xm_pci_list_assignable_devices(args):
             print d.name,
         print
 
+def vscsi_sort(devs):
+    def sort_hctl(ds, l):
+        s = []
+        for d1 in ds:
+            for d2 in d1:
+                v_dev = sxp.child_value(d2, 'v-dev')
+                n = int(v_dev.split(':')[l])
+                try:
+                    j = s[n]
+                except IndexError:
+                    j = []
+                    s.extend([ [] for _ in range(len(s), n+1) ])
+                j.append(d2)
+                s[n] = j
+        return s
+
+    for i in range(len(devs)):
+        ds1 = [ devs[i][1][0][1] ]
+        ds1 = sort_hctl(ds1, 3)
+        ds1 = sort_hctl(ds1, 2)
+        ds1 = sort_hctl(ds1, 1)
+        ds2 = []
+        for d in ds1:
+            ds2.extend(d)
+        devs[i][1][0][1] = ds2
+    return devs
+
 def vscsi_convert_sxp_to_dict(dev_sxp):
     dev_dict = {}
     for opt_val in dev_sxp[1:]:
@@ -2271,6 +2298,9 @@ def xm_scsi_list(args):
     else:
         devs = server.xend.domain.getDeviceSxprs(dom, 'vscsi')
 
+    # Sort devs by virtual HCTL.
+    devs = vscsi_sort(devs)
+
     if use_long:
         map(PrettyPrint.prettyprint, devs)
     else: