On se dbarrasse de __typ

darcs-hash:20060326132858-68412-834f82188bf86e0de594a0aaa14bbfc6ba996051.gz
This commit is contained in:
glondu 2006-03-26 15:28:58 +02:00
parent c2fe8df391
commit 821905a295
2 changed files with 34 additions and 43 deletions

View file

@ -321,9 +321,10 @@ NETs = { 'wifi' : [ '138.231.149.0/24', '138.231.150.0/24' ],
NETs_regexp = { 'all' : '^138\.231\.1(3[6789]|4[0123456789]|5[01])\.\d+$' }
# Domaines dans lesquels les machines sont placées suivant leur type
domains = { 'wifi' : 'wifi.crans.org' ,
'fixe' : 'crans.org' ,
'borne': 'wifi.crans.org' }
domains = { 'machineFixe': 'crans.org',
'machineCrans': 'crans.org',
'machineWifi': 'wifi.crans.org',
'borneWifi': 'wifi.crans.org' }
#######################
## Mail de bienvenue ##

View file

@ -2138,7 +2138,7 @@ class Machine(base_classes_crans):
filtre_idn = '(|(objectClass=machineFixe)(objectClass=machineWifi)'
filtre_idn += '(objectClass=machineCrans)(objectClass=borneWifi))'
def __init__(self, parent_or_tuple, typ='fixe', conn=None):
def __init__(self, parent_or_tuple, mode='', conn=None):
"""
parent_or_tuple est :
* soit une instance d'une classe pouvant posséder une machine
@ -2146,25 +2146,29 @@ class Machine(base_classes_crans):
sera alors associée.
* soit directement le tuple définissant une machine (tel que
retourné par les fonctions de recherche ldap)
typ permet de définir le type de machine : wifi ou fixe,
pris en compte uniquement pour une nouvelle machine (parent donné)
Pour édition d'une machine, typ devra être égal à 'w'
Attention, si typ ='w' mais si l'objet est déja locké il n'y a pas
d'erreur, vérifier l'obtention du lock grâce à la valeur de _modifiable
(si ='w' c'est bon)
Pour l'édition d'une machine, mode devra être égal à 'w'
Attention, si mode='w' mais si l'objet est déja locké il n'y a
pas d'erreur, vérifier l'obtention du lock grâce à la valeur de
_modifiable (si ='w' c'est bon)
conn est une instance de la classe de connexion à la base LDAP
"""
# Définition de l'objectClass LDAP à partir du nom de la classe Python
self.objectClass = str(self.__class__).split('.')[-1]
self.objectClass = self.objectClass[0].lower() + self.objectClass[1:]
# Initialisation de la connexion
self.conn = conn
if not self.conn:
self.connect()
self.modifs = {}
t = parent_or_tuple.__class__
if t == tuple:
# Initialisation avec données fournies
self.dn = parent_or_tuple[0]
if typ == 'w':
if mode == 'w':
try:
self.lock(self.idn, self.id())
self._modifiable = 'w'
@ -2176,37 +2180,24 @@ class Machine(base_classes_crans):
self._init_data = parent_or_tuple[1].copy()
self._data = parent_or_tuple[1]
# Type de machine
if self._init_data.has_key('ipsec'):
self.__typ = 'wifi'
elif self._init_data.has_key('puissance'):
self.__typ = 'borne'
else:
self.__typ = 'fixe'
# Propriéraire inconnu mais ce n'est pas grave
self.__proprietaire = None
elif t in [ Adherent, Club, AssociationCrans ] and typ in [ 'fixe' , 'wifi' , 'borne' ]:
elif t in [Adherent, Club, AssociationCrans] and mode != 'w':
# Machine vide
self.__proprietaire = parent_or_tuple
self.dn = parent_or_tuple.dn
self._data = { 'objectClass': [ self.objectClass ] }
self._data = {'objectClass': [self.objectClass]}
self._init_data = {}
self.__typ = typ
self._modifiable = 'w'
chbre = self.__proprietaire.chbre()
# if chbre == 'EXT' and typ == 'fixe':
# if chbre == 'EXT' and mode == 'fixe':
# raise ValueError(u'Il faut une chambre pour pouvoir posséder une machine fixe')
if chbre == '????':
raise ValueError(u'ERREUR: la chambre du propriétaire est inconnue')
if typ == 'wifi':
# Génération de la clef IPsec
self.ipsec(True)
else:
raise TypeError(u'Arguments invalides')
@ -2287,9 +2278,9 @@ class Machine(base_classes_crans):
# Ajout du domaine si necessaire
if new.find('.') == -1:
try:
new += '.' + config.domains[self.__typ]
new += '.' + config.domains[self.objectClass]
except:
raise RuntimeError(u"%s : domaine non trouvé" % champ.capitalize() )
raise RuntimeError(u"%s : domaine non trouvé pour %s" % (champ.capitalize(), self.__class__))
# Pas déja pris ?
if self.exist('(|(host=%s)(hostAlias=%s))' % (new, new)):
@ -2387,7 +2378,7 @@ class Machine(base_classes_crans):
if ip == None:
if self._data.has_key('ipHostNumber'):
return decode(self._data['ipHostNumber'][0])
elif self.proprietaire().__class__ == AssociationCrans and self.__typ != 'borne':
elif isinstance(self.proprietaire(), AssociationCrans) and not isinstance(self, BorneWifi):
return ''
else:
return '<automatique>'
@ -2395,15 +2386,15 @@ class Machine(base_classes_crans):
l, ip = preattr(ip)
# Dans quel réseau la machine doit-elle être placée ?
if self.__typ == 'wifi':
if isinstance(self, MachineWifi):
if self.proprietaire().etudes(0) == "ENS" and self.proprietaire().etudes(1) == "Pers":
# Personnel ENS
net = config.NETs['wifi-ens']
else:
net = config.NETs['wifi']
elif self.__typ == 'borne':
elif isinstance(self, BorneWifi):
net = config.NETs['bornes']
elif self.proprietaire().__class__ == AssociationCrans:
elif isinstance(self.proprietaire(), AssociationCrans):
net = [ '0.0.0.0/0' ]
else:
try:
@ -2551,7 +2542,7 @@ class Machine(base_classes_crans):
# Reconfiguration firewalls et dhcps
if reconf_ip:
self.services_to_restart('macip', reconf_ip)
if self.__typ == 'wifi':
if isinstance(self, MachineWifi):
self.services_to_restart('ragnarok-dhcp')
else:
self.services_to_restart('rouge-dhcp')
@ -2568,7 +2559,7 @@ class Machine(base_classes_crans):
self.services_to_restart('conf_wifi_ng')
# Reconfiguration clients wifi ?
if self.__typ in ('wifi', 'borne') \
if isinstance(self, MachineWifi) or isinstance(self, BorneWifi) \
and ('ipHostNumber' in self.modifs or 'host' in self.modifs or 'macAddress' in self.modifs):
self.services_to_restart('conf_wifi_ng')
@ -2610,7 +2601,7 @@ class Machine(base_classes_crans):
self._delete(self.dn, comment)
# Services à redémarrer
if self.__typ == 'wifi':
if isinstance(self, MachineWifi):
self.services_to_restart('conf_wifi_ng')
self.services_to_restart('ragnarok-dhcp')
else:
@ -2656,7 +2647,6 @@ class Machine(base_classes_crans):
class MachineFixe(Machine):
""" Classe de définition d'une machine fixe """
objectClass = "machineFixe"
def __init__(self, parent_or_tuple, typ='fixe', conn=None):
Machine.__init__(self, parent_or_tuple, typ, conn)
@ -2664,10 +2654,12 @@ class MachineFixe(Machine):
class MachineWifi(Machine):
""" Classe de définition d'une machine wifi """
objectClass = "machineWifi"
def __init__(self, parent_or_tuple, typ='wifi', conn=None):
Machine.__init__(self, parent_or_tuple, typ, conn)
if not isinstance(parent_or_tuple, tuple):
# Initialisaton d'une nouvelle machine wifi
self.ipsec(True)
def ipsec(self, clef=None):
"""
@ -2691,7 +2683,6 @@ class MachineWifi(Machine):
class MachineCrans(Machine):
""" Classe de définition d'une machine du Crans """
objectClass = "machineCrans"
def __init__(self, parent_or_tuple, typ='fixe', conn=None):
Machine.__init__(self, parent_or_tuple, typ, conn)
@ -2699,12 +2690,11 @@ class MachineCrans(Machine):
class BorneWifi(Machine):
""" Classe de définition d'une borne wifi """
objectClass = "borneWifi"
def __init__(self, parent_or_tuple, typ='borne', conn=None):
Machine.__init__(self, parent_or_tuple, typ, conn)
if not isinstance(parent_or_tuple, tuple):
# Initialisaton par défaut spécifique
# Initialisaton d'une nouvelle borne wifi
self._data['canal'] = ['2047']
self._data['puissance'] = ['60']
self._data['hotspot'] = ['FALSE']