ldap_crans.py: rationalise ip()
This commit is contained in:
parent
1df794db38
commit
971abfd950
1 changed files with 46 additions and 31 deletions
|
@ -3254,9 +3254,20 @@ Contactez nounou si la MAC est bien celle d'une carte.""", 3)
|
||||||
except:
|
except:
|
||||||
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.')
|
||||||
|
|
||||||
#On essaye d'attribuer une ipv4, on cherche un rid dispo
|
# Le switch-bloc suivant modifie ip pour le faire correspondre à une
|
||||||
v6 = False
|
# vraie ip et le rid correspondant. Si ip='', cela signifie que l'on ne
|
||||||
if ip == '<automatique>' and not self.rid():
|
# veut plus d'ipv4 (cela arrive si on a un rid ipv6 only par ex)
|
||||||
|
|
||||||
|
# Si <automatique> et self.rid(), recalcule l'ip à partir du rid
|
||||||
|
if ip == '<automatique>' and self.rid():
|
||||||
|
rid = int(self.rid())
|
||||||
|
rid_obj = ridtools.Rid(rid)
|
||||||
|
if rid_obj.ipv4_dispo:
|
||||||
|
ip = rid_obj.ipv4()
|
||||||
|
else:
|
||||||
|
ip = ''
|
||||||
|
#On essaye d'attribuer un rid si ip auto et pas encore de rid
|
||||||
|
elif ip == '<automatique>':
|
||||||
for plage in plage_rid:
|
for plage in plage_rid:
|
||||||
rid_pris = [
|
rid_pris = [
|
||||||
int(elem[1]['rid'][0])
|
int(elem[1]['rid'][0])
|
||||||
|
@ -3269,27 +3280,23 @@ Contactez nounou si la MAC est bien celle d'une carte.""", 3)
|
||||||
if not ridtools.Rid(rid=rid).ipv4_dispo:
|
if not ridtools.Rid(rid=rid).ipv4_dispo:
|
||||||
if not force:
|
if not force:
|
||||||
raise ValueError(u"La machine sera v6 only", 1)
|
raise ValueError(u"La machine sera v6 only", 1)
|
||||||
v6 = True
|
ip = ''
|
||||||
break
|
break
|
||||||
# On vire les ip qui se terminent par 0 ou 255 (toutes, thanks windows)
|
# On vire les ip qui se terminent par 0 ou 255 (toutes, thanks windows)
|
||||||
if rid % 256 != 0 and rid % 256 != 255:
|
if rid % 256 != 0 and rid % 256 != 255:
|
||||||
ip = unicode(ridtools.Rid(rid=rid).ipv4())
|
ip = unicode(ridtools.Rid(rid=rid).ipv4())
|
||||||
break
|
break
|
||||||
# Si on a une ip, ou que la plage est v6, on s'en va
|
# Si on a une ip, on s'en va
|
||||||
if ip != '<automatique>' or v6:
|
if ip != '<automatique>':
|
||||||
break
|
break
|
||||||
|
|
||||||
# Si après tout ca, on a encore auto et que c'est pas une plage v6, ya plus d'ip
|
# Si après tout ca, on a encore auto, c'est qu'il n'y a plus d'ip
|
||||||
if ip == '<automatique>' and not v6:
|
if ip == '<automatique>':
|
||||||
raise RuntimeError(u"Plus d'IP libres dans %s." % ' et '.join(net))
|
raise RuntimeError(u"Plus d'IP (rid) libres dans %s." % ' et '.join(net))
|
||||||
|
|
||||||
elif ip == '':
|
# Sinon, ip fournie, contrôle qu'elle est compatible avec le type machine
|
||||||
self._set('ipHostNumber', [])
|
# et calcule le rid qui va bien avec
|
||||||
ip = None
|
elif ip != '':
|
||||||
|
|
||||||
|
|
||||||
# Si il y a deja une ip, on controle qu'elle correspond bien à son rid
|
|
||||||
elif ip != '<automatique>':
|
|
||||||
# L'ip est elle dans le bon sous-réseau ?
|
# L'ip est elle dans le bon sous-réseau ?
|
||||||
# (accessoirement teste si l'IP est valide et ne correspond pas
|
# (accessoirement teste si l'IP est valide et ne correspond pas
|
||||||
# à l'adresse de broadcast ou de réseau)
|
# à l'adresse de broadcast ou de réseau)
|
||||||
|
@ -3301,21 +3308,29 @@ Contactez nounou si la MAC est bien celle d'une carte.""", 3)
|
||||||
# L'ip est-elle déja allouée ?
|
# L'ip est-elle déja allouée ?
|
||||||
if self.exist('ipHostNumber=%s' % ip):
|
if self.exist('ipHostNumber=%s' % ip):
|
||||||
raise ValueError(u'IP déjà prise.')
|
raise ValueError(u'IP déjà prise.')
|
||||||
|
else: # cas où ip == ''
|
||||||
# On recalcule le rid si il existe pas deja, ou que l'ip est pas v6 only
|
if not self.rid():
|
||||||
if ip != None and not v6 and not self.rid():
|
raise ValueError(u'Vous devez indiquer une ip ou <automatique>')
|
||||||
rid = ridtools.Rid(ipv4=ip)
|
|
||||||
elif self.rid():
|
|
||||||
rid = int(self.rid())
|
rid = int(self.rid())
|
||||||
if rid == '':
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
# Après ce bloc, rid et ip ont été fixés
|
||||||
|
# on calcule maintenant les modifs à lancer
|
||||||
|
old_ip = (self._data.get('ipHostNumber', None) or [''])[0]
|
||||||
|
|
||||||
|
maj_ip = ip != old_ip
|
||||||
|
maj_rid = self.rid() != str(rid)
|
||||||
|
|
||||||
|
# Et on fait les modifs, ip d'abord, car self.rid() pourrait
|
||||||
|
# faire des tests supplémentaires
|
||||||
|
if maj_ip:
|
||||||
# Lock ip
|
# Lock ip
|
||||||
if lock and ip and ip != '<automatique>':
|
if lock and ip:
|
||||||
self.lock('ipHostNumber', ip)
|
self.lock('ipHostNumber', ip)
|
||||||
self._set('ipHostNumber', [ip])
|
self._set('ipHostNumber', [ip] if ip else [])
|
||||||
|
|
||||||
|
if maj_rid:
|
||||||
|
self.rid(str(rid), lock=lock)
|
||||||
|
|
||||||
self.rid("%d" % rid, lock=lock)
|
|
||||||
return ip
|
return ip
|
||||||
|
|
||||||
def rid(self, rid=None, lock=True):
|
def rid(self, rid=None, lock=True):
|
||||||
|
@ -3325,14 +3340,14 @@ Contactez nounou si la MAC est bien celle d'une carte.""", 3)
|
||||||
if rid == None:
|
if rid == None:
|
||||||
return self._data.get('rid', [''])[0]
|
return self._data.get('rid', [''])[0]
|
||||||
|
|
||||||
if self.ip() != '<automatique>':
|
if self.ip() not in ['<automatique>', '']:
|
||||||
rid_t = ridtools.Rid(ipv4=self.ip())
|
rid_t = ridtools.Rid(ipv4=self.ip())
|
||||||
if int(rid_t) != int(rid):
|
if int(rid_t) != int(rid):
|
||||||
raise ValueError('L\'ip et le rid doivent correspondre. rid : %s, ip : %s, rid_t : %s' % (int(rid), self.ip(), rid_t))
|
raise ValueError('L\'ip et le rid doivent correspondre. rid : %s, ip : %s, rid_t : %s' % (int(rid), self.ip(), rid_t))
|
||||||
|
|
||||||
if lock:
|
if lock:
|
||||||
self.lock('rid', '%s' % rid)
|
self.lock('rid', str(rid))
|
||||||
self._set('rid', ['%s' % rid])
|
self._set('rid', [str(rid)])
|
||||||
|
|
||||||
def exempt(self, new=None):
|
def exempt(self, new=None):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue