scripts/gestion/numeros_disponibles.py
Nicolas Dandrimont e9b58e4c4e [numeros_disponibles] Style
darcs-hash:20090128152859-ffbb2-c4fda7ecde1a7bc9ab137e31bb49083efa16a189.gz
2009-01-28 16:28:59 +01:00

80 lines
2 KiB
Python
Executable file

#! /usr/bin/env python
# -*- coding: iso-8859-15 -*-
"""
Mise a jour periodique des listes d'ip et d'id disponibles.
Copyright (C) Alexandre Bos, largement pompe sur ldap_crans.py
Licence : GPLv2
"""
from config import NETs
from iptools import AddrInNet
repertoire = '/usr/scripts/var/numeros_disponibles/'
"""
Un petit hack de rien du tout pour s'assurer qu'on n'attribue
pas ces adresses. Certains services risquent de continuer
d'essayer de se connecter a ces adresses
"""
ancien_vlan_adm = ['10.231.136.0/24']
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:
ip = ne.split('/')[0]
ip = ip.split('.')
n = []
for i in ip:
n.append(int(i))
while 1:
if n[3] < 255:
n[3] += 1
else:
n[2] += 1
n[3] = 0
if n[2] == 255: break
ip = "%d.%d.%d.%d" % tuple(n)
if not AddrInNet(ip, ne):
# On est allé trop loin
break
pool_ip.append(ip)
resultat = ''.join('%s\n' % ip for ip in pool_ip if ip not in occupees and not AddrInNet(ip, ancien_vlan_adm))
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)
if __name__ == "__main__":
ip_occupees = lister_ip_utilisees()
for net in NETs.keys():
update_ip(net, ip_occupees)