[objets.py] OK, I WILL EXPLAIN, DUDE !
* Quelques commentaires sur mon workaround pour les attributs liés.
This commit is contained in:
parent
4fbd45b66c
commit
aeb1a8086f
1 changed files with 18 additions and 4 deletions
22
objets.py
22
objets.py
|
@ -653,13 +653,18 @@ class machine(CransLdapObject):
|
||||||
self._proprio._machines.remove(self)
|
self._proprio._machines.remove(self)
|
||||||
|
|
||||||
def check_changes(self):
|
def check_changes(self):
|
||||||
""" EXPLAIN WAT U DO !!!"""
|
"""Certaines propriétés sont liées les unes aux autres de façon non-
|
||||||
|
intrinsèque à LDAP, parce qu'on veut qu'il en soit ainsi. Cette
|
||||||
|
fonction crée un dictionnaire des choses qui devraient être modifiées,
|
||||||
|
sbm, et le renvoie. Par exemple, si le rid devrait passer de 42 à 1337,
|
||||||
|
alors la clef 'rid' de sbm contiendra le tuple (42, 1337)."""
|
||||||
old = {}
|
old = {}
|
||||||
new = {}
|
new = {}
|
||||||
sbm = {'rid' : (), 'ipHostNumber' : (), 'ip6HostNumber' : ()}
|
sbm = {'rid' : (), 'ipHostNumber' : (), 'ip6HostNumber' : ()}
|
||||||
default = {'rid': -1, 'ipHostNumber': u'', 'macAddress': u''}
|
default = {'rid': -1, 'ipHostNumber': u'', 'macAddress': u''}
|
||||||
for i in ['rid', 'ipHostNumber', 'macAddress']:
|
for i in ['rid', 'ipHostNumber', 'macAddress']:
|
||||||
# Try and may fail, then try again
|
# On stocke dans old et new l'ancienne et la nouvelle
|
||||||
|
# valeur de chaque attribut concerné.
|
||||||
try:
|
try:
|
||||||
old[i] = self.attrs[i][0].value
|
old[i] = self.attrs[i][0].value
|
||||||
except:
|
except:
|
||||||
|
@ -668,6 +673,8 @@ class machine(CransLdapObject):
|
||||||
new[i] = self._modifs[i][0].value
|
new[i] = self._modifs[i][0].value
|
||||||
except:
|
except:
|
||||||
new[i] = default[i]
|
new[i] = default[i]
|
||||||
|
# Si le rid est changé, on met à jour ip4 et 6, en tenant compte
|
||||||
|
# des éventuels changements de mac.
|
||||||
if old['rid'] != new['rid']:
|
if old['rid'] != new['rid']:
|
||||||
nip4 = unicode(crans_utils.ip4_of_rid(new['rid']))
|
nip4 = unicode(crans_utils.ip4_of_rid(new['rid']))
|
||||||
oip4 = unicode(new['ipHostNumber'])
|
oip4 = unicode(new['ipHostNumber'])
|
||||||
|
@ -680,13 +687,17 @@ class machine(CransLdapObject):
|
||||||
oip6 = u""
|
oip6 = u""
|
||||||
if oip6 != nip6:
|
if oip6 != nip6:
|
||||||
sbm['ip6HostNumber'] = (oip6, nip6)
|
sbm['ip6HostNumber'] = (oip6, nip6)
|
||||||
# safer to cast everything to unicode
|
# Les ipHostNumber sont des objets netaddr, on les cast en unicode
|
||||||
|
# si l'ip4 a changé, il suffit de changer le rid, en effet, l'ip6 peut
|
||||||
|
# subsister malgré tout. On retourne alors -1 pour le rid, et on fera
|
||||||
|
# le changement adapté ensuite.
|
||||||
elif unicode(old['ipHostNumber']) != unicode(new['ipHostNumber']):
|
elif unicode(old['ipHostNumber']) != unicode(new['ipHostNumber']):
|
||||||
nrid = crans_utils.rid_of_ip4(new['ipHostNumber'])
|
nrid = crans_utils.rid_of_ip4(new['ipHostNumber'])
|
||||||
orid = new['rid']
|
orid = new['rid']
|
||||||
if nrid != orid:
|
if nrid != orid:
|
||||||
sbm['rid'] = (orid, nrid)
|
sbm['rid'] = (orid, nrid)
|
||||||
# safer not to cast (…)
|
# Les macAddress sont déjà des unicodes.
|
||||||
|
# On change l'ip6
|
||||||
elif old['macAddress'] != new['macAddress']:
|
elif old['macAddress'] != new['macAddress']:
|
||||||
nip6 = unicode(crans_utils.ip6_of_mac(new['macAddress'], new['rid']))
|
nip6 = unicode(crans_utils.ip6_of_mac(new['macAddress'], new['rid']))
|
||||||
try:
|
try:
|
||||||
|
@ -700,6 +711,9 @@ class machine(CransLdapObject):
|
||||||
def validate_changes(self):
|
def validate_changes(self):
|
||||||
sbm = self.check_changes()
|
sbm = self.check_changes()
|
||||||
if sbm['rid']:
|
if sbm['rid']:
|
||||||
|
# Si le rid est à -1, on agit en conséquence si on a une ipv6.
|
||||||
|
# Je me demande simplement pourquoi je l'ai pas fait au dessus, dans
|
||||||
|
# check_changes.
|
||||||
if sbm['rid'][1] == -1:
|
if sbm['rid'][1] == -1:
|
||||||
try:
|
try:
|
||||||
ip6 = unicode(self._modifs['ip6HostNumber'][0])
|
ip6 = unicode(self._modifs['ip6HostNumber'][0])
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue