oops, too much messing about
[nodemanager.git] / plugins / rawdisk.py
index 34dce8b..f64affe 100644 (file)
@@ -1,9 +1,6 @@
 #!/usr/bin/python -tt
 # vim:set ts=4 sw=4 expandtab:
 #
-# $Id$
-# $URL$
-#
 # NodeManager plugin to support mapping unused raw disks into a slice
 # that has the rawdisk sliver tag
 
@@ -21,7 +18,7 @@ import re
 import logger
 import tools
 
-def start(options, config):
+def start():
     logger.log("rawdisk: plugin starting up...")
 
 def get_unused_devices():
@@ -33,7 +30,8 @@ def get_unused_devices():
     for i in os.listdir("/sys/block"):
         if not i.startswith("dm-"):
             continue
-        in_vg.extend(os.listdir("/sys/block/%s/slaves" % i))
+        in_vg.extend(map(lambda x: x.replace("!", "/"),
+                         os.listdir("/sys/block/%s/slaves" % i)))
     # Read the list of partitions
     partitions = file("/proc/partitions", "r")
     pat = re.compile("\s+")
@@ -44,7 +42,9 @@ def get_unused_devices():
         buf = buf.strip()
         fields = re.split(pat, buf)
         dev = fields[-1]
-        if not dev.startswith("dm-") and dev.endswith("1") and dev not in in_vg:
+        if (not dev.startswith("dm-") and dev not in in_vg and
+            os.path.exists("/dev/%s" % dev) and
+            (os.minor(os.stat("/dev/%s" % dev).st_rdev) % 2) != 0):
             devices.append("/dev/%s" % dev)
     partitions.close()
     return devices
@@ -72,4 +72,8 @@ def GetSlivers(data, config=None, plc=None):
                             os.unlink(path)
                     except:
                         pass
+                    try:
+                        os.makedirs(os.path.dirname(path), 0755)
+                    except:
+                        pass
                     os.mknod(path, st.st_mode, st.st_rdev)