[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' ],
'ens' : ['138.231.135.0/24'],
'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+$' }

View file

@ -25,6 +25,8 @@ def short_name(fullhostname):
def netv4_to_arpa(net):
addr, prefixlen = net.split('/')
if prefixlen == '8':
return ["%s.in-addr.arpa" % addr.split('.')[0]]
if prefixlen == '16':
return ["%s.in-addr.arpa" % '.'.join(reversed(addr.split('.')[0:2]))]
zones=[]
@ -111,11 +113,13 @@ la base LDAP
DNSs_private = []
ip_master_DNS = config.dns.master
zone_multicast = 'tv.crans.org'
### 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 noms des serveurs on met l'IP sans point ou le nom avec un point
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
@ -145,7 +149,7 @@ la base LDAP
zone_entete="""
$ORIGIN %(zone)s.
$TTL 3600
@\tIN\tSOA sable.crans.org. root.crans.org. (
@\tIN\tSOA %(serveur_autoritaire)s. root.crans.org. (
%(serial)i ; numero de serie
21600 ; refresh (s)
3600 ; retry (s)
@ -203,6 +207,51 @@ zone "%(NOM_zone)s" {
elif n.version == 6:
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) :
""" 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."
elif hostname == short_name(dns.DNSs[0]):
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):
print "Ce serveur est esclave! Lancez ce script sur %s, puis lancez bcfg2 ici" % bcfg2_main
else: