X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=plugins%2Frawdisk.py;h=f64affec3f8b2ee619993b94750abd9fa2c65778;hb=ecee05390277f57b02d21ffca0195292bde1defa;hp=f81ca2664296b14680d986367e02044e1a98f67b;hpb=34f202c2dce53b09e62c6884f7a49e2b344694a9;p=nodemanager.git diff --git a/plugins/rawdisk.py b/plugins/rawdisk.py index f81ca26..f64affe 100644 --- a/plugins/rawdisk.py +++ b/plugins/rawdisk.py @@ -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,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+") @@ -39,29 +41,39 @@ def get_unused_devices(): 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: + 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(plc, data, conf): - if 'slivers' not in data: - logger.log("sliverauth: getslivers data lack's sliver information. IGNORING!") +def GetSlivers(data, config=None, plc=None): + 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) path = "/vservers/%s%s" % (sliver['name'], i) - logger.log("Copying %s to %s" % (i, path)) + if os.path.exists(path): + # should check whether its the proper type of device + continue + + logger.log("rawdisk: Copying %s to %s" % (i, path)) + try: + if os.path.exists(path): + os.unlink(path) + except: + pass try: - os.unlink(path) + os.makedirs(os.path.dirname(path), 0755) except: pass os.mknod(path, st.st_mode, st.st_rdev)