no real change, just made prettier with a more standard layout - half of steps
[bootmanager.git] / source / steps / InitializeBootManager.py
index c129d63..dfe3399 100644 (file)
@@ -1,3 +1,11 @@
+#!/usr/bin/python
+#
+# Copyright (c) 2003 Intel Corporation
+# All rights reserved.
+#
+# Copyright (c) 2004-2006 The Trustees of Princeton University
+# All rights reserved.
+
 import os
 import xmlrpclib
 import socket
 import os
 import xmlrpclib
 import socket
@@ -8,73 +16,74 @@ import utils
 
 
 # locations of boot os version files
 
 
 # locations of boot os version files
-BOOT_VERSION_2X_FILE='/usr/bootme/ID'
-BOOT_VERSION_3X_FILE='/pl_version'
+BOOT_VERSION_2X_FILE = '/usr/bootme/ID'
+BOOT_VERSION_3X_FILE = '/pl_version'
 
 # minimium version of the boot os we need to run, as a (major,minor) tuple
 
 # minimium version of the boot os we need to run, as a (major,minor) tuple
-MINIMUM_BOOT_VERSION= (2,0)
+MINIMUM_BOOT_VERSION = (3, 0)
 
 # minimum version of python required to run the boot manager
 
 # minimum version of python required to run the boot manager
-MINIMUM_PYTHON_VERSION= (2,2,0)
+MINIMUM_PYTHON_VERSION = (2, 6, 0)
 
 
 
 
-def Run( vars, log ):
+def Run(vars, log):
     """
     Setup the boot manager so it can run, do any extra necessary
     hardware setup (to fix old cd problems)
 
     Sets the following variables:
     """
     Setup the boot manager so it can run, do any extra necessary
     hardware setup (to fix old cd problems)
 
     Sets the following variables:
-    BOOT_CD_VERSION           A two number tuple of the boot cd version
+    PARTITIONS        A dictionary of generic partition types and their
+                      associated devices.
+    BOOT_CD_VERSION   A two number tuple of the boot cd version
     """
 
     """
 
-    log.write( "\n\nStep: Initializing the BootManager.\n" )
+    log.write("\n\nStep: Initializing the BootManager.\n")
 
 
-    
-    log.write( "Opening connection to API server\n" )
+    # Default model option.  Required in case we go into debug mode
+    # before we successfully called GetAndUpdateNodeDetails().
+    vars["NODE_MODEL_OPTIONS"] = vars.get("NODE_MODEL_OPTIONS", 0)
+
+    # define the basic partition paths
+    PARTITIONS = {}
+    PARTITIONS["root"] = "/dev/planetlab/root"
+    PARTITIONS["swap"] = "/dev/planetlab/swap"
+    PARTITIONS["vservers"] = "/dev/planetlab/vservers"
+    # Linux 2.6 mounts LVM with device mapper
+    PARTITIONS["mapper-root"] = "/dev/mapper/planetlab-root"
+    PARTITIONS["mapper-swap"] = "/dev/mapper/planetlab-swap"
+    PARTITIONS["mapper-vservers"] = "/dev/mapper/planetlab-vservers"
+    vars["PARTITIONS"] = PARTITIONS
+
+    log.write("Opening connection to API server\n")
     try:
     try:
-        api_inst= xmlrpclib.Server( vars['BOOT_API_SERVER'], verbose=0 )
-    except KeyError, e:
-        raise BootManagerException, \
-              "configuration file does not specify API server URL"
+        api_inst = xmlrpclib.Server(vars['BOOT_API_SERVER'], verbose=0)
+    except KeyError as e:
+        raise BootManagerException("configuration file does not specify API server URL")
 
 
-    vars['API_SERVER_INST']= api_inst
+    vars['API_SERVER_INST'] = api_inst
 
 
-    if not __check_boot_version( vars, log ):
-        raise BootManagerException, \
-              "Boot CD version insufficient to run the Boot Manager"
+    if not __check_boot_version(vars, log):
+        raise BootManagerException("Boot CD version insufficient to run the Boot Manager")
     else:
     else:
