[gen_confs/bind.py] suppression des trailing whitespaces
Ignore-this: d949a371de6c74856513bbd0eb66077 darcs-hash:20090325150835-bd074-8172df6956d1066c38d75be76b8b0f23416f5ba1.gz
This commit is contained in:
parent
1f2319b3e6
commit
225050344f
1 changed files with 40 additions and 40 deletions
|
@ -1,7 +1,7 @@
|
||||||
#! /usr/bin/env python
|
#! /usr/bin/env python
|
||||||
# -*- coding: iso-8859-15 -*-
|
# -*- coding: iso-8859-15 -*-
|
||||||
|
|
||||||
""" Génération de la configuration pour bind9
|
""" Génération de la configuration pour bind9
|
||||||
|
|
||||||
Copyright (C) Frédéric Pauget
|
Copyright (C) Frédéric Pauget
|
||||||
Licence : GPLv2
|
Licence : GPLv2
|
||||||
|
@ -12,12 +12,12 @@ from gen_confs import gen_config
|
||||||
from iptools import AddrInNet, AddrInNets
|
from iptools import AddrInNet, AddrInNets
|
||||||
|
|
||||||
class dns(gen_config) :
|
class dns(gen_config) :
|
||||||
"""
|
"""
|
||||||
Génération des fichiers de configuration de bind9 :
|
Génération des fichiers de configuration de bind9 :
|
||||||
* fichier DNS_CONF qui contient les définitions de zone conformément
|
* fichier DNS_CONF qui contient les définitions de zone conformément
|
||||||
à zone_template. Ce fichier doit être inclus à partir de la config statique
|
à zone_template. Ce fichier doit être inclus à partir de la config statique
|
||||||
de bind
|
de bind
|
||||||
* les fichiers de zones, ce sont eux qui contiennent les données du
|
* les fichiers de zones, ce sont eux qui contiennent les données du
|
||||||
dns, ils ont appellés par le fichier DNS_CONF et sont générés dans DNS_DIR
|
dns, ils ont appellés par le fichier DNS_CONF et sont générés dans DNS_DIR
|
||||||
Leur entète est générée à partir de zone_entete.
|
Leur entète est générée à partir de zone_entete.
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ zones_direct et les adresses de zones_reverse. Les donn
|
||||||
la base LDAP
|
la base LDAP
|
||||||
"""
|
"""
|
||||||
######################################PARTIE DE CONFIGURATION
|
######################################PARTIE DE CONFIGURATION
|
||||||
|
|
||||||
### Fichiers à écrire
|
### Fichiers à écrire
|
||||||
# Répertoire d'écriture des fichiers de zone
|
# Répertoire d'écriture des fichiers de zone
|
||||||
DNS_DIR = '/etc/bind/generated/' # Avec un / à la fin
|
DNS_DIR = '/etc/bind/generated/' # Avec un / à la fin
|
||||||
|
@ -49,32 +49,32 @@ la base LDAP
|
||||||
DNSs = [ 'rouge.crans.org' , 'sila.crans.org' , 'freebox.crans.org' , 'ovh.crans.org' , 'sable.crans.org' ]
|
DNSs = [ 'rouge.crans.org' , 'sila.crans.org' , 'freebox.crans.org' , 'ovh.crans.org' , 'sable.crans.org' ]
|
||||||
DNSs_private = ['vert.adm.crans.org']
|
DNSs_private = ['vert.adm.crans.org']
|
||||||
ip_master_DNS = "10.231.136.3"
|
ip_master_DNS = "10.231.136.3"
|
||||||
|
|
||||||
### Liste des délégations de zone
|
### Liste des délégations de zone
|
||||||
# Pour les demandes de ces zones, le DNS dira d'aller voir les serveurs listés ici
|
# Pour les demandes de ces zones, le DNS dira d'aller voir les serveurs listés ici
|
||||||
# Pour les noms des serveurs on met l'IP sans point ou le nom avec un point
|
# Pour les noms des serveurs on met l'IP sans point ou le nom avec un point
|
||||||
DELEG = { 'tv.crans.org' : ['rouge.crans.org.' , 'sila.crans.org.' , 'freebox.crans.org.', 'sable.crans.org' , 'mdr.crans.org.'] }
|
DELEG = { 'tv.crans.org' : ['rouge.crans.org.' , 'sila.crans.org.' , 'freebox.crans.org.', 'sable.crans.org' , 'mdr.crans.org.'] }
|
||||||
|
|
||||||
### Serveurs de mail
|
### Serveurs de mail
|
||||||
# format : [ priorité serveur , .... ]
|
# format : [ priorité serveur , .... ]
|
||||||
MXs = ['10 rouge.crans.org', '20 ovh.crans.org', '20 freebox.crans.org']
|
MXs = ['10 rouge.crans.org', '20 ovh.crans.org', '20 freebox.crans.org']
|
||||||
SRVs = ['_jabber._tcp.crans.org. 86400 IN SRV 5 0 5269 xmpp.crans.org.',
|
SRVs = ['_jabber._tcp.crans.org. 86400 IN SRV 5 0 5269 xmpp.crans.org.',
|
||||||
'_xmpp-server._tcp.crans.org. 86400 IN SRV 5 0 5269 xmpp.crans.org.',
|
'_xmpp-server._tcp.crans.org. 86400 IN SRV 5 0 5269 xmpp.crans.org.',
|
||||||
'_xmpp-client._tcp.crans.org. 86400 IN SRV 5 0 5222 xmpp.crans.org.']
|
'_xmpp-client._tcp.crans.org. 86400 IN SRV 5 0 5222 xmpp.crans.org.']
|
||||||
|
|
||||||
### Entète des fichiers de zone
|
### Entète des fichiers de zone
|
||||||
zone_entete="""
|
zone_entete="""
|
||||||
$ORIGIN %(zone)s.
|
$ORIGIN %(zone)s.
|
||||||
$TTL 86400
|
$TTL 86400
|
||||||
@\tIN\tSOA rouge.crans.org. root.crans.org. (
|
@\tIN\tSOA rouge.crans.org. root.crans.org. (
|
||||||
%(serial)i ; numero de serie
|
%(serial)i ; numero de serie
|
||||||
21600 ; refresh (s)
|
21600 ; refresh (s)
|
||||||
3600 ; retry (s)
|
3600 ; retry (s)
|
||||||
1209600 ; expire (s)
|
1209600 ; expire (s)
|
||||||
86400 ; TTL (s)
|
86400 ; TTL (s)
|
||||||
)
|
)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# Syntaxe utilisée dans le fichier DNS_CONF pour définir une zone sur le maître
|
# Syntaxe utilisée dans le fichier DNS_CONF pour définir une zone sur le maître
|
||||||
zone_template="""
|
zone_template="""
|
||||||
zone "%(NOM_zone)s" {
|
zone "%(NOM_zone)s" {
|
||||||
|
@ -96,17 +96,17 @@ zone "%(NOM_zone)s" {
|
||||||
# Si =1, comme ci-dessus, mais ne ralera pas pour freebox
|
# Si =1, comme ci-dessus, mais ne ralera pas pour freebox
|
||||||
# Si =0, ralera seulement contre les machines ne pouvant être classées
|
# Si =0, ralera seulement contre les machines ne pouvant être classées
|
||||||
verbose = 1
|
verbose = 1
|
||||||
|
|
||||||
restart_cmd = '/etc/init.d/bind9 reload'
|
restart_cmd = '/etc/init.d/bind9 reload'
|
||||||
######################################FIN PARTIE DE CONFIGURATION
|
######################################FIN PARTIE DE CONFIGURATION
|
||||||
|
|
||||||
def __str__(self) :
|
def __str__(self) :
|
||||||
return "DNS"
|
return "DNS"
|
||||||
|
|
||||||
def gen_slave(self) :
|
def gen_slave(self) :
|
||||||
""" Génération du fichier de config de zone pour les esclaves """
|
""" Génération du fichier de config de zone pour les esclaves """
|
||||||
zones = self.zones_direct
|
zones = self.zones_direct
|
||||||
|
|
||||||
# Ajout des zones reverse
|
# Ajout des zones reverse
|
||||||
for net in self.zones_reverse :
|
for net in self.zones_reverse :
|
||||||
n = map(int,net.split('/')[0].split('.')[:3])
|
n = map(int,net.split('/')[0].split('.')[:3])
|
||||||
|
@ -118,35 +118,35 @@ zone "%(NOM_zone)s" {
|
||||||
zones.append("%d.%d.%d.in-addr.arpa" % tuple(n))
|
zones.append("%d.%d.%d.in-addr.arpa" % tuple(n))
|
||||||
n.reverse()
|
n.reverse()
|
||||||
n[2] += 1
|
n[2] += 1
|
||||||
|
|
||||||
# Ecriture
|
# Ecriture
|
||||||
fd = self._open_conf(self.DNS_CONF_BCFG2,'//')
|
fd = self._open_conf(self.DNS_CONF_BCFG2,'//')
|
||||||
for zone in zones :
|
for zone in zones :
|
||||||
fd.write(self.zone_template_slave % { 'NOM_zone' : zone,
|
fd.write(self.zone_template_slave % { 'NOM_zone' : zone,
|
||||||
'FICHIER_zone' : self.DNS_DIR + 'db.' + zone,
|
'FICHIER_zone' : self.DNS_DIR + 'db.' + zone,
|
||||||
'ip_master_DNS': self.ip_master_DNS})
|
'ip_master_DNS': self.ip_master_DNS})
|
||||||
|
|
||||||
fd.close()
|
fd.close()
|
||||||
|
|
||||||
def _gen(self) :
|
def _gen(self) :
|
||||||
### Génération du numéro de série
|
### Génération du numéro de série
|
||||||
# Le + 1000.... s'explique pas l'idée précédente et peu pratique d'avoir
|
# Le + 1000.... s'explique pas l'idée précédente et peu pratique d'avoir
|
||||||
# le numéro de série du type AAAAMMJJNN (année, mois, jour, incrément par jour)
|
# le numéro de série du type AAAAMMJJNN (année, mois, jour, incrément par jour)
|
||||||
serial = time.time() + 1000000000
|
serial = time.time() + 1000000000
|
||||||
|
|
||||||
### DNS
|
### DNS
|
||||||
DNS='; DNS de la zone par ordre de priorité\n'
|
DNS='; DNS de la zone par ordre de priorité\n'
|
||||||
for d in self.DNSs :
|
for d in self.DNSs :
|
||||||
DNS += '@\tIN\tNS %s.\n' % d
|
DNS += '@\tIN\tNS %s.\n' % d
|
||||||
DNS += '\n'
|
DNS += '\n'
|
||||||
|
|
||||||
### Serveurs de mail
|
### Serveurs de mail
|
||||||
MX='; Serveurs de mails\n'
|
MX='; Serveurs de mails\n'
|
||||||
for m in self.MXs :
|
for m in self.MXs :
|
||||||
MX += '%(zone)s.\t' # Sera remplacé par le nom de zone plus tard
|
MX += '%(zone)s.\t' # Sera remplacé par le nom de zone plus tard
|
||||||
MX += 'IN\tMX\t%s.\n' % m
|
MX += 'IN\tMX\t%s.\n' % m
|
||||||
MX += '\n'
|
MX += '\n'
|
||||||
|
|
||||||
direct = {} # format : { zone : [ lignes correspondantes] }
|
direct = {} # format : { zone : [ lignes correspondantes] }
|
||||||
reverse = {}
|
reverse = {}
|
||||||
warnings = ''
|
warnings = ''
|
||||||
|
@ -166,7 +166,7 @@ zone "%(NOM_zone)s" {
|
||||||
|
|
||||||
direct['crans.ens-cachan.fr'] ='; Parametres SPF\n'
|
direct['crans.ens-cachan.fr'] ='; Parametres SPF\n'
|
||||||
direct['crans.ens-cachan.fr'] +='crans.ens-cachan.fr.\tIN\tTXT\t"v=spf1 a:crans.org mx ?all"\n\n'
|
direct['crans.ens-cachan.fr'] +='crans.ens-cachan.fr.\tIN\tTXT\t"v=spf1 a:crans.org mx ?all"\n\n'
|
||||||
|
|
||||||
### Ajout d'eventuels champs SRV
|
### Ajout d'eventuels champs SRV
|
||||||
direct['crans.org'] +='; Champs SRV\n'
|
direct['crans.org'] +='; Champs SRV\n'
|
||||||
for s in self.SRVs:
|
for s in self.SRVs:
|
||||||
|
@ -174,18 +174,18 @@ zone "%(NOM_zone)s" {
|
||||||
direct['crans.org'] += '\n'
|
direct['crans.org'] += '\n'
|
||||||
|
|
||||||
### Tri des machines
|
### Tri des machines
|
||||||
self.anim.iter=len(self.machines)
|
self.anim.iter=len(self.machines)
|
||||||
for machine in self.machines :
|
for machine in self.machines :
|
||||||
self.anim.cycle()
|
self.anim.cycle()
|
||||||
|
|
||||||
# Calculs préliminaires
|
# Calculs préliminaires
|
||||||
try :
|
try :
|
||||||
nom , zone = machine.nom().split('.',1)
|
nom , zone = machine.nom().split('.',1)
|
||||||
zone = zone.encode('iso-8859-1')
|
zone = zone.encode('iso-8859-1')
|
||||||
except :
|
except :
|
||||||
warnings += u'Machine ignorée (mid=%s) : format nom incorrect (%s)\n' % ( machine.id().encode('iso-8859-1'), machine.nom().encode('iso-8859-1') )
|
warnings += u'Machine ignorée (mid=%s) : format nom incorrect (%s)\n' % ( machine.id().encode('iso-8859-1'), machine.nom().encode('iso-8859-1') )
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# Le direct
|
# Le direct
|
||||||
if zone in self.zones_direct :
|
if zone in self.zones_direct :
|
||||||
ligne = "%s\tIN\tA\t%s\n" % ( nom, machine.ip() )
|
ligne = "%s\tIN\tA\t%s\n" % ( nom, machine.ip() )
|
||||||
|
@ -193,7 +193,7 @@ zone "%(NOM_zone)s" {
|
||||||
except : direct[zone] = ligne
|
except : direct[zone] = ligne
|
||||||
elif self.verbose and machine.nom() != "ftp.federez.net":
|
elif self.verbose and machine.nom() != "ftp.federez.net":
|
||||||
warnings += u'Résolution directe ignorée (mid=%s) : zone non autoritaire (%s)\n' % ( machine.id().encode('iso-8859-1'), zone.encode('iso-8859-1') )
|
warnings += u'Résolution directe ignorée (mid=%s) : zone non autoritaire (%s)\n' % ( machine.id().encode('iso-8859-1'), zone.encode('iso-8859-1') )
|
||||||
|
|
||||||
# Le direct avec alias
|
# Le direct avec alias
|
||||||
for alias in machine.alias() :
|
for alias in machine.alias() :
|
||||||
# Cas particulier : nom de l'alias = nom de la zone
|
# Cas particulier : nom de l'alias = nom de la zone
|
||||||
|
@ -204,7 +204,7 @@ zone "%(NOM_zone)s" {
|
||||||
try : direct[alias] += ligne
|
try : direct[alias] += ligne
|
||||||
except : direct[alias] = ligne
|
except : direct[alias] = ligne
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# Bon format ?
|
# Bon format ?
|
||||||
alias_l = alias.split('.')
|
alias_l = alias.split('.')
|
||||||
ok = 0
|
ok = 0
|
||||||
|
@ -224,7 +224,7 @@ zone "%(NOM_zone)s" {
|
||||||
ligne = "%s\tIN\tCNAME\t%s.\n" % ( nom, machine.nom() )
|
ligne = "%s\tIN\tCNAME\t%s.\n" % ( nom, machine.nom() )
|
||||||
try : direct[zone] += ligne
|
try : direct[zone] += ligne
|
||||||
except : direct[zone] = ligne
|
except : direct[zone] = ligne
|
||||||
|
|
||||||
# Le reverse
|
# Le reverse
|
||||||
if AddrInNets(machine.ip(), self.zones_reverse) :
|
if AddrInNets(machine.ip(), self.zones_reverse) :
|
||||||
base_ip = machine.ip().split('.')
|
base_ip = machine.ip().split('.')
|
||||||
|
@ -236,12 +236,12 @@ zone "%(NOM_zone)s" {
|
||||||
except : reverse[zone] = ligne
|
except : reverse[zone] = ligne
|
||||||
elif self.verbose >= 2 or machine.nom() not in ('freebox.crans.org', 'ovh.crans.org'):
|
elif self.verbose >= 2 or machine.nom() not in ('freebox.crans.org', 'ovh.crans.org'):
|
||||||
warnings += u'Résolution inverse ignorée (mid=%s) : ip sur zone non autoritaire (%s)\n' % ( machine.id().encode('iso-8859-1'), machine.ip().encode('iso-8859-1') )
|
warnings += u'Résolution inverse ignorée (mid=%s) : ip sur zone non autoritaire (%s)\n' % ( machine.id().encode('iso-8859-1'), machine.ip().encode('iso-8859-1') )
|
||||||
|
|
||||||
### Ajouts pour les fichiers de résolution directs
|
### Ajouts pour les fichiers de résolution directs
|
||||||
for zone in direct.keys() :
|
for zone in direct.keys() :
|
||||||
# MXs
|
# MXs
|
||||||
direct[zone] = MX % { 'zone' : zone } + direct[zone]
|
direct[zone] = MX % { 'zone' : zone } + direct[zone]
|
||||||
|
|
||||||
|
|
||||||
### Ajout des délégations de zones
|
### Ajout des délégations de zones
|
||||||
for deleg in self.DELEG.keys():
|
for deleg in self.DELEG.keys():
|
||||||
|
@ -251,7 +251,7 @@ zone "%(NOM_zone)s" {
|
||||||
continue
|
continue
|
||||||
for serv in self.DELEG[deleg]:
|
for serv in self.DELEG[deleg]:
|
||||||
direct[zone] = direct[zone] + "%s\tIN\tNS\t%s\n" % ( nom, serv )
|
direct[zone] = direct[zone] + "%s\tIN\tNS\t%s\n" % ( nom, serv )
|
||||||
|
|
||||||
### Ecriture des fichiers de zone et préparation du fichier de définition
|
### Ecriture des fichiers de zone et préparation du fichier de définition
|
||||||
f = ''
|
f = ''
|
||||||
for zone, lignes in direct.items() + reverse.items() :
|
for zone, lignes in direct.items() + reverse.items() :
|
||||||
|
@ -264,15 +264,15 @@ zone "%(NOM_zone)s" {
|
||||||
fd.write(lignes)
|
fd.write(lignes)
|
||||||
fd.close()
|
fd.close()
|
||||||
f += self.zone_template % { 'NOM_zone' : zone, 'FICHIER_zone' : file }
|
f += self.zone_template % { 'NOM_zone' : zone, 'FICHIER_zone' : file }
|
||||||
|
|
||||||
### Ecriture fichier de définition
|
### Ecriture fichier de définition
|
||||||
fd = self._open_conf(self.DNS_CONF,'//')
|
fd = self._open_conf(self.DNS_CONF,'//')
|
||||||
fd.write(f)
|
fd.write(f)
|
||||||
fd.close()
|
fd.close()
|
||||||
|
|
||||||
return warnings
|
return warnings
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__' :
|
if __name__ == '__main__' :
|
||||||
from socket import gethostname
|
from socket import gethostname
|
||||||
from config import bcfg2_main
|
from config import bcfg2_main
|
||||||
|
@ -290,6 +290,6 @@ if __name__ == '__main__' :
|
||||||
elif hostname in map(lambda fullhostname : short_name(fullhostname),dns.DNSs[1:]+dns.DNSs_private):
|
elif hostname in map(lambda fullhostname : short_name(fullhostname),dns.DNSs[1:]+dns.DNSs_private):
|
||||||
print "Ce serveur est esclave! Lancez ce script sur %s, puis lancez bcfg2 ici" % bcfg2_main
|
print "Ce serveur est esclave! Lancez ce script sur %s, puis lancez bcfg2 ici" % bcfg2_main
|
||||||
else:
|
else:
|
||||||
print "Ce serveur ne correspond à rien pour la configuration DNS."
|
print "Ce serveur ne correspond à rien pour la configuration DNS."
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue