Esthtisme.

darcs-hash:20060319181713-68412-20a0d10ba8997d1cf10fc241e4b8cad72a289a42.gz
This commit is contained in:
glondu 2006-03-19 19:17:13 +01:00
parent 9ecffdc4fe
commit f9af7f43ae

View file

@ -2295,14 +2295,14 @@ class Machine(base_classes_crans):
Un nom de machine valide ne comporte que des caractères Un nom de machine valide ne comporte que des caractères
alphabétiques minuscules et le - alphabétiques minuscules et le -
""" """
if new==None: if new == None:
return decode(self._data.get('host',[''])[0]) return decode(self._data.get('host', [''])[0])
new = self.__host_alias('nom de machine',new) new = self.__host_alias('nom de machine', new)
self._set('host',[new]) self._set('host', [new])
return new.split('.')[0] return new.split('.')[0]
def prise(self,new=None): def prise(self, new=None):
""" Retourne ou défini la prise associée à la machine """ Retourne ou défini la prise associée à la machine
La définition n'est possible que si la machine est La définition n'est possible que si la machine est
une machine de l'assoce. une machine de l'assoce.
@ -2310,7 +2310,7 @@ class Machine(base_classes_crans):
""" """
if new == None: if new == None:
if self.proprietaire().__class__ == crans: if self.proprietaire().__class__ == crans:
return decode(self._data.get('prise',['N/A'])[0]) return decode(self._data.get('prise', ['N/A'])[0])
else: else:
chbre = self.proprietaire().chbre() chbre = self.proprietaire().chbre()
if chbre and chbre[0].lower() in annuaires.chbre_prises.keys(): if chbre and chbre[0].lower() in annuaires.chbre_prises.keys():
@ -2321,48 +2321,49 @@ class Machine(base_classes_crans):
# Attribution de la prise # Attribution de la prise
new=preattr(new)[1] new=preattr(new)[1]
if new == 'N/A' : if new == 'N/A':
if self._data.has_key('prise') : if self._data.has_key('prise'):
self._set('prise',[]) self._set('prise', [])
self._data.pop('prise') self._data.pop('prise')
return return
if not sre.match('^[a-cg-jmp][0-6][0-5][0-9]$',new.lower()): if not sre.match('^[a-cg-jmp][0-6][0-5][0-9]$', new.lower()):
raise ValueError('Prise incorrecte') raise ValueError('Prise incorrecte')
self._set('prise',[new.upper()]) self._set('prise', [new.upper()])
return new return new
def alias(self,new=None): def alias(self, new=None):
""" """
Création ou visualisation des alias d'une machine. Création ou visualisation des alias d'une machine.
Même sytème d'argument que la méthode info. Même sytème d'argument que la méthode info.
""" """
if not self._data.has_key('hostAlias'): if not self._data.has_key('hostAlias'):
self._data['hostAlias']=[] self._data['hostAlias'] = []
liste = list(self._data['hostAlias']) liste = list(self._data['hostAlias'])
if new==None: return map(decode,liste) if new == None:
return map(decode, liste)
if type(new)==list: if type(new) == list:
# Modif # Modif
index = new[0] index = new[0]
new = new[1] new = new[1]
if new=='': if new == '':
liste.pop(index) liste.pop(index)
self._set('hostAlias',liste) self._set('hostAlias', liste)
return liste return liste
else: else:
index=-1 index = -1
# Test si valide # Test si valide
new = self.__host_alias('alias',new) new = self.__host_alias('alias', new)
if index!=-1: if index!=-1:
liste[index] = new liste[index] = new
else: else:
liste = liste + [ new ] liste = liste + [new]
self._set('hostAlias',liste) self._set('hostAlias', liste)
return liste return liste
def ip(self, ip=None): def ip(self, ip=None):
@ -2372,7 +2373,7 @@ class Machine(base_classes_crans):
Si l'IP n'est pas définie retourne <automatique>. Si l'IP n'est pas définie retourne <automatique>.
Si ip=<automatique> attribue la permière IP libre du sous réseau. Si ip=<automatique> attribue la permière IP libre du sous réseau.
""" """
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__ == crans and self.__typ != 'borne': elif self.proprietaire().__class__ == crans and self.__typ != 'borne':
@ -2401,12 +2402,12 @@ class Machine(base_classes_crans):
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.')
if ip=='<automatique>': if ip == '<automatique>':
pool_ip = [] # Pool d'IP à tester pool_ip = [] # Pool d'IP à tester
for ne in net: for ne in net:
ip = ne.split('/')[0] ip = ne.split('/')[0]
ip = ip.split('.') ip = ip.split('.')
n=[] n = []
for i in ip: for i in ip:
n.append(int(i)) n.append(int(i))
while 1: while 1:
@ -2415,9 +2416,9 @@ class Machine(base_classes_crans):
else: else:
n[2] += 1 n[2] += 1
n[3] = 0 n[3] = 0
if n[2]==255: break if n[2] == 255: break
ip = "%d.%d.%d.%d" % tuple(n) ip = "%d.%d.%d.%d" % tuple(n)
if not iptools.AddrInNet(ip,ne): if not iptools.AddrInNet(ip, ne):
# On est allé trop loin # On est allé trop loin
break break
pool_ip.append(ip) pool_ip.append(ip)
@ -2432,14 +2433,14 @@ class Machine(base_classes_crans):
break break
if not len(pool_ip): if not len(pool_ip):
raise RuntimeError(u'Plus d\'IP libres dans %s.' % string.join(net,' et ') ) raise RuntimeError(u'Plus d\'IP libres dans %s.' % string.join(net, ' et '))
else: else:
# 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)
if not iptools.AddrInNet(ip,net): if not iptools.AddrInNet(ip,net):
raise ValueError(u'IP invalide ou en dehors du sous réseau alloué.',1) raise ValueError(u'IP invalide ou en dehors du sous réseau alloué.', 1)
# Reformatage # Reformatage
ip = iptools.DecToQuad(iptools.QuadToDec(ip)) ip = iptools.DecToQuad(iptools.QuadToDec(ip))
# L'ip est-elle déja allouée ? # L'ip est-elle déja allouée ?
@ -2449,7 +2450,7 @@ class Machine(base_classes_crans):
# Lock ip # Lock ip
self.lock('ipHostNumber',ip) self.lock('ipHostNumber',ip)
self._set('ipHostNumber',[ip]) self._set('ipHostNumber', [ip])
return ip return ip
def exempt(self, new=None): def exempt(self, new=None):
@ -2484,11 +2485,11 @@ class Machine(base_classes_crans):
# On ajoute pas de réseau vide # On ajoute pas de réseau vide
return liste return liste
# Ajout à la liste # Ajout à la liste
liste = liste + [ new ] liste = liste + [new]
else: else:
raise TypeError raise TypeError
self._set('exempt',liste) self._set('exempt', liste)
return liste return liste
def proprietaire(self): def proprietaire(self):
@ -2496,11 +2497,11 @@ class Machine(base_classes_crans):
retroune le propriétaire de la machine (classe adherent, club ou crans ou invite) retroune le propriétaire de la machine (classe adherent, club ou crans ou invite)
""" """
if not self.__proprietaire: if not self.__proprietaire:
res = self.conn.search_s(','.join(self.dn.split(',')[1:]),0) res = self.conn.search_s(','.join(self.dn.split(',')[1:]), 0)
if 'adherent' in res[0][1]['objectClass'] : if 'adherent' in res[0][1]['objectClass']:
self.__proprietaire = adherent(res[0],self._modifiable,self.conn) self.__proprietaire = adherent(res[0], self._modifiable, self.conn)
elif 'club' in res[0][1]['objectClass'] : elif 'club' in res[0][1]['objectClass']:
self.__proprietaire = club(res[0],self._modifiable,self.conn) self.__proprietaire = club(res[0], self._modifiable, self.conn)
elif 'invite' in res[0][0]: elif 'invite' in res[0][0]:
self.__proprietaire = invite(self.conn) self.__proprietaire = invite(self.conn)
else: else:
@ -2513,24 +2514,24 @@ class Machine(base_classes_crans):
Enregistre la machine courante dans la base LDAP Enregistre la machine courante dans la base LDAP
Retourne une chaîne indiquant les opération effectuées. Retourne une chaîne indiquant les opération effectuées.
""" """
if self.proprietaire().__class__ == crans and not ( isadm or user_tests.getuser() == 'www-data' ): if self.proprietaire().__class__ == crans and not (isadm or user_tests.getuser() == 'www-data'):
raise EnvironmentError(u'Il faut être administrateur pour effectuer cette opération.') raise EnvironmentError(u'Il faut être administrateur pour effectuer cette opération.')
if not self._init_data: if not self._init_data:
# Nouvelle machine => configuration prise # Nouvelle machine => configuration prise
self.services_to_restart('switch',[self.proprietaire().chbre()]) self.services_to_restart('switch', [self.proprietaire().chbre()])
ret ='' ret = ''
# Besoin de redémarrer les firewalls ? # Besoin de redémarrer les firewalls ?
if 'ipHostNumber' in self.modifs or 'macAddress' in self.modifs: if 'ipHostNumber' in self.modifs or 'macAddress' in self.modifs:
reconf_ip = self._init_data.get('ipHostNumber',[]) reconf_ip = self._init_data.get('ipHostNumber', [])
reconf_ip += self._data.get('ipHostNumber',[]) reconf_ip += self._data.get('ipHostNumber', [])
else: else:
reconf_ip = [] reconf_ip = []
# On vire les doublons dans reconf_ip # On vire les doublons dans reconf_ip
reconf_ip = list(dict(zip(reconf_ip,[None]*len(reconf_ip)))) reconf_ip = list(dict(zip(reconf_ip, [None]*len(reconf_ip))))
# Enregistrement # Enregistrement
self._save() self._save()
@ -2542,14 +2543,14 @@ 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 self.__typ == 'wifi' :
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')
if 'ports' in self.modifs: if 'ports' in self.modifs:
self.services_to_restart('komaz-ports', [ self.ip() ] ) self.services_to_restart('komaz-ports', [self.ip()])
self.services_to_restart('mail_modif',['ip=%s' % self.ip()]) self.services_to_restart('mail_modif', ['ip=%s' % self.ip()])
# Reconfiguration DNS ? # Reconfiguration DNS ?
if 'host' in self.modifs or 'ipHostNumber' in self.modifs or 'hostAlias' in self.modifs: if 'host' in self.modifs or 'ipHostNumber' in self.modifs or 'hostAlias' in self.modifs:
@ -2560,19 +2561,20 @@ 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') and ( 'ipHostNumber' in self.modifs or 'host' in self.modifs or 'macAddress' in self.modifs ): if self.__typ in ('wifi', 'borne') \
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')
# Regénération blackliste nécessaire ? # Regénération blackliste nécessaire ?
bl = self.blacklist_actif() bl = self.blacklist_actif()
if bl and ( 'ipHostNumber' in self.modifs or 'host' in self.modifs ): if bl and ('ipHostNumber' in self.modifs or 'host' in self.modifs):
for s in bl: for s in bl:
self.services_to_restart(s,[ self.ip() ] ) self.services_to_restart(s, [self.ip()])
# Regénération de l'autostatus et mail de changmement ? # Regénération de l'autostatus et mail de changmement ?
if self.proprietaire().__class__ == crans: if self.proprietaire().__class__ == crans:
self.services_to_restart('autostatus') self.services_to_restart('autostatus')
self.services_to_restart('mail_modif',['ip=%s' % self.ip()]) self.services_to_restart('mail_modif', ['ip=%s' % self.ip()])
# Synchronisation avec la base pgsql pour les exemptions # Synchronisation avec la base pgsql pour les exemptions
if 'exempt' in self.modifs or ('ipHostNumber' in self.modifs and self.exempt()): if 'exempt' in self.modifs or ('ipHostNumber' in self.modifs and self.exempt()):
@ -2586,19 +2588,19 @@ class Machine(base_classes_crans):
self.modifs = {} self.modifs = {}
# Message de sortie # Message de sortie
ret += coul(u"Machine %s enregistrée avec succès." % self._data['host'][0],'vert') ret += coul(u"Machine %s enregistrée avec succès." % self._data['host'][0], 'vert')
return ret return ret
def delete(self,comment=''): def delete(self, comment=''):
""" Destruction de la machines """ """ Destruction de la machines """
if self.proprietaire().__class__ == crans and not isadm: if self.proprietaire().__class__ == crans and not isadm:
raise EnvironmentError(u'Il faut être administrateur pour effectuer cette opération.') raise EnvironmentError(u'Il faut être administrateur pour effectuer cette opération.')
self.proprio = self.__proprietaire.Nom() # On met dans un coin le nom du proprio self.proprio = self.__proprietaire.Nom() # On met dans un coin le nom du proprio
self.__proprietaire = None # On oublie le propriétaire self.__proprietaire = None # On oublie le propriétaire
self._delete(self.dn,comment) self._delete(self.dn, comment)
# Services à redémarrer # Services à redémarrer
if self.__typ == 'wifi' : if self.__typ == 'wifi' :
@ -2612,28 +2614,31 @@ class Machine(base_classes_crans):
self.services_to_restart('surveillance_machines') self.services_to_restart('surveillance_machines')
self.services_to_restart('dns') self.services_to_restart('dns')
self.services_to_restart('macip',[self.ip()] ) self.services_to_restart('macip', [self.ip()])
def portTCPin(self,ports=None): def portTCPin(self, ports=None):
""" Ports TCP ouverts depuis l'extérieur pour la machine """ """ Ports TCP ouverts depuis l'extérieur pour la machine """
return self.__port(ports,'portTCPin') return self.__port(ports, 'portTCPin')
def portTCPout(self,ports=None):
""" Ports TCP ouverts vers l'extérieur pour la machine """
return self.__port(ports,'portTCPout')
def portUDPin(self,ports=None):
""" Ports UDP ouverts vers l'extérieur pour la machine """
return self.__port(ports,'portUDPin')
def portUDPout(self,ports=None):
""" Ports UDP ouverts vers l'extérieur pour la machine """
return self.__port(ports,'portUDPout')
def __port(self,ports,champ): def portTCPout(self, ports=None):
""" Ports TCP ouverts vers l'extérieur pour la machine """
return self.__port(ports, 'portTCPout')
def portUDPin(self, ports=None):
""" Ports UDP ouverts vers l'extérieur pour la machine """
return self.__port(ports, 'portUDPin')
def portUDPout(self, ports=None):
""" Ports UDP ouverts vers l'extérieur pour la machine """
return self.__port(ports, 'portUDPout')
def __port(self, ports, champ):
if ports == None: if ports == None:
return self._data.get(champ,[''])[0] return self._data.get(champ, [''])[0]
ports = preattr(ports)[1] ports = preattr(ports)[1]
if ports and self._data.get(champ)!=ports: if ports and self._data.get(champ) != ports:
self._data[champ] = [ ports ] self._data[champ] = [ports]
if 'ports' not in self.modifs: if 'ports' not in self.modifs:
self.modifs.setdefault('ports', None) self.modifs.setdefault('ports', None)
elif self._data.has_key(champ): elif self._data.has_key(champ):