From bdbc0b5b4d06a5d4c1862d2ab5cc1d4b39427cd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-Elliott=20B=C3=A9cue?= Date: Wed, 15 May 2013 23:03:07 +0200 Subject: [PATCH] =?UTF-8?q?[iscsi]=20On=20am=C3=A9liore=20encore,=20parce?= =?UTF-8?q?=20que=20c'est=20un=20peu=20buggu=C3=A9.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gestion/iscsi/udev_get_iscsi_name.py | 10 ++- gestion/iscsi/udev_update_symlinks.py | 89 ++++++++++++++------------- 2 files changed, 55 insertions(+), 44 deletions(-) diff --git a/gestion/iscsi/udev_get_iscsi_name.py b/gestion/iscsi/udev_get_iscsi_name.py index 087ca53a..f59729ee 100755 --- a/gestion/iscsi/udev_get_iscsi_name.py +++ b/gestion/iscsi/udev_get_iscsi_name.py @@ -18,8 +18,14 @@ from config import ISCSI_MAP_FILE def getname(device): map_file = ISCSI_MAP_FILE + if not device.isalpha(): + block = "".join([i for i in device if i.isalpha()]) + part = "_part" + device.replace(block, "") + else: + block = device + part = "" # Rechreche le nom complet du périphérique dans /sys - dev = os.readlink("/sys/block/%s/device" % device) + dev = os.readlink("/sys/block/%s/device" % block) # L'identifiant est de la forme "../../../0:0:0:42", où 42 (j'ai perdu) # est le lun. @@ -36,7 +42,7 @@ def getname(device): globals()['map'] = {} execfile(map_file, globals()) - return map.get(lun, "lun%d" % lun) + return map.get(lun, "lun%d" % lun) + part if __name__ == '__main__': if len(sys.argv) != 2: diff --git a/gestion/iscsi/udev_update_symlinks.py b/gestion/iscsi/udev_update_symlinks.py index e750d23d..743164d1 100644 --- a/gestion/iscsi/udev_update_symlinks.py +++ b/gestion/iscsi/udev_update_symlinks.py @@ -29,54 +29,59 @@ def store_iscsi_volumes(): if line.startswith('ip-'): device = os.readlink(PATH+line) # de la forme ../../sdb42 device = device.rsplit('/', 1)[1] + symlink = 'iscsi_' + ugin.getname(device) if line.rsplit('-', 1)[1][0:4] == "part": - symlink = 'iscsi_' + ugin.getname("".join([i for i in device if i.isalpha()])) + "_part" + line.rsplit('-', 1)[1][4:] + lun = line.rsplit('-', 2)[1] else: - symlink = 'iscsi_' + ugin.getname(device) - line = line.rsplit('-', 1)[1] - _ = links.setdefault(line, [symlink, device]) + lun = line.rsplit('-', 1)[1] + if links.has_key(lun): + if not (True in [(symlink in tup) for tup in links[lun]]): + links[lun].append((symlink, device)) + else: + links[lun] = [(symlink, device)] return links def make_link(couple): """Crée le symlink /dev/iscsi_nom -> /dev/sdb42""" os.chdir("/dev/") - sym, dev = couple - diskstatus = subprocess.Popen(['file', '-sb', '/dev/' + dev], stdout=subprocess.PIPE) - diskstatus = diskstatus.stdout.readlines()[0] - if not (os.path.islink(sym)) and not 'empty' in diskstatus and not 'ERROR' in diskstatus: - sys.stdout.write("Création du lien /dev/" + sym + " -> /dev/" + dev + " … ") - try: - os.symlink(dev, sym) - sys.stdout.write(coul("OK", 'vert')) - res = True - except: - sys.stdout.write(coul("ECHEC", 'rouge')) - res = False - sys.stdout.write('\n') - elif os.path.islink(sym) and ('empty' in diskstatus or 'ERROR' in diskstatus): - sys.stdout.write("Destruction du lien /dev/" + sym + " … ") - try: - os.remove(sym) - sys.stdout.write(coul("OK", 'vert')) - res = True - except: - sys.stdout.write(coul("ECHEC", 'rouge')) - res = False - sys.stdout.write('\n') - elif os.path.islink(sym) and os.readlink(sym) != dev: - sys.stdout.write("Mise à jour du lien /dev/" + sym + " -> /dev/" + dev + " … ") - try: - os.remove(sym) - os.symlink(dev, sym) - sys.stdout.write(coul("OK", 'vert')) - res = True - except: - sys.stdout.write(coul("ECHEC", 'rouge')) - res = False - sys.stdout.write('\n') - else: - res = None + res = [] + for (sym, dev) in couple: + diskstatus = subprocess.Popen(['file', '-sb', '/dev/' + dev], stdout=subprocess.PIPE) + diskstatus = diskstatus.stdout.readlines()[0] + if not (os.path.islink(sym)) and not 'empty' in diskstatus and not 'ERROR' in diskstatus: + sys.stdout.write("Création du lien /dev/" + sym + " -> /dev/" + dev + " … ") + try: + os.symlink(dev, sym) + sys.stdout.write(coul("OK", 'vert')) + res.append(True) + except: + sys.stdout.write(coul("ECHEC", 'rouge')) + res.append(False) + sys.stdout.write('\n') + elif os.path.islink(sym) and ('empty' in diskstatus or 'ERROR' in diskstatus): + sys.stdout.write("Destruction du lien /dev/" + sym + " … ") + try: + os.remove(sym) + sys.stdout.write(coul("OK", 'vert')) + res.append(True) + except: + sys.stdout.write(coul("ECHEC", 'rouge')) + res.append(False) + sys.stdout.write('\n') + elif os.path.islink(sym) and os.readlink(sym) != dev: + sys.stdout.write("Mise à jour du lien /dev/" + sym + " -> /dev/" + dev + " … ") + try: + os.remove(sym) + os.symlink(dev, sym) + sys.stdout.write(coul("OK", 'vert')) + res.ppend(True) + except: + sys.stdout.write(coul("ECHEC", 'rouge')) + res.append(False) + sys.stdout.write('\n') + else: + res.append(None) return res def clean_iscsi_links(): @@ -91,7 +96,7 @@ def clean_iscsi_links(): if line.startswith('iscsi_'): device = os.readlink('/dev/'+line) # de la forme ../../sdb42 symlink = line - make_link((symlink, device)) + make_link([(symlink, device)]) return links if __name__ == '__main__': @@ -105,7 +110,7 @@ if __name__ == '__main__': links = store_iscsi_volumes() for path in links.keys(): cmd = make_link(links[path]) - if cmd != None: + if True in cmd or False in cmd: nothing = False if nothing: