scripts/archive/gestion/numeros_disponibles.py
2015-05-27 18:16:45 +02:00

92 lines
2.2 KiB
Python
Executable file

#!/bin/bash /usr/scripts/python.sh
# -*- coding: utf-8 -*-
"""
Mise a jour periodique des listes d'ip et d'id disponibles.
Copyright (C) Alexandre Bos, largement pompe sur ldap_crans.py
Licence : GPLv2
"""
import sys
from config import NETs
from iptools import AddrInNet
import netaddr
try:
from dialog import Dialog
except ImportError:
Dialog = None
repertoire = '/usr/scripts/var/numeros_disponibles/'
def lister_ip_dispo(plage):
f = open(repertoire + 'ip_' + plage)
lignes = f.readlines()
liste = []
for l in lignes:
liste.append(l.strip())
return liste
def lister_ip_utilisees():
liste = []
from ldap_crans import crans_ldap
db = crans_ldap()
r = db.search('mid=*')
machines = r['machineFixe'] + r['machineWifi'] + r['machineCrans'] + r['borneWifi']
for m in machines:
liste.append(m.ip())
return liste
def update_ip(plage, occupees):
net = NETs[plage]
pool_ip = [] # Pool d'IP à tester
for ne in net:
ne = netaddr.IPNetwork(ne)
for ip in ne:
# avoid .255 and .0 (even for non-/24 nets)
if (ip.value & 255) in [0,255]:
continue
pool_ip.append(str(ip))
resultat = ''.join('%s\n' % ip for ip in pool_ip if ip not in occupees)
f = open(repertoire + 'ip_' + plage,'w')
f.write(resultat)
f.close
def update_ip_fixe(occupees):
update_ip('fil', 'ip_fil', occupees)
def update_ip_wifi_adh(occupees):
update_ip('wifi-adh','ip_wifi-adh', occupees)
TO_COMPUTE = [
'wifi',
'wifi-adh',
'serveurs',
'adherents',
'bornes',
'adm',
'personnel-ens',
'fil',
]
if __name__ == "__main__":
if "--cron" in sys.argv:
cron = True
else:
cron = False
if not cron:
dlg = Dialog()
dlg.gauge_start(text="Recherche des machines...", backtitle="numeros_disponibles")
ip_occupees = lister_ip_utilisees()
done = 1
for net in TO_COMPUTE:
if not cron:
dlg.gauge_update(int(done*100/(len(TO_COMPUTE)+1)), text="IP libres dans %s" % net, update_text=True)
update_ip(net, ip_occupees)
done += 1
if not cron:
dlg.gauge_update(100, text="Fini !", update_text=True)
dlg.gauge_stop()