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
alphabétiques minuscules et le -
"""
if new==None:
return decode(self._data.get('host',[''])[0])
if new == None:
return decode(self._data.get('host', [''])[0])
new = self.__host_alias('nom de machine',new)
self._set('host',[new])
new = self.__host_alias('nom de machine', new)
self._set('host', [new])
return new.split('.')[0]
def prise(self,new=None):
def prise(self, new=None):
""" Retourne ou défini la prise associée à la machine
La définition n'est possible que si la machine est
une machine de l'assoce.
@ -2310,7 +2310,7 @@ class Machine(base_classes_crans):
"""
if new == None:
if self.proprietaire().__class__ == crans:
return decode(self._data.get('prise',['N/A'])[0])
return decode(self._data.get('prise', ['N/A'])[0])
else:
chbre = self.proprietaire().chbre()
if chbre and chbre[0].lower() in annuaires.chbre_prises.keys():
@ -2321,48 +2321,49 @@ class Machine(base_classes_crans):
# Attribution de la prise
new=preattr(new)[1]
if new == 'N/A' :
if self._data.has_key('prise') :
self._set('prise',[])
if new == 'N/A':
if self._data.has_key('prise'):
self._set('prise', [])
self._data.pop('prise')
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')
self._set('prise',[new.upper()])
self._set('prise', [new.upper()])
return new
def alias(self,new=None):
def alias(self, new=None):
"""
Création ou visualisation des alias d'une machine.
Même sytème d'argument que la méthode info.
"""
if not self._data.has_key('hostAlias'):
self._data['hostAlias']=[]
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
index = new[0]
new = new[1]
if new=='':
if new == '':
liste.pop(index)
self._set('hostAlias',liste)
self._set('hostAlias', liste)
return liste
else:
index=-1
index = -1
# Test si valide
new = self.__host_alias('alias',new)
new = self.__host_alias('alias', new)
if index!=-1:
liste[index] = new
else:
liste = liste + [ new ]
liste = liste + [new]
self._set('hostAlias',liste)
self._set('hostAlias', liste)
return liste
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 ip=<automatique> attribue la permière IP libre du sous réseau.
"""
if ip==None:
if ip == None:
if self._data.has_key('ipHostNumber'):
return decode(self._data['ipHostNumber'][0])
elif self.proprietaire().__class__ == crans and self.__typ != 'borne':
@ -2401,12 +2402,12 @@ class Machine(base_classes_crans):
except:
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
for ne in net:
ip = ne.split('/')[0]
ip = ip.split('.')
n=[]
n = []
for i in ip:
n.append(int(i))
while 1:
@ -2415,9 +2416,9 @@ class Machine(base_classes_crans):
else:
n[2] += 1
n[3] = 0
if n[2]==255: break
if n[2] == 255: break
ip = "%d.%d.%d.%d" % tuple(n)
if not iptools.AddrInNet(ip,ne):
if not iptools.AddrInNet(ip, ne):
# On est allé trop loin
break
pool_ip.append(ip)
@ -2432,14 +2433,14 @@ class Machine(base_classes_crans):
break
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:
# L'ip est elle dans le bon sous réseau ?
# (accessoirement teste si l'IP est valide et ne correspond pas
# à l'adresse de broadcast ou de réseau)
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
ip = iptools.DecToQuad(iptools.QuadToDec(ip))
# L'ip est-elle déja allouée ?
@ -2449,7 +2450,7 @@ class Machine(base_classes_crans):
# Lock ip
self.lock('ipHostNumber',ip)
self._set('ipHostNumber',[ip])
self._set('ipHostNumber', [ip])
return ip
def exempt(self, new=None):
@ -2484,11 +2485,11 @@ class Machine(base_classes_crans):
# On ajoute pas de réseau vide
return liste
# Ajout à la liste
liste = liste + [ new ]
liste = liste + [new]
else:
raise TypeError
self._set('exempt',liste)
self._set('exempt', liste)
return liste
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)
"""
if not self.__proprietaire:
res = self.conn.search_s(','.join(self.dn.split(',')[1:]),0)
if 'adherent' in res[0][1]['objectClass'] :
self.__proprietaire = adherent(res[0],self._modifiable,self.conn)
elif 'club' in res[0][1]['objectClass'] :
self.__proprietaire = club(res[0],self._modifiable,self.conn)
res = self.conn.search_s(','.join(self.dn.split(',')[1:]), 0)
if 'adherent' in res[0][1]['objectClass']:
self.__proprietaire = adherent(res[0], self._modifiable, self.conn)
elif 'club' in res[0][1]['objectClass']:
self.__proprietaire = club(res[0], self._modifiable, self.conn)
elif 'invite' in res[0][0]:
self.__proprietaire = invite(self.conn)
else:
@ -2513,24 +2514,24 @@ class Machine(base_classes_crans):
Enregistre la machine courante dans la base LDAP
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.')
if not self._init_data:
# 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 ?
if 'ipHostNumber' in self.modifs or 'macAddress' in self.modifs:
reconf_ip = self._init_data.get('ipHostNumber',[])
reconf_ip += self._data.get('ipHostNumber',[])
reconf_ip = self._init_data.get('ipHostNumber', [])
reconf_ip += self._data.get('ipHostNumber', [])
else:
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
self._save()
@ -2542,14 +2543,14 @@ class Machine(base_classes_crans):
# Reconfiguration firewalls et dhcps
if reconf_ip:
self.services_to_restart('macip',reconf_ip )
self.services_to_restart('macip', reconf_ip)
if self.__typ == 'wifi' :
self.services_to_restart('ragnarok-dhcp')
else:
self.services_to_restart('rouge-dhcp')
if 'ports' in self.modifs:
self.services_to_restart('komaz-ports', [ self.ip() ] )
self.services_to_restart('mail_modif',['ip=%s' % self.ip()])
self.services_to_restart('komaz-ports', [self.ip()])
self.services_to_restart('mail_modif', ['ip=%s' % self.ip()])
# Reconfiguration DNS ?
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')
# 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')
# Regénération blackliste nécessaire ?
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:
self.services_to_restart(s,[ self.ip() ] )
self.services_to_restart(s, [self.ip()])
# Regénération de l'autostatus et mail de changmement ?
if self.proprietaire().__class__ == crans:
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
if 'exempt' in self.modifs or ('ipHostNumber' in self.modifs and self.exempt()):
@ -2586,19 +2588,19 @@ class Machine(base_classes_crans):
self.modifs = {}
# 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
def delete(self,comment=''):
def delete(self, comment=''):
""" Destruction de la machines """
if self.proprietaire().__class__ == crans and not isadm:
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.__proprietaire = None # On oublie le propriétaire
self._delete(self.dn,comment)
self.__proprietaire = None # On oublie le propriétaire
self._delete(self.dn, comment)
# Services à redémarrer
if self.__typ == 'wifi' :
@ -2612,28 +2614,31 @@ class Machine(base_classes_crans):
self.services_to_restart('surveillance_machines')
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 """
return self.__port(ports,'portTCPin')
def portTCPout(self,ports=None):
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):
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):
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')
return self.__port(ports, 'portUDPout')
def __port(self,ports,champ):
def __port(self, ports, champ):
if ports == None:
return self._data.get(champ,[''])[0]
return self._data.get(champ, [''])[0]
ports = preattr(ports)[1]
if ports and self._data.get(champ)!=ports:
self._data[champ] = [ ports ]
if ports and self._data.get(champ) != ports:
self._data[champ] = [ports]
if 'ports' not in self.modifs:
self.modifs.setdefault('ports', None)
elif self._data.has_key(champ):