blind and brutal 2to3
[nodemanager.git] / plugins / rawdisk.py
index 8124f67..eb3df0f 100644 (file)
@@ -1,5 +1,6 @@
 #!/usr/bin/python -tt
 # vim:set ts=4 sw=4 expandtab:
+#
 # NodeManager plugin to support mapping unused raw disks into a slice
 # that has the rawdisk sliver tag
 
@@ -17,8 +18,8 @@ import re
 import logger
 import tools
 
-def start(options, config):
-    logger.log("rawdisk plugin starting up...")
+def start():
+    logger.log("rawdisk: plugin starting up...")
 
 def get_unused_devices():
     devices = []
@@ -29,32 +30,33 @@ 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([x.replace("!", "/") for x in os.listdir("/sys/block/%s/slaves" % i)])
     # Read the list of partitions
-    partitions = file("/proc/partitions", "r")
-    pat = re.compile("\s+")
-    while True:
-        buf = partitions.readline()
-        if buf == "":
-            break
-        buf = buf.strip()
-        fields = re.split(pat, buf)
-        print fields
-        dev = fields[-1]
-        if not dev.startswith("dm-") and dev.endswith("1") and dev not in in_vg:
-            devices.append("/dev/%s" % dev)
+    with open("/proc/partitions") as partitions:
+        pat = re.compile("\s+")
+        while True:
+            buf = partitions.readline()
+            if buf == "":
+                break
+            buf = buf.strip()
+            fields = re.split(pat, buf)
+            dev = fields[-1]
+            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
 
 def GetSlivers(data, config=None, plc=None):
-    if 'slivers' not in data: 
-        logger.log("sliverauth: getslivers data lack's sliver information. IGNORING!")
+    if 'slivers' not in data:
+        logger.log_missing_data("rawdisk.GetSlivers", 'slivers')
         return
 
     devices = get_unused_devices()
     for sliver in data['slivers']:
         for attribute in sliver['attributes']:
-           name = attribute.get('tagname',attribute.get('name',''))
+            name = attribute.get('tagname', attribute.get('name', ''))
             if name == 'rawdisk':
                 for i in devices:
                     st = os.stat(i)
@@ -62,11 +64,15 @@ def GetSlivers(data, config=None, plc=None):
                     if os.path.exists(path):
                         # should check whether its the proper type of device
                         continue
-                    
-                    logger.log("Copying %s to %s" % (i, path))
+
+                    logger.log("rawdisk: Copying %s to %s" % (i, path))
                     try:
                         if os.path.exists(path):
                             os.unlink(path)
                     except:
                         pass
+                    try:
+                        os.makedirs(os.path.dirname(path), 0o755)
+                    except:
+                        pass
                     os.mknod(path, st.st_mode, st.st_rdev)