-        log.write( "Running on boot cd version: %s\n" %
-                   str(vars['BOOT_CD_VERSION']) )
+        log.write("Running on boot cd version: {}\n".format(vars['BOOT_CD_VERSION']))
 
 
-    BOOT_CD_VERSION= vars['BOOT_CD_VERSION']
+    BOOT_CD_VERSION = vars['BOOT_CD_VERSION']
     
     
-    # old cds need extra modules loaded for compaq smart array
-    if BOOT_CD_VERSION[0] == 2:
-
-        has_smartarray= utils.sysexec_noerr(
-            'lspci | egrep "0e11:b178|0e11:4070|0e11:4080|0e11:4082|0e11:4083"')
-        
-        if has_smartarray:
-            log.write( "Loading support for Compaq smart array\n" )
-            utils.sysexec_noerr( "modprobe cciss", log )
-            _create_cciss_dev_entries()
-            
-
-        has_fusion= utils.sysexec_noerr('lspci | egrep "1000:0030"')
-        
-        if has_fusion:
-            log.write( "Loading support for Fusion MPT SCSI controllers\n" )
-            utils.sysexec_noerr( "modprobe mptscsih", log )
+    # In case we are booted with a kernel that does not have the
+    # device mapper code compiled into the kernel.
+    if not os.path.exists("/dev/mapper"):
+        log.write("Loading support for LVM\n")
+        utils.sysexec_noerr("modprobe dm_mod", log)
 
     # for anything that needs to know we are running under the boot cd and
     # not the runtime os
 
     # for anything that needs to know we are running under the boot cd and
     # not the runtime os
-    os.environ['PL_BOOTCD']= "1"
+    os.environ['PL_BOOTCD'] = "1"
         
     return 1
 
 
 
         
     return 1
 
 
 
-def __check_boot_version( vars, log ):
+def __check_boot_version(vars, log):
     """
     identify which version of the boot os we are running on, and whether
     or not we can run at all on the given version. later, this will be
     """
     identify which version of the boot os we are running on, and whether
     or not we can run at all on the given version. later, this will be
@@ -108,68 +117,68 @@ def __check_boot_version( vars, log ):
 
     try:
         # check for a 3.x version first
 
     try:
         # check for a 3.x version first
-        version_file= file(BOOT_VERSION_3X_FILE,'r')
-        full_version= string.strip(version_file.read())
+        version_file = file(BOOT_VERSION_3X_FILE, 'r')
+        full_version = string.strip(version_file.read())
         version_file.close()
 
         version_file.close()
 
-        version_parts= string.split(full_version)
-        version= version_parts[-1]
+        version_parts = string.split(full_version)
+        version = version_parts[-1]
 
 
-        version_numbers= string.split(version,".")
+        version_numbers = string.split(version, ".")
         if len(version_numbers) == 2:
         if len(version_numbers) == 2:
-            BOOT_OS_MAJOR_VERSION= int(version_numbers[0])
-            BOOT_OS_MINOR_VERSION= int(version_numbers[1])
+            BOOT_OS_MAJOR_VERSION = int(version_numbers[0])
+            BOOT_OS_MINOR_VERSION = int(version_numbers[1])
         else:
             # for 3.x cds, if there are more than two parts
             # separated by a ., its one of the beta cds.
             # hardcode as a 3.0 cd
         else:
             # for 3.x cds, if there are more than two parts
             # separated by a ., its one of the beta cds.
             # hardcode as a 3.0 cd
