Commit 04303a40 authored by Gabriel Detraz's avatar Gabriel Detraz

Utilitaire de mise à jour du firmware des switchs

parent 3224ea67
......@@ -59,3 +59,6 @@ secours/etat_*
# Fichier de son pour asterisk
sip/sound/
#Firmwares des switchs
firmwares_switchs/
# -*- mode: python; coding: utf-8 -*-
# Mapping des versions de switchs <-> firmware à jour
hp_procurve_map = {
"J4899" : ("H.10.119", "HP 2626"),
"J4900" : ("H.10.119", "HP 2650"),
"J9626" : ("RA.16.03.0003", "HP 2620"),
"J9623" : ("RA.16.03.0003", "HP 2620"),
"J9145" : ("W.15.14.0013", "HP 2910 al"),
"J9085" : ("R.11.119", "HP 2610"),
"J9088" : ("R.11.119", "HP 2610"),
"J9021" : ("N.11.25", "HP 2810")}
all_models = ["HP 2626", "HP 2650", "HP 2620", "HP 2910 al", "HP 2610", "HP 2810"]
#!/bin/bash /usr/scripts/python.sh
# -*- mode: python; coding: utf-8 -*-
"""
Script de mise a jour des firmwares de switchs version2
Gabriel Detraz
"""
from annuaires_pg import all_switchs
import hptools2
import affichage
from config.hp_switchs import hp_procurve_map, all_models
import argparse
import os.path
switchs = all_switchs()
# Dossier des firmwares
firmware_path = '/usr/scripts/firmwares_switchs/'
def get_version(switch):
sw = hptools2.HPSwitch(switch)
all_version = sw.version()
firmware = all_version.split('revision ')[1].split(',')[0]
model = next(x for x in all_version.split() if x.startswith('J'))
return firmware, model
def check_version(switch, check_only=False):
firmware, model = get_version(switch)
try:
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 do_stats(switchs):
stats = dict()
for model in all_models:
stats[model] = [0, 0]
for sw in switchs:
firmware, model = get_version(sw)
if check_version(sw):
stats[hp_procurve_map[model[:-1]][1]][0] += 1
else:
stats[hp_procurve_map[model[:-1]][1]][1] += 1
return stats
def do_upgrade(switch, destination='primary'):
if not check_version(switch, check_only=False):
query = raw_input('Mise à jour de %s (Y pour confirmer)' % switch)
if query == "Y":
firmware, model = get_version(switch)
try:
normal_firm = hp_procurve_map[model[:-1]][0]
except KeyError:
print("Référence inconnue dans le mapping")
return
firmware_long_path = firmware_path + normal_firm.replace('.','_') + '.swi'
if not os.path.isfile(firmware_long_path):
print("Firmware %s introuvable !" % normal_firm)
return
print('sudo scp %s root@%s:os/%s' % (firmware_long_path, switch, destination))
os.system('sudo scp %s root@%s:os/%s' % (firmware_long_path, switch, destination))
else:
return
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")
parser.add_argument('--upgrade', action="store_true", help="Mets à jour les switchs, demande confirmation")
parser.add_argument('--secondary', action="store_true", help="Mets à jour l'image secondaire des switchs, demande confirmation")
if __name__ == '__main__':
args = parser.parse_args()
if args.stats:
stats = do_stats(switchs)
print(affichage.tableau(stats.values(), titre=["Switchs à jour", "Switch pas à jour"], alignement=['d', 'd']))
if args.display:
for sw in switchs:
print(sw)
print(get_version(sw))
if check_version(sw, check_only=True):
print("A jour")
else:
print("A upgrader")
if args.upgrade:
for sw in switchs:
if args.secondary:
do_upgrade(sw, destination='secondary')
else:
do_upgrade(sw)
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