On fait en sorte que prise_etat gère mieux les prises virtuelles, pour que whos_lc arrête de planter.

This commit is contained in:
Pierre-Elliott Bécue 2015-03-02 20:59:59 +01:00
parent cb3f063dc6
commit 15e83e1844
3 changed files with 26 additions and 17 deletions

View file

@ -457,4 +457,4 @@ dhcp_servers = ['dhcp.adm.crans.org', 'isc.adm.crans.org']
# Le bâtiment virtuel dans lequel on place des chambres qui n'existent pas, pour faire # Le bâtiment virtuel dans lequel on place des chambres qui n'existent pas, pour faire
# des tests. # des tests.
bat_virtuel = 'v' bats_virtuels = ['v']

View file

@ -25,7 +25,7 @@ import netsnmp
if '/usr/scripts' not in sys.path: if '/usr/scripts' not in sys.path:
path.append('/usr/scripts') path.append('/usr/scripts')
import gestion.secrets_new as secrets import gestion.secrets_new as secrets
from gestion.config import vlans from gestion.config import vlans, bats_virtuels
from gestion.annuaires_pg import chbre_prises, all_switchs from gestion.annuaires_pg import chbre_prises, all_switchs
try: try:
@ -390,17 +390,27 @@ class hpswitch :
prise = prise.replace('-','') prise = prise.replace('-','')
return self.get(oid + '.' + prise) == 'up' return self.get(oid + '.' + prise) == 'up'
def is_enable(self,prise=0) : def is_fake(self, prise=0):
"""Retourne True ou False selon que le switch est virtuel."""
if self.switch.split('-')[0].replace('bat', '') in bats_virtuels:
return True
return False
def is_enable(self,prise=0):
""" Retoune True ou False suivant si la prise est activée ou non """ Retoune True ou False suivant si la prise est activée ou non
Si prise=all retourne le nombre de prises activées sur le switch """ Si prise=all retourne le nombre de prises activées sur le switch """
if self.switch.split('-')[0].replace('bat', '') in bats_virtuels:
return False
if prise != 'all': prise = int(prise) if prise != 'all': prise = int(prise)
return self.__is('IF-MIB::ifAdminStatus',prise) return self.__is('IF-MIB::ifAdminStatus',prise)
def is_up(self,prise=0) : def is_up(self,prise=0) :
""" Retoune True ou False suivant si la prise est up """ Retoune True ou False suivant si la prise est up
Si prise=all retourne le nombre de prises up sur le switch """ Si prise=all retourne le nombre de prises up sur le switch """
if self.switch.split('-')[0].replace('bat', '') in bats_virtuels:
return False
if prise != 'all': prise = int(prise) if prise != 'all': prise = int(prise)
return self.__is('IF-MIB::ifOperStatus',prise) return self.__is('IF-MIB::ifOperStatus', prise)
def nom(self,nom=None,prise=0) : def nom(self,nom=None,prise=0) :
""" Retourne ou attribue le nom à la prise fournie """ """ Retourne ou attribue le nom à la prise fournie """
@ -439,13 +449,15 @@ class hpswitch :
def vlans(self, prise = None): def vlans(self, prise = None):
"""Récupère les vlans activés sur la prise 'prise'""" """Récupère les vlans activés sur la prise 'prise'"""
result = []
if self.switch.split('-')[0].replace('bat', '') in bats_virtuels:
return result
if not prise: if not prise:
prise = self.prise prise = self.prise
prise = int(prise) prise = int(prise)
oid_base = 'SNMPv2-SMI::enterprises.11.2.14.11.5.1.7.1.15.3.1.1' oid_base = 'SNMPv2-SMI::enterprises.11.2.14.11.5.1.7.1.15.3.1.1'
oid_format = oid_base + '.%(vlan)d.%(prise)d' oid_format = oid_base + '.%(vlan)d.%(prise)d'
oids = self.walk(oid_base) oids = self.walk(oid_base)
result = []
for vlan_name, vlan in vlans.iteritems(): for vlan_name, vlan in vlans.iteritems():
if oid_format % {'vlan': vlan, 'prise': prise} in oids: if oid_format % {'vlan': vlan, 'prise': prise} in oids:
result.append(vlan_name) result.append(vlan_name)

View file

@ -53,6 +53,8 @@ from affich_tools import *
from ldap_crans import is_actif, crans_ldap, AssociationCrans, hostname from ldap_crans import is_actif, crans_ldap, AssociationCrans, hostname
from ldap_crans import MachineCrans, MachineWifi, BorneWifi from ldap_crans import MachineCrans, MachineWifi, BorneWifi
from ldap_crans import Adherent from ldap_crans import Adherent
from hptools import sw_chbre, ConversationError
import gestion.annuaires_pg as annuaires_pg
import gestion.config as config import gestion.config as config
import ridtools import ridtools
import user_tests import user_tests
@ -613,12 +615,7 @@ def adher_details(adher) :
f += coul(u'Chambre invalide\n','violet') f += coul(u'Chambre invalide\n','violet')
else : else :
# Chambre + prise (d'après annuaire) # Chambre + prise (d'après annuaire)
if adher.chbre()[0].lower() != config.bat_virtuel:
etat, vlans, cablage = prise_etat(adher.chbre()) etat, vlans, cablage = prise_etat(adher.chbre())
else:
etat = coul(u"Chambre virtuelle", "violet")
vlans = ""
cablage = coul(u"Factice", "violet")
f += coul(u'Chambre : ','gras') + u"%s " % chbre f += coul(u'Chambre : ','gras') + u"%s " % chbre
f += u'(%s)' % etat f += u'(%s)' % etat
f += u'\n' f += u'\n'
@ -1159,8 +1156,6 @@ def prise_etat(chbre) :
cablage = u'' cablage = u''
try: try:
# On met aussi l'état # On met aussi l'état
from hptools import sw_chbre, ConversationError
import annuaires_pg
prise = sw_chbre(chbre) prise = sw_chbre(chbre)
vlans += ', '.join(prise.vlans()) vlans += ', '.join(prise.vlans())
if annuaires_pg.is_crans(chbre[0],chbre[1:]) : if annuaires_pg.is_crans(chbre[0],chbre[1:]) :
@ -1201,12 +1196,14 @@ def prise_etat(chbre) :
f += u', ' f += u', '
f += u"%s" % macs.pop() f += u"%s" % macs.pop()
count += 1 count += 1
elif not prise.is_enable() : elif not prise.is_enable():
f+= u', ' + coul(u'prise désactivée','rouge') if prise.is_fake():
f += u', ' + coul(u"Chambre virtuelle", "violet")
else:
f += u', ' + coul(u'prise désactivée','rouge')
else : else :
f+= u', activée, lien non détecté' f += u', activée, lien non détecté'
try: try:
import annuaires_pg
extra_info = annuaires_pg.chbre_commentaire(chbre[0],chbre[1:]).decode('utf-8') extra_info = annuaires_pg.chbre_commentaire(chbre[0],chbre[1:]).decode('utf-8')
if extra_info: if extra_info:
f += u'\n' + ' '*10 + extra_info f += u'\n' + ' '*10 + extra_info