scripts/gestion/gen_confs/dhcpd_new.py
Nicolas Dandrimont 825b5d2a78 [...] La connexion temporaire du G n'est plus pertinente
darcs-hash:20100112003022-ffbb2-48e262e78b482d67acad0c1af1c936d3bfa83022.gz
2010-01-12 01:30:22 +01:00

92 lines
2.9 KiB
Python
Executable file

#! /usr/bin/env python
# -*- coding: iso-8859-15 -*-
""" Génération de la configuration pour le dhcp
Copyright (C) Frédéric Pauget
Licence : GPLv2
"""
from iptools import AddrInNet
from gen_confs import gen_config
from ldap_crans import hostname
from config import NETs
class dhcp(gen_config) :
""" Génération du fichier de déclaration des hosts.
Chaque réseau servi doit être une clef du dictionnaire reseaux,
la valeur correspondante est une chaine contenant le nom du fichier
associé à ce réseau.
Chaque machine possède ensuite une entrée de la forme de host_template.
"""
######################################PARTIE DE CONFIGURATION
# Fichier à écire
if hostname == 'sable':
restart_cmd = '/etc/init.d/dhcp3-server restart'
reseaux = { '138.231.136.0/21' : '/etc/dhcp3/generated/adherents.liste',
'10.42.0.0/16' : '/etc/dhcp3/generated/gratuit.liste' }
elif hostname == 'titanic':
restart_cmd = '/etc/init.d/dhcp3-server restart'
reseaux = { '10.2.9.0/24' : '/etc/dhcp3/generated/appartements.liste' }
elif hostname == 'gordon':
restart_cmd = '/etc/init.d/dhcp3-server restart'
reseaux = { '138.231.144.0/21' : '/etc/dhcp3/generated/wifi.liste' }
host_template = """
host %(nom)s {
hardware ethernet %(mac)s;
fixed-address %(ip)s;
option host-name "%(nom)s";
}
"""
host_template_ltsp_powerpc = """
host %(nom)s {
hardware ethernet %(mac)s;
fixed-address %(ip)s;
option host-name "%(nom)s";
next-server 138.231.136.98;
filename "yaboot";
option root-path "/opt/ltsp/powerpc";
}
"""
### Verbosité
# Si =1 ralera (chaine warnings) si machines hors zone trouvée
# Si =0 ralera seulement si réseau vide
verbose = 1
######################################FIN PARTIE DE CONFIGURATION
def __str__(self) :
return 'dhcp'
def _gen(self) :
"""Construction de la liste des machines appartenant à un réseau
"""
warnings = ''
### Construction de la partie du fichier contenant les machines
hosts = {}
self.anim.iter = len(self.machines)
for machine in self.machines :
self.anim.cycle()
for net in self.reseaux.keys() :
if AddrInNet(machine.ip(), net) :
host_template = self.host_template
# variable pour remplir le template
d = { 'nom' : machine.nom().split('.')[0] , 'mac' : machine.mac() , 'ip' : machine.ip() }
try :
hosts[net] += host_template % d
except : hosts[net] = host_template % d
### Ecriture du fichier
for net, fichier in self.reseaux.items() :
fd0 = self._open_conf(fichier, '#')
if hosts.has_key(net):
fd0.write(hosts[net])
fd0.close()
return warnings