Commit fdf7ae8e authored by Hamza Dely's avatar Hamza Dely

[majswitchs2] Met à jour la base LDAP avant de générer une configuration

parent bb82fe91
......@@ -466,26 +466,6 @@ def get_bat_num(hostname):
num l'entier numéro du switch"""
return (hostname[3].lower(), int(hostname[5]))
def get_header(hostname):
from gestion.majswitch2 import get_version
header = None
# On commence par chercher le header dans la base LDAP
try:
switch = ldap.search(
u'(&(host=%s.switches.crans.org)'
u'(objectClass=switchCrans))' % hostname
)[0]
for line, com in enumerate(switch['info']):
if com.value.startswith(';'):
header = com.value.encode('utf-8')
except (IndexError, KeyError):
pass
# S'il n'y est pas, on fallback sur celui du switch en prod'
if header is None:
firmware, model = get_version(hostname + ".switches.crans.org")
header = "; %s Configuration Editor; Created on release #%s" % (model, firmware)
return header
def conf_switch(hostname):
"""Affiche la configuration d'un switch"""
bat, sw_num = get_bat_num(hostname)
......@@ -522,21 +502,21 @@ def conf_switch(hostname):
}
try:
data['config_header'] = get_header(hostname)
except:
sys.stderr.write(
u"Assurez-vous que le switch est bien connecté "
u"au réseau pour générer automatiquement son header...".encode('utf-8')
)
for com in switch['info']:
if com.value.startswith(';'):
data['config_header'] = com.value.encode('utf-8')
break
else:
print(((u'Impossible de déterminer le header à utiliser pour %s;' +
u"Utilisation d'une valeur par défaut (remplir ldap)")
% switch).encode('utf-8'), file=sys.stderr)
print(
(
u'Impossible de déterminer le header à utiliser pour %s;'
u"Utilisation d'une valeur par défaut (remplir ldap)" % switch
).encode('utf-8'),
file=sys.stderr
)
data['config_header']= '; J4899A Configuration Editor; Created on release #H.10.50'
except KeyError:
data['config_header']= '; J4899A Configuration Editor; Created on release #H.10.50'
imodel = data['config_header'].split(' ', 2)[1]
if imodel == "J9145A":
......@@ -639,28 +619,6 @@ def conf_switch(hostname):
# On render :
return tpl_env.get_template('switch_conf.tpl').render(**data).encode('utf-8')
def ldap_header_check(hostname):
switch = ldap.search(u'(&(host=%s.switches.crans.org)'
'(objectClass=switchCrans))' % hostname, mode='rw')[0]
ldap_header = None
header_line = None
for line, com in enumerate(switch['info']):
if com.value.startswith(';'):
ldap_header = com.value.encode('utf-8')
header_line = line
correct_header = get_header(hostname)
if not ldap_header or ldap_header != correct_header:
print("Le header ldap n'est pas correct, il devrait être %s" % correct_header)
query = raw_input('Correction dans ldap ? (Y pour confirmer)')
if query == "Y":
with switch as sw:
if header_line:
sw['info'][header_line] = unicode(correct_header)
else:
sw['info'].append(unicode(correct_header))
sw.history_gen()
sw.save()
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Génération de la conf d'un "+
"switch.")
......@@ -669,10 +627,6 @@ if __name__ == "__main__":
parser.add_argument('-c', '--check', action='store_true', default=False,
help="Vérifie la conf par rapport aux macs et vlans effectivement " +\
"présents sur le switch")
parser.add_argument('-l', '--ldapheader', action='store_true', default=False,
help="Verifie et corrige le header du switch stocké dans ldap")
parser.add_argument('-a', '--allheader', action='store_true', default=False,
help="Verifie et corrige le header de tous les switchs stockés dans ldap")
parser.add_argument('--pretty', action='store_true', default=False,
help="Affiche un tableau ascii du plan de connexion du switch")
......@@ -682,12 +636,5 @@ if __name__ == "__main__":
check_conf_ldap(options.hostname)
elif options.pretty:
pretty_print(options.hostname)
elif options.ldapheader:
ldap_header_check(options.hostname)
elif options.allheader:
switchs = annuaire.all_switchs()
for sw in switchs:
print(sw)
ldap_header_check(sw.split('.')[0])
else:
print(conf_switch(options.hostname))
......@@ -19,6 +19,9 @@ Le fichier de config hp_switchs doit également faire référence
Gabriel Detraz 2017
"""
from __future__ import print_function
import sys
from annuaires_pg import all_switchs
import hptools2
import pexpect
......@@ -26,6 +29,7 @@ import affichage
from config.hp_switchs import hp_procurve_map, all_models
import argparse
import os.path
from lc_ldap import shortcuts
switchs = all_switchs()
......@@ -42,13 +46,46 @@ def get_version(switch):
def check_version(switch, check_only=False):
firmware, model = get_version(switch)
try:
normal_firm = hp_procurve_map[model[:-1]][0]
normal_firm = hp_procurve_map[model[:-1]][0]
except KeyError:
if check_only:
print("Référence inconnue dans le mapping")
return True
return normal_firm == firmware
def update_ldap_header(ldap, hostname):
try:
switch = ldap.search(
u'(&(host=%s)(objectClass=switchCrans))' % hostname,
mode='rw'
)[0]
ldap_header, header_line = None, None
for line, com in enumerate(switch['info']):
if com.value.startswith(';'):
ldap_header = com.value.encode('utf-8')
header_line = line
firmware, model = get_version(hostname)
correct_header = "; %s Configuration Editor; Created on release #%s" % (model, firmware)
if not ldap_header or ldap_header != correct_header:
print("Le header ldap n'est pas correct, il devrait être %s" % correct_header)
query = raw_input('Correction dans ldap ? (Y pour confirmer)')
if query == "Y":
with switch as sw:
if header_line:
sw['info'][header_line] = unicode(correct_header)
else:
sw['info'].append(unicode(correct_header))
sw.history_gen()
sw.save()
except:
print(
(
u"Assurez-vous que le switch est bien connecté "
u"au réseau pour générer automatiquement son header..."
).encode('utf-8'),
file=sys.stderr
)
def do_stats(switchs):
stats = dict()
for model in all_models:
......@@ -133,12 +170,16 @@ if __name__ == '__main__':
else:
print("Ce switch n'existe pas")
if args.allconfig:
ldap = shortcuts.lc_ldap_admin()
for sw in switchs:
update_ldap_header(ldap, sw)
do_reflash(sw)
if args.config:
ldap = shortcuts.lc_ldap_admin()
switch = args.config + '.switches.crans.org'
if switch in switchs:
do_reflash(args.config + '.switches.crans.org')
update_ldap_header(ldap, switch)
do_reflash(switch)
else:
print("Ce switch n'existe pas")
if args.reload:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment