#!/usr/bin/python

# Converts a NSD zones file to a Makefile, to allow parallel updates.

# The program to get *one* zone
update_program = "/home/bortzmeyer/tmp/get-one-zone"
# The location of the zones file
zones_file = "/usr/local/nsd/etc/nsd.zones"
# The produced Makefile
makefile_name = "/tmp/Makefile"
#
verbose = True

import re, os, time

comment = re.compile("^\s*;")
zone_def = re.compile("^\s*zone\s+([a-z0-9\.-]+)\s+([^\s]+)\s+masters\s+(.+)$",
                      re.IGNORECASE)
temporary_makefile = makefile_name + ".tmp"

zones = open(zones_file)
makefile = open(temporary_makefile, "w")
makefile_content = ""
first = True
num = 0
for line in zones.xreadlines():
    if comment.search(line):
        continue
    match = zone_def.search(line)
    if match:
        zone = match.group(1)
        file = match.group(2)
        masters = match.group(3)
        makefile_content = "%s\n%s:\n\t %s %s %s %s\n" % (makefile_content,
                                                          zone, update_program,
                                                          zone, file, masters)
        if first:
            all = "all: %s" % (zone)
        else:
            all = "%s %s" % (all, zone)
        first = False
        num = num +1
        
makefile.write(
    "# AUTOMATICALLY GENERATED from %s on %s.\n# DO NOT EDIT!!!\n# %i domains\n%s\n\n" % \
    (zones_file,
     time.strftime ("%Y-%B-%d %H:%M", time.localtime(time.time())),
     num,
     all))
makefile.write(makefile_content)
makefile.close()
os.rename(temporary_makefile, makefile_name)
zones.close()
