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

View file

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