-            BOOT_OS_MAJOR_VERSION= 3
-            BOOT_OS_MINOR_VERSION= 0
+            BOOT_OS_MAJOR_VERSION = 3
+            BOOT_OS_MINOR_VERSION = 0
 
 
-        vars['BOOT_CD_VERSION']= (BOOT_OS_MAJOR_VERSION,BOOT_OS_MINOR_VERSION)
+        vars['BOOT_CD_VERSION'] = (BOOT_OS_MAJOR_VERSION, BOOT_OS_MINOR_VERSION)
         
         
-        if (BOOT_OS_MAJOR_VERSION,BOOT_OS_MINOR_VERSION) >= \
+        if (BOOT_OS_MAJOR_VERSION, BOOT_OS_MINOR_VERSION) >= \
                MINIMUM_BOOT_VERSION:
             return 1
 
                MINIMUM_BOOT_VERSION:
             return 1
 
-    except IOError, e:
+    except IOError as e:
         pass
         pass
-    except IndexError, e:
+    except IndexError as e:
         pass
         pass
-    except TypeError, e:
+    except TypeError as e:
         pass
 
 
     try:
         # check for a 2.x version first
         pass
 
 
     try:
         # check for a 2.x version first
-        version_file= file(BOOT_VERSION_2X_FILE,'r')
-        full_version= string.strip(version_file.read())
+        version_file = file(BOOT_VERSION_2X_FILE, 'r')
+        full_version = string.strip(version_file.read())
         version_file.close()
 
         version_file.close()
 
-        version_parts= string.split(full_version)
-        version= version_parts[-1]
+        version_parts = string.split(full_version)
+        version = version_parts[-1]
         if version[0] == 'v':
         if version[0] == 'v':
-            version= version[1:]
+            version = version[1:]
 
 
-        version_numbers= string.split(version,".")
+        version_numbers = string.split(version, ".")
         if len(version_numbers) == 2:
         if len(version_numbers) == 2:
-            BOOT_OS_MAJOR_VERSION= int(version_numbers[0])
-            BOOT_OS_MINOR_VERSION= int(version_numbers[1])
+            BOOT_OS_MAJOR_VERSION = int(version_numbers[0])
+            BOOT_OS_MINOR_VERSION = int(version_numbers[1])
         else:
         else:
-            BOOT_OS_MAJOR_VERSION= int(version_numbers[0])
-            BOOT_OS_MINOR_VERSION= int(version_numbers[2])
+            BOOT_OS_MAJOR_VERSION = int(version_numbers[0])
+            BOOT_OS_MINOR_VERSION = int(version_numbers[2])
 
 
-        vars['BOOT_CD_VERSION']= (BOOT_OS_MAJOR_VERSION,BOOT_OS_MINOR_VERSION)
+        vars['BOOT_CD_VERSION'] = (BOOT_OS_MAJOR_VERSION, BOOT_OS_MINOR_VERSION)
 
 
-        if (BOOT_OS_MAJOR_VERSION,BOOT_OS_MINOR_VERSION) >= \
+        if (BOOT_OS_MAJOR_VERSION, BOOT_OS_MINOR_VERSION) >= \
            MINIMUM_BOOT_VERSION:
             return 1
 
            MINIMUM_BOOT_VERSION:
             return 1
 
-    except IOError, e:
+    except IOError as e:
         pass
         pass
-    except IndexError, e:
+    except IndexError as e:
         pass
         pass
-    except TypeError, e:
+    except TypeError as e:
         pass
 
 
         pass
 
 
