From 4b82930d86f14e99b6ae4f08c6de18197fda9e80 Mon Sep 17 00:00:00 2001 From: bernat Date: Thu, 9 Sep 2004 08:54:16 +0200 Subject: [PATCH] On tire les IP au hasard : beaucoup plus rapide darcs-hash:20040909065416-d1718-897656530fac43b6a46432b1114881dfd0a1e9ce.gz --- gestion/ldap_crans.py | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/gestion/ldap_crans.py b/gestion/ldap_crans.py index df969fde..33db67f7 100755 --- a/gestion/ldap_crans.py +++ b/gestion/ldap_crans.py @@ -31,6 +31,8 @@ from time import sleep,localtime import ldap_secret +random.seed() # On initialise le générateur aléatoire + ################################################################################## ### Différent services redémarrables #dns, dhcp, firewall, bornes_wifi(nom_borne), conf_wifi, bl_carte_etudiant, switch(chbre) @@ -1716,6 +1718,7 @@ class machine(base_classes_crans) : raise RuntimeError(u'Impossible de trouver le réseau où placer la machine.') if ip=='' : + pool_ip = [] # Pool d'IP à tester for ne in net : ip = ne.split('/')[0] ip = ip.split('.') @@ -1728,19 +1731,25 @@ class machine(base_classes_crans) : else : n[2] += 1 n[3] = 0 - if n[2]==255 : raise RuntimeError(u'Impossible de trouver une IP libre.') - ip = "%d.%d.%d.%d" % tuple(n) + if n[2]==255 : break + ip = "%d.%d.%d.%d" % tuple(n) + if not iptools.AddrInNet(ip,ne): + # On est allé trop loin + break + pool_ip.append(ip) + + # On va prendre choisir une IP au hasard dans le pool des IP dispo + random.shuffle(pool_ip) + while len(pool_ip) > 0: + ip = pool_ip.pop() # On choisit une IP if not self.exist('ipHostNumber=%s' % ip) : # On a trouvé la première ip libre break - - # Test final - if not iptools.AddrInNet(ip,ne) : - # Rien dans ce sous réseau - ip = '' - else : - break - + + if ip: + # On a trouvé une IP + break + if ip =='' : raise RuntimeError(u'Plus d\'IP libres dans %s.' % string.join(net,' et ') )