From c37b3b0f3454496e61ded145bd34378a9c3bbf01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-Elliott=20B=C3=A9cue?= Date: Thu, 25 Apr 2013 00:09:48 +0200 Subject: [PATCH] =?UTF-8?q?[iscsi]=20Kludges=20sales=20pour=20virer=20les?= =?UTF-8?q?=20liens=20morts=20suppl=C3=A9mentaires.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Si seulement udev se débarassait des modules physiques qui n'existent plus... --- gestion/iscsi/nolslib.py | 2 +- gestion/iscsi/udev_update_symlinks.py | 30 ++++++++++++++++++++++++--- gestion/iscsi/update.sh | 2 +- 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/gestion/iscsi/nolslib.py b/gestion/iscsi/nolslib.py index cf46c12b..f04440f7 100644 --- a/gestion/iscsi/nolslib.py +++ b/gestion/iscsi/nolslib.py @@ -157,7 +157,7 @@ class Nols(object): # On récupère le mapping pour chercher un lun de libre map = self.volume_map() - lun = 0 + lun = 1 while lun in map: lun = lun + 1 # Création du volume diff --git a/gestion/iscsi/udev_update_symlinks.py b/gestion/iscsi/udev_update_symlinks.py index 2167882c..e750d23d 100644 --- a/gestion/iscsi/udev_update_symlinks.py +++ b/gestion/iscsi/udev_update_symlinks.py @@ -29,7 +29,10 @@ 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:] + else: + symlink = 'iscsi_' + ugin.getname(device) line = line.rsplit('-', 1)[1] _ = links.setdefault(line, [symlink, device]) return links @@ -41,7 +44,7 @@ def make_link(couple): 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 'empty' in diskstatus: + 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) @@ -51,7 +54,7 @@ def make_link(couple): sys.stdout.write(coul("ECHEC", 'rouge')) res = False sys.stdout.write('\n') - elif os.path.islink(sym) and 'empty' in diskstatus: + 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) @@ -76,7 +79,28 @@ def make_link(couple): res = None return res +def clean_iscsi_links(): + """Nettoie les liens présents dans /dev/iscsi_*""" + links = {} + # os.listdir retourne une liste désordonnée, l'idée est de privilégier + # l'ordre lexicographique pour que l'état du retour soit identifié. + state = subprocess.Popen(['ls', '/dev'], stdout=subprocess.PIPE) + state = state.stdout.readlines() + for line in state: + line = line.replace('\n', '') + if line.startswith('iscsi_'): + device = os.readlink('/dev/'+line) # de la forme ../../sdb42 + symlink = line + make_link((symlink, device)) + return links + if __name__ == '__main__': + if "-h" in sys.argv or "--help" in sys.argv: + print "Usage: udev_update_symlinks.py " + print " -h, --help : print this message and exit" + print " --clean : clean empty links no longer referenced" + if "--clean" in sys.argv: + clean_iscsi_links() nothing = True links = store_iscsi_volumes() for path in links.keys(): diff --git a/gestion/iscsi/update.sh b/gestion/iscsi/update.sh index 1a8ebbba..ce4c051d 100755 --- a/gestion/iscsi/update.sh +++ b/gestion/iscsi/update.sh @@ -37,4 +37,4 @@ exec_cmd "Rescan des volumes iscsi" \ iscsiadm -m session --rescan exec_cmd "Mises à jours des liens symboliques dans /dev" \ - python /usr/scripts/gestion/iscsi/udev_update_symlinks.py + python /usr/scripts/gestion/iscsi/udev_update_symlinks.py --clean