@@ -178,262 +187,17 @@ def __check_boot_version( vars, log ):
 
 
 def _create_cciss_dev_entries():
 
 
 def _create_cciss_dev_entries():
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d0 b 104 0" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d0p1 b 104 1" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d0p2 b 104 2" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d0p3 b 104 3" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d0p4 b 104 4" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d0p5 b 104 5" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d0p6 b 104 6" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d0p7 b 104 7" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d0p8 b 104 8" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d0p9 b 104 9" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d0p10 b 104 10" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d0p11 b 104 11" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d0p12 b 104 12" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d0p13 b 104 13" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d0p14 b 104 14" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d0p15 b 104 15" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d1 b 104 16" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d1p1 b 104 17" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d1p2 b 104 18" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d1p3 b 104 19" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d1p4 b 104 20" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d1p5 b 104 21" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d1p6 b 104 22" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d1p7 b 104 23" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d1p8 b 104 24" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d1p9 b 104 25" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d1p10 b 104 26" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d1p11 b 104 27" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d1p12 b 104 28" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d1p13 b 104 29" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d1p14 b 104 30" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d1p15 b 104 31" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d2 b 104 32" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d2p1 b 104 33" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d2p2 b 104 34" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d2p3 b 104 35" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d2p4 b 104 36" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d2p5 b 104 37" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d2p6 b 104 38" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d2p7 b 104 39" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d2p8 b 104 40" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d2p9 b 104 41" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d2p10 b 104 42" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d2p11 b 104 43" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d2p12 b 104 44" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d2p13 b 104 45" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d2p14 b 104 46" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d2p15 b 104 47" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d3 b 104 48" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d3p1 b 104 49" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d3p2 b 104 50" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d3p3 b 104 51" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d3p4 b 104 52" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d3p5 b 104 53" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d3p6 b 104 54" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d3p7 b 104 55" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d3p8 b 104 56" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d3p9 b 104 57" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d3p10 b 104 58" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d3p11 b 104 59" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d3p12 b 104 60" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d3p13 b 104 61" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d3p14 b 104 62" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d3p15 b 104 63" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d4 b 104 64" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d4p1 b 104 65" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d4p2 b 104 66" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d4p3 b 104 67" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d4p4 b 104 68" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d4p5 b 104 69" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d4p6 b 104 70" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d4p7 b 104 71" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d4p8 b 104 72" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d4p9 b 104 73" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d4p10 b 104 74" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d4p11 b 104 75" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d4p12 b 104 76" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d4p13 b 104 77" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d4p14 b 104 78" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d4p15 b 104 79" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d5 b 104 80" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d5p1 b 104 81" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d5p2 b 104 82" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d5p3 b 104 83" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d5p4 b 104 84" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d5p5 b 104 85" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d5p6 b 104 86" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d5p7 b 104 87" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d5p8 b 104 88" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d5p9 b 104 89" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d5p10 b 104 90" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d5p11 b 104 91" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d5p12 b 104 92" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d5p13 b 104 93" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d5p14 b 104 94" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d5p15 b 104 95" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d6 b 104 96" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d6p1 b 104 97" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d6p2 b 104 98" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d6p3 b 104 99" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d6p4 b 104 100" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d6p5 b 104 101" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d6p6 b 104 102" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d6p7 b 104 103" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d6p8 b 104 104" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d6p9 b 104 105" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d6p10 b 104 106" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d6p11 b 104 107" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d6p12 b 104 108" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d6p13 b 104 109" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d6p14 b 104 110" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d6p15 b 104 111" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d7 b 104 112" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d7p1 b 104 113" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d7p2 b 104 114" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d7p3 b 104 115" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d7p4 b 104 116" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d7p5 b 104 117" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d7p6 b 104 118" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d7p7 b 104 119" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d7p8 b 104 120" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d7p9 b 104 121" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d7p10 b 104 122" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d7p11 b 104 123" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d7p12 b 104 124" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d7p13 b 104 125" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d7p14 b 104 126" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d7p15 b 104 127" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d8 b 104 128" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d8p1 b 104 129" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d8p2 b 104 130" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d8p3 b 104 131" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d8p4 b 104 132" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d8p5 b 104 133" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d8p6 b 104 134" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d8p7 b 104 135" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d8p8 b 104 136" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d8p9 b 104 137" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d8p10 b 104 138" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d8p11 b 104 139" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d8p12 b 104 140" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d8p13 b 104 141" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d8p14 b 104 142" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d8p15 b 104 143" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d9 b 104 144" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d9p1 b 104 145" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d9p2 b 104 146" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d9p3 b 104 147" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d9p4 b 104 148" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d9p5 b 104 149" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d9p6 b 104 150" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d9p7 b 104 151" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d9p8 b 104 152" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d9p9 b 104 153" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d9p10 b 104 154" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d9p11 b 104 155" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d9p12 b 104 156" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d9p13 b 104 157" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d9p14 b 104 158" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d9p15 b 104 159" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d10 b 104 160" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d10p1 b 104 161" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d10p2 b 104 162" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d10p3 b 104 163" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d10p4 b 104 164" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d10p5 b 104 165" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d10p6 b 104 166" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d10p7 b 104 167" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d10p8 b 104 168" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d10p9 b 104 169" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d10p10 b 104 170" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d10p11 b 104 171" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d10p12 b 104 172" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d10p13 b 104 173" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d10p14 b 104 174" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d10p15 b 104 175" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d11 b 104 176" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d11p1 b 104 177" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d11p2 b 104 178" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d11p3 b 104 179" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d11p4 b 104 180" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d11p5 b 104 181" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d11p6 b 104 182" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d11p7 b 104 183" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d11p8 b 104 184" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d11p9 b 104 185" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d11p10 b 104 186" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d11p11 b 104 187" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d11p12 b 104 188" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d11p13 b 104 189" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d11p14 b 104 190" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d11p15 b 104 191" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d12 b 104 192" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d12p1 b 104 193" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d12p2 b 104 194" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d12p3 b 104 195" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d12p4 b 104 196" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d12p5 b 104 197" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d12p6 b 104 198" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d12p7 b 104 199" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d12p8 b 104 200" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d12p9 b 104 201" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d12p10 b 104 202" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d12p11 b 104 203" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d12p12 b 104 204" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d12p13 b 104 205" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d12p14 b 104 206" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d12p15 b 104 207" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d13 b 104 208" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d13p1 b 104 209" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d13p2 b 104 210" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d13p3 b 104 211" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d13p4 b 104 212" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d13p5 b 104 213" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d13p6 b 104 214" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d13p7 b 104 215" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d13p8 b 104 216" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d13p9 b 104 217" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d13p10 b 104 218" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d13p11 b 104 219" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d13p12 b 104 220" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d13p13 b 104 221" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d13p14 b 104 222" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d13p15 b 104 223" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d14 b 104 224" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d14p1 b 104 225" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d14p2 b 104 226" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d14p3 b 104 227" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d14p4 b 104 228" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d14p5 b 104 229" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d14p6 b 104 230" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d14p7 b 104 231" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d14p8 b 104 232" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d14p9 b 104 233" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d14p10 b 104 234" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d14p11 b 104 235" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d14p12 b 104 236" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d14p13 b 104 237" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d14p14 b 104 238" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d14p15 b 104 239" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d15 b 104 240" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d15p1 b 104 241" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d15p2 b 104 242" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d15p3 b 104 243" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d15p4 b 104 244" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d15p5 b 104 245" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d15p6 b 104 246" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d15p7 b 104 247" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d15p8 b 104 248" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d15p9 b 104 249" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d15p10 b 104 250" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d15p11 b 104 251" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d15p12 b 104 252" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d15p13 b 104 253" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d15p14 b 104 254" )
-    utils.sysexec_noerr( "mknod /dev/cciss/c0d15p15 b 104 255" )
-
-
-    
+    def mkccissnod(dev, node):
+        dev = dev + " b 104 {}".format(node)
+       cmd = "mknod /dev/cciss/{}".format(dev)
+        utils.sysexec_noerr(cmd)
+        node = node + 1
+        return node
+
+    node = 0
+    for i in range(0, 16):
+        dev = "c0d{}".format(i)
+        node = mkccissnod(dev, node)
+        for j in range(1, 16):
+            subdev = "{}p{}".format(dev, j)
+            node = mkccissnod(subdev, node)