[config,bind] On génère tv.crans.org depuis le script de génération du dns

Ignore-this: 6e015fb7f695ab3a56c29ffe46d350d4

darcs-hash:20130128015557-3a55a-9f901eaa97df6a61054d44ec84595a5b87664147.gz
This commit is contained in:
Valentin Samir 2013-01-28 02:55:57 +01:00
parent 90baff4f36
commit 1782878204
2 changed files with 60 additions and 3 deletions

View file

@ -520,6 +520,7 @@ NETs = { 'serveurs' : [ '138.231.136.0/24' ],
'personnel-ens': ['10.2.9.0/24' ], 'personnel-ens': ['10.2.9.0/24' ],
'ens' : ['138.231.135.0/24'], 'ens' : ['138.231.135.0/24'],
'all' : [ '138.231.136.0/21', '138.231.144.0/21' ], 'all' : [ '138.231.136.0/21', '138.231.144.0/21' ],
'multicast' : ['239.0.0.0/8'],
} }
NETs_regexp = { 'all' : '^138\.231\.1(3[6789]|4[0123456789]|5[01])\.\d+$' } NETs_regexp = { 'all' : '^138\.231\.1(3[6789]|4[0123456789]|5[01])\.\d+$' }

View file

@ -25,6 +25,8 @@ def short_name(fullhostname):
def netv4_to_arpa(net): def netv4_to_arpa(net):
addr, prefixlen = net.split('/') addr, prefixlen = net.split('/')
if prefixlen == '8':
return ["%s.in-addr.arpa" % addr.split('.')[0]]
if prefixlen == '16': if prefixlen == '16':
return ["%s.in-addr.arpa" % '.'.join(reversed(addr.split('.')[0:2]))] return ["%s.in-addr.arpa" % '.'.join(reversed(addr.split('.')[0:2]))]
zones=[] zones=[]
@ -111,11 +113,13 @@ la base LDAP
DNSs_private = [] DNSs_private = []
ip_master_DNS = config.dns.master ip_master_DNS = config.dns.master
zone_multicast = 'tv.crans.org'
### 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 = { DELEG = {
'tv.crans.org' : [ 'freebox.crans.org.', 'sable.crans.org.' , 'mdr.crans.org.', 'ovh.crans.org.'] , zone_multicast : [ 'mdr.crans.org.', 'freebox.crans.org.', 'sable.crans.org.' , 'ovh.crans.org.'] ,
} }
### Serveurs de mail ### Serveurs de mail
@ -145,7 +149,7 @@ la base LDAP
zone_entete=""" zone_entete="""
$ORIGIN %(zone)s. $ORIGIN %(zone)s.
$TTL 3600 $TTL 3600
@\tIN\tSOA sable.crans.org. root.crans.org. ( @\tIN\tSOA %(serveur_autoritaire)s. 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)
@ -203,6 +207,51 @@ zone "%(NOM_zone)s" {
elif n.version == 6: elif n.version == 6:
return ('.'.join(rev_dns_a[(128-n.prefixlen)/4:]), (128-n.prefixlen)/4) return ('.'.join(rev_dns_a[(128-n.prefixlen)/4:]), (128-n.prefixlen)/4)
def gen_tv(self):
serial = time.time() + 1000000000
zone_reverse=netv4_to_arpa(config.NETs['multicast'][0])[0]
sap=open('/tmp/chaines_recup_sap.txt').readlines()
DNS='; DNS de la zone par ordre de priorité\n'
for d in self.DELEG[self.zone_multicast] :
DNS += '@\tIN\tNS %s\n' % d
DNS += '\n'
lignes_d = '\n'
lignes_r = '\n'
lignes_d +='@\tIN\tA\t%s\n' % '138.231.136.243'
for line in sap:
[nom,ip]=line.split(':')
nom=re.sub('TNT([0-9]*) ','',nom) # on enlève les TNT## des noms
nom=re.sub(' +([^ ])','-\g<1>',nom) # on remplaces les espaces intérieur par un tiret
nom=re.sub('[ .():,"\'+<>]','',nom) # on enlève tous les caractères illégaux
nom=nom.lower()
try:
[ip1,ip2,ip3,ip4]=ip.strip().split('.')
lignes_r += '%s.%s.%s\tIN\tPTR\t%s.%s.\n' % (ip4,ip3,ip2,nom,self.zone_multicast)
lignes_d +='%s\tIN\tA\t%s' % (nom,ip)
except:
pass
# Écriture de la zone directe
file = self.DNS_DIR + 'db.' + self.zone_multicast
fd = self._open_conf(file,';')
fd.write(self.zone_entete % \
{ 'zone' : self.zone_multicast, 'serveur_autoritaire' : self.DELEG[self.zone_multicast][0][0:-1] , 'serial' : serial } )
fd.write('\n')
fd.write(DNS)
fd.write(lignes_d)
fd.close()
# Écriture du reverse
file = self.DNS_DIR + 'db.' + zone_reverse
fd = self._open_conf(file,';')
fd.write(self.zone_entete % \
{ 'zone' : zone_reverse, 'serveur_autoritaire' : self.DELEG[self.zone_multicast][0][0:-1] , 'serial' : serial } )
fd.write('\n')
fd.write(DNS)
fd.write(lignes_r)
fd.close()
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 """
@ -477,6 +526,13 @@ if __name__ == '__main__' :
print "Ce serveur est également serveur maitre, mais la reconfiguration du DNS maitre se fait par generate." print "Ce serveur est également serveur maitre, mais la reconfiguration du DNS maitre se fait par generate."
elif hostname == short_name(dns.DNSs[0]): elif hostname == short_name(dns.DNSs[0]):
print "Ce serveur est maître ! Utilisez generate." print "Ce serveur est maître ! Utilisez generate."
elif hostname == short_name(dns.DELEG['tv.crans.org'][0][0:-1]):
c = dns()
c.gen_tv()
import subprocess
args=dns.restart_cmd.split()
p=subprocess.Popen(args,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
p.communicate()
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: