Esthtisme.
darcs-hash:20060319181713-68412-20a0d10ba8997d1cf10fc241e4b8cad72a289a42.gz
This commit is contained in:
parent
9ecffdc4fe
commit
f9af7f43ae
1 changed files with 71 additions and 66 deletions
|
@ -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):
|
|
||||||
|
def portTCPout(self, ports=None):
|
||||||
""" Ports TCP ouverts vers l'extérieur pour la machine """
|
""" Ports TCP ouverts vers l'extérieur pour la machine """
|
||||||
return self.__port(ports,'portTCPout')
|
return self.__port(ports, 'portTCPout')
|
||||||
def portUDPin(self,ports=None):
|
|
||||||
|
def portUDPin(self, ports=None):
|
||||||
""" Ports UDP ouverts vers l'extérieur pour la machine """
|
""" Ports UDP ouverts vers l'extérieur pour la machine """
|
||||||
return self.__port(ports,'portUDPin')
|
return self.__port(ports, 'portUDPin')
|
||||||
def portUDPout(self,ports=None):
|
|
||||||
|
def portUDPout(self, ports=None):
|
||||||
""" Ports UDP ouverts vers l'extérieur pour la machine """
|
""" 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:
|
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):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue