X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=plugins%2Frawdisk.py;h=9f80c157efcaa9c6d01d2640f54d3de5febfad92;hb=HEAD;hp=641bc6967a4b67548c307ab5df4556f313d0aa5c;hpb=7aa5872239d04b2d0a7cb3b00a9c14b5ea18d013;p=nodemanager.git diff --git a/plugins/rawdisk.py b/plugins/rawdisk.py index 641bc69..9f80c15 100644 --- a/plugins/rawdisk.py +++ b/plugins/rawdisk.py @@ -1,9 +1,6 @@ -#!/usr/bin/python -tt +#!/usr/bin/python3 -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,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 = [] @@ -33,31 +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) - 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_missing_data("rawdisk.GetSlivers",'slivers') + 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) @@ -65,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)