[gest_crans] On répare la méthode de préremplissage, et on corrige des bugs

* La méthode de préremplissage posait des locks, les fonctions affectant
 des valeurs ont désormais un argument lock, par défaut à True, pour
 savoir si elles doivent poser des locks
 * La méthode de préremplissage doit aussi affecter une ip
 * Il y avait un decode de trop dans la gestion des blacklistes
This commit is contained in:
Pierre-Elliott Bécue 2013-10-15 00:44:17 +02:00
parent 673e8266e8
commit 337f4906b6
2 changed files with 39 additions and 25 deletions

View file

@ -2823,7 +2823,7 @@ class Machine(BaseClasseCrans):
""" Retourne le nom de la machine """
return self.nom()
def mac(self, mac=None, multi_ok=0):
def mac(self, mac=None, multi_ok=0, lock=True):
"""
Défini ou retourne l'adresse mac de la machine
Adresse valide si:
@ -2867,16 +2867,17 @@ Contactez nounou si la MAC est bien celle d'une carte.""", 3)
raise ValueError(u"Mac déjà utilisée sur le réseau.", 1)
# Lock de la mac
self.lock('macAddress', mac)
if lock:
self.lock('macAddress', mac)
net = self.netv6()
try:
self._set('macAddress', [mac])
if net.size > 1:
self.ipv6(ip6tools.mac_to_ipv6(net, netaddr.EUI(mac)))
self.ipv6(ip6tools.mac_to_ipv6(net, netaddr.EUI(mac)), lock)
else:
self.ipv6(config.ipv6_machines_speciales[int(self.rid())])
self.ipv6(config.ipv6_machines_speciales[int(self.rid())], lock)
except Exception as e:
raise ValueError('La correspondance MAC <-> EUID64 a planté. Tapez PEB et son entourage. (net : %s, mac : %s, exception levée : %s)' % (net, mac, e))
raise ValueError('La correspondance MAC <-> EUID64 a plante. Tapez PEB et son entourage. (net : %s, mac : %s, exception levee : %s)' % (net, mac, e))
return mac
def __host_alias(self, champ, new):
@ -3029,7 +3030,7 @@ Contactez nounou si la MAC est bien celle d'une carte.""", 3)
self._set('sshFingerprint', liste)
return liste
def ip(self, ip=None):
def ip(self, ip=None, lock=True):
"""
Défini ou retourne l'IP de la machine.
Les IP sont stoquées sous forme xxx.xxx.xxx.xxx et doivent être fournies ainsi.
@ -3101,13 +3102,14 @@ Contactez nounou si la MAC est bien celle d'une carte.""", 3)
my_rid = ridtools.Rid(ipv4=ip)
# Lock ip
self.lock('ipHostNumber', ip)
if lock:
self.lock('ipHostNumber', ip)
self._set('ipHostNumber', [ip])
self.rid("%d" % my_rid)
self.rid("%d" % my_rid, lock=lock)
return ip
def rid(self, rid=None):
def rid(self, rid=None, lock=True):
"""
Retourne le rid si rid == None, l'affecte sinon.
"""
@ -3119,7 +3121,8 @@ Contactez nounou si la MAC est bien celle d'une carte.""", 3)
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))
self.lock('rid', '%s' % rid)
if lock:
self.lock('rid', '%s' % rid)
self._set('rid', ['%s' % rid])
def exempt(self, new=None):
@ -3360,7 +3363,7 @@ Contactez nounou si la MAC est bien celle d'une carte.""", 3)
else:
return netaddr.IPNetwork(config.ipv6_machines_speciales[int(self.rid())])
def ipv6(self, ipv6=None):
def ipv6(self, ipv6=None, lock=True):
"""Retourne l'adresse IPv6 correspondant à la machine"""
if ipv6 == None:
@ -3373,11 +3376,11 @@ Contactez nounou si la MAC est bien celle d'une carte.""", 3)
ipv6_t = config.ipv6_machines_speciales[int(self.rid())]
else:
ipv6_t = str(ip6tools.mac_to_ipv6(net, netaddr.EUI(self.mac())))
if ipv6 != ipv6_t:
raise ValueError('L\'ipv6 n\'est pas celle EUID64 attendue. %s, %s' % (ipv6, ipv6_t))
self.lock('ip6HostNumber', ipv6)
if lock:
self.lock('ip6HostNumber', ipv6)
self._set('ip6HostNumber', [ipv6])
def nom6(self):