bin/pvl.dns-process
author Tero Marttila <terom@paivola.fi>
Mon, 09 Mar 2015 23:31:13 +0200
changeset 738 3104fdf7ea26
parent 717 e37b0a857a5d
permissions -rw-r--r--
pvl.hosts.hosts: drop support for instanced ip.* in favor of improved interface:ip.* =
641
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     1
#!/usr/bin/env python
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     2
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     3
"""
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     4
    Process bind zonefiles, without altering their structure.
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     5
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     6
    Takes a zonefile as input, and gives a semantically identical zonefile as output, with the given changes.
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     7
"""
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     8
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     9
import logging; log = logging.getLogger('pvl.dns-process')
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    10
import optparse
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    11
import pvl.args
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    12
import pvl.dns.process
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    13
import pvl.dns.zone
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    14
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    15
def main (argv):
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    16
    parser = optparse.OptionParser(main.__doc__)
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    17
    parser.add_option_group(pvl.args.parser(parser))
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    18
    parser.add_option_group(pvl.dns.process.optparser(parser))
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    19
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    20
    parser.add_option('--serial',               metavar='YYMMDDXX',
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    21
            help="Set serial for SOA record")
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    22
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    23
    parser.add_option('--include-path',         metavar='PATH',
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    24
            help="Rewrite includes to given absolute path")
716
4fecd0d1cf23 pvl.dns.process: merge --include-trace into pvl.dns-process, replacing pvl.dns-includes
Tero Marttila <tero.marttila@aalto.fi>
parents: 648
diff changeset
    25
    
4fecd0d1cf23 pvl.dns.process: merge --include-trace into pvl.dns-process, replacing pvl.dns-includes
Tero Marttila <tero.marttila@aalto.fi>
parents: 648
diff changeset
    26
    parser.add_option('--include-trace',         metavar='FILE',
4fecd0d1cf23 pvl.dns.process: merge --include-trace into pvl.dns-process, replacing pvl.dns-includes
Tero Marttila <tero.marttila@aalto.fi>
parents: 648
diff changeset
    27
            help="Write out included files to given file")
641
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    28
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    29
    # input
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    30
    options, args = pvl.args.parse(parser, argv)
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    31
    
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    32
    # process
717
e37b0a857a5d pvl.dns-process: include zone itself in --include-trace
Tero Marttila <tero.marttila@aalto.fi>
parents: 716
diff changeset
    33
    if options.include_trace:
e37b0a857a5d pvl.dns-process: include zone itself in --include-trace
Tero Marttila <tero.marttila@aalto.fi>
parents: 716
diff changeset
    34
        include_trace = [ ]
e37b0a857a5d pvl.dns-process: include zone itself in --include-trace
Tero Marttila <tero.marttila@aalto.fi>
parents: 716
diff changeset
    35
    else:
e37b0a857a5d pvl.dns-process: include zone itself in --include-trace
Tero Marttila <tero.marttila@aalto.fi>
parents: 716
diff changeset
    36
        include_trace = None
e37b0a857a5d pvl.dns-process: include zone itself in --include-trace
Tero Marttila <tero.marttila@aalto.fi>
parents: 716
diff changeset
    37
e37b0a857a5d pvl.dns-process: include zone itself in --include-trace
Tero Marttila <tero.marttila@aalto.fi>
parents: 716
diff changeset
    38
    zone = list(pvl.dns.process.apply_zone(options, args,
e37b0a857a5d pvl.dns-process: include zone itself in --include-trace
Tero Marttila <tero.marttila@aalto.fi>
parents: 716
diff changeset
    39
            include_trace   = include_trace,
e37b0a857a5d pvl.dns-process: include zone itself in --include-trace
Tero Marttila <tero.marttila@aalto.fi>
parents: 716
diff changeset
    40
    ))
641
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    41
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    42
    if options.serial:
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    43
        log.info("Set zone serial: %s", options.serial)
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    44
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    45
        zone = list(pvl.dns.process.zone_serial(zone, options.serial))
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    46
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    47
    if options.include_path:
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    48
        log.info("Set zone include path: %s", options.include_path)
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    49
716
4fecd0d1cf23 pvl.dns.process: merge --include-trace into pvl.dns-process, replacing pvl.dns-includes
Tero Marttila <tero.marttila@aalto.fi>
parents: 648
diff changeset
    50
        zone = list(pvl.dns.process.zone_includes(zone, options.include_path,
4fecd0d1cf23 pvl.dns.process: merge --include-trace into pvl.dns-process, replacing pvl.dns-includes
Tero Marttila <tero.marttila@aalto.fi>
parents: 648
diff changeset
    51
                include_trace   = include_trace,
4fecd0d1cf23 pvl.dns.process: merge --include-trace into pvl.dns-process, replacing pvl.dns-includes
Tero Marttila <tero.marttila@aalto.fi>
parents: 648
diff changeset
    52
        ))
4fecd0d1cf23 pvl.dns.process: merge --include-trace into pvl.dns-process, replacing pvl.dns-includes
Tero Marttila <tero.marttila@aalto.fi>
parents: 648
diff changeset
    53
4fecd0d1cf23 pvl.dns.process: merge --include-trace into pvl.dns-process, replacing pvl.dns-includes
Tero Marttila <tero.marttila@aalto.fi>
parents: 648
diff changeset
    54
    if options.include_trace:
4fecd0d1cf23 pvl.dns.process: merge --include-trace into pvl.dns-process, replacing pvl.dns-includes
Tero Marttila <tero.marttila@aalto.fi>
parents: 648
diff changeset
    55
        with pvl.args.apply_file(options.include_trace, 'w') as file:
4fecd0d1cf23 pvl.dns.process: merge --include-trace into pvl.dns-process, replacing pvl.dns-includes
Tero Marttila <tero.marttila@aalto.fi>
parents: 648
diff changeset
    56
            for include in include_trace:
4fecd0d1cf23 pvl.dns.process: merge --include-trace into pvl.dns-process, replacing pvl.dns-includes
Tero Marttila <tero.marttila@aalto.fi>
parents: 648
diff changeset
    57
                print >>file, include
641
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    58
    
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    59
    pvl.dns.process.apply_zone_output(options, zone)
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    60
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    61
    return 0
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    62
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    63
if __name__ == '__main__':
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    64
    pvl.args.main(main)