On tire les IP au hasard : beaucoup plus rapide

darcs-hash:20040909065416-d1718-897656530fac43b6a46432b1114881dfd0a1e9ce.gz
This commit is contained in:
bernat 2004-09-09 08:54:16 +02:00
parent 91d18f5d33
commit 4b82930d86

View file

@ -31,6 +31,8 @@ from time import sleep,localtime
import ldap_secret import ldap_secret
random.seed() # On initialise le générateur aléatoire
################################################################################## ##################################################################################
### Différent services redémarrables ### Différent services redémarrables
#dns, dhcp, firewall, bornes_wifi(nom_borne), conf_wifi, bl_carte_etudiant, switch(chbre) #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.') raise RuntimeError(u'Impossible de trouver le réseau où placer la machine.')
if ip=='<automatique>' : if ip=='<automatique>' :
pool_ip = [] # Pool d'IP à tester
for ne in net : for ne in net :
ip = ne.split('/')[0] ip = ne.split('/')[0]
ip = ip.split('.') ip = ip.split('.')
@ -1728,18 +1731,24 @@ class machine(base_classes_crans) :
else : else :
n[2] += 1 n[2] += 1
n[3] = 0 n[3] = 0
if n[2]==255 : raise RuntimeError(u'Impossible de trouver une IP libre.') if n[2]==255 : break
ip = "%d.%d.%d.%d" % tuple(n) 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) : if not self.exist('ipHostNumber=%s' % ip) :
# On a trouvé la première ip libre # On a trouvé la première ip libre
break break
# Test final if ip:
if not iptools.AddrInNet(ip,ne) : # On a trouvé une IP
# Rien dans ce sous réseau break
ip = ''
else :
break
if ip =='' : if ip =='' :
raise RuntimeError(u'Plus d\'IP libres dans %s.' % string.join(net,' et ') ) raise RuntimeError(u'Plus d\'IP libres dans %s.' % string.join(net,' et ') )