diff -r 57e8168ba8c4 -r 0f9cae2d7147 pvl-config --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pvl-config Sun Jul 12 00:51:08 2009 +0300 @@ -0,0 +1,88 @@ +#!/usr/bin/env python2.5 + +import data, dhcp, bind_conf, bind + +import optparse, itertools + +def parse_args (argv) : + """ + Parse the command-line arguments from the given argv list, returning a (options_struct, args_list) tuple, + as per optparse. + """ + + usage = "Usage: %prog [options] data-file" + + # define our options + parser = optparse.OptionParser(usage=usage) + parser.add_option('--dhcpd-conf', dest='dhcpd_conf', metavar="PATH", help="path to dhcpd.conf", default='/etc/dhcp3/dhcpd.conf') + parser.add_option('--bind-zone', dest='bind_zone', metavar="PATH", help="path to bind zone file", default=None) + parser.add_option('--autoserial', dest='autoserial_path', metavar="PATH", help="path to autoserial file", default='autoserial') + + # parse them + options, args = parser.parse_args(args=argv[1:]) + + # parse the positional arguments + data_file, = args + + # ok + return options, (data_file, ) + +def write_dhcp (options, settings) : + """ + Write the DHCP config module using the data loaded from the given module + """ + + # build the config file + config = dhcp.Config(path=options.dhcpd_conf, + settings = settings.dhcp_settings, + options = settings.dhcp_options, + shared_network = settings.shared_network, + subnets = settings.subnets, + hosts = itertools.chain(*(host.build_dhcp_hosts() for host in settings.hosts)), + ) + + # write it out + config.write() + +def write_bind (options, settings) : + """ + Write a BIND config for a forward zone + """ + + assert options.bind_zone + + # load the serial + autoserial = bind.AutoSerial(options.autoserial_path) + + # build the zone file + zone = bind.Domain(domain=settings.domain, path=options.bind_zone, + nameservers = settings.nameservers, + mailservers = [((i+1)*10, label) for i, label in enumerate(settings.mailservers)], + serial = autoserial.serial(), + settings = settings.bind_settings, + objs = itertools.chain(*[host.build_bind_domain_records(settings.domain) for host in settings.hosts]), + ) + + # write it out + zone.write() + +def main (argv) : + """ + Our app entry point, parse args, load data, write out the config files + """ + + # parse args + options, (data_file, ) = parse_args(argv) + + # load the data + data_module = data.load_py('pvl_hosts_data', data_file) + + # write out the config files + write_dhcp(options, data_module) + write_bind(options, data_module) + +if __name__ == '__main__' : + from sys import argv + + main(argv) +