Commit c134bf0f authored by Maxime Bombar's avatar Maxime Bombar Committed by Hamza Dely

On ajoute une fonctionnalité pour mettre à jour les macs dans LDAP

parent 622267f0
......@@ -6,8 +6,8 @@ Script de mise a jour des firmwares de switchs version2
Fonction:
- display, affiches les états de mise à jour
- upgrade, effectue les mises à jour
- reload
- upgrade, effectue les mises à jour, met aussi à jour la mac dans LDAP
- reload --> Au 6/11/2017 ne marche pas
- stats, affiche des jolies stats
Attention, le fichier firmware doit se trouver dans le sous dossier
......@@ -17,6 +17,7 @@ Le fichier de config hp_switchs doit également faire référence
à la version à jour du firmware.
Gabriel Detraz 2017
Maxime Bombar
"""
from __future__ import print_function
......@@ -134,6 +135,54 @@ def do_reflash(switch):
subprocess.call(['/usr/scripts/gestion/gen_confs/switchs2.py', sw,], stdout=open('/tmp/%s.conf' % sw, "w"))
subprocess.call(['/usr/bin/sudo', '/usr/bin/scp', '/tmp/%s.conf' % sw, 'root@%s:cfg/startup-config' % switch])
def get_mac(host):
try:
mac = subprocess.check_output(["/usr/bin/sudo", "arping", host, "-c1"]).split()[5]
return(mac.upper())
except subprocess.CalledProcessError:
print("Le switch %s ne semble pas connecté, impossible de récupérer la mac" % host)
return None
def get_mac_ldap(ldap, host):
switch = ldap.search(u'host=%s' % host)[0]
mac = switch['macAddress'][0].value
return(mac)
def check_and_replace_mac(ldap, host):
# get the mac address by arping host
mac = get_mac(host)
# get the mac from ldap
mac_ldap = get_mac_ldap(ldap, host)
if not mac:
return
if not (mac == mac_ldap):
print("Probleme : mac = %s alors que mac_ldap = %s" %
(mac, mac_ldap))
while True:
query = raw_input('Voulez-vous mettre à jour la base LDAP ? (yes/no) ')
if (query == 'yes' or query == 'no'):
break
if query == 'yes':
switch = ldap.search(u'host=%s' % host, mode='rw')[0]
with switch:
switch['macAddress'] = unicode(mac)
print('Done !')
switch.history_gen()
switch.save()
def reconfigure_switch(ldap, sw):
update_ldap_header(ldap, sw)
check_and_replace_mac(ldap, sw)
do_reflash(sw)
return
def update_switch(ldap, sw, destination='primary'):
check_and_replace_mac(ldap, sw)
do_upgrade(sw, destination)
parser = argparse.ArgumentParser()
parser.add_argument('--stats', action="store_true", help="Affiche des statistiques générales sur les switchs et leur état de mise à jour")
parser.add_argument('--display', action="store_true", help="Affiche l'etat de maj de l'ensemble des switchs")
......@@ -144,8 +193,10 @@ parser.add_argument('--reload', action="store_true", help="Reload pour appliquer
parser.add_argument('--config', help="Mets à jour la config du switch")
parser.add_argument('--allconfig', action="store_true", help="Mets à jour la config de tous les switchs")
if __name__ == '__main__':
args = parser.parse_args()
ldap = shortcuts.lc_ldap_admin()
if args.stats:
stats = do_stats(switchs)
print(affichage.tableau(stats.values(), titre=[u"Switchs à jour", u"Switch pas à jour", u"Modèle"], alignement=['g', 'g', 'g'], largeur=['*','*','*']))
......@@ -160,31 +211,28 @@ if __name__ == '__main__':
if args.allupgrade:
for sw in switchs:
if args.secondary:
do_upgrade(sw, destination='secondary')
update_switch(ldap, sw, destination='secondary')
else:
do_upgrade(sw)
update_switch(ldap, sw)
if args.upgrade:
switch = args.upgrade + '.switches.crans.org'
switch = args.upgrade.split('.')[0] + '.switches.crans.org'
if switch in switchs:
if args.secondary:
do_upgrade(switch, destination='secondary')
update_switch(ldap, switch, destination='secondary')
else:
do_upgrade(switch)
update_switch(ldap, switch)
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)
reconfigure_switch(ldap, sw)
if args.config:
ldap = shortcuts.lc_ldap_admin()
switch = args.config + '.switches.crans.org'
if switch in switchs:
update_ldap_header(ldap, switch)
do_reflash(switch)
reconfigure_switch(ldap, sw)
else:
print("Ce switch n'existe pas")
#TODO (6/11/17) : Faire marcher ce bout de code un jour
if args.reload:
query = raw_input('Etes-vous certain de reloader les switchs maintenant ? (Y pour oui)')
if query == "Y":
......
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