bin/pvl.dns-serial
author Tero Marttila <terom@paivola.fi>
Tue, 10 Sep 2013 12:12:02 +0300
changeset 245 5c1c57bc510a
parent 234 472f0a422234
child 246 819320b0cf81
permissions -rwxr-xr-x
doctest pvl.dns.serial
233
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     1
#!/usr/bin/env python
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     2
# vim: set ft=python :
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     3
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     4
"""
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     5
    Update zone serials.
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     6
"""
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     7
234
472f0a422234 split up pvl.dns-serial into pvl.dns.serial module
Tero Marttila <terom@paivola.fi>
parents: 233
diff changeset
     8
from pvl.dns import __version__
472f0a422234 split up pvl.dns-serial into pvl.dns.serial module
Tero Marttila <terom@paivola.fi>
parents: 233
diff changeset
     9
import pvl.dns.serial
233
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    10
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    11
import os.path
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    12
234
472f0a422234 split up pvl.dns-serial into pvl.dns.serial module
Tero Marttila <terom@paivola.fi>
parents: 233
diff changeset
    13
import pvl.args
472f0a422234 split up pvl.dns-serial into pvl.dns.serial module
Tero Marttila <terom@paivola.fi>
parents: 233
diff changeset
    14
import optparse
472f0a422234 split up pvl.dns-serial into pvl.dns.serial module
Tero Marttila <terom@paivola.fi>
parents: 233
diff changeset
    15
import logging; log = logging.getLogger('main')
233
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    16
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    17
def parse_options (argv) :
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    18
    """
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    19
        Parse command-line arguments.
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    20
    """
234
472f0a422234 split up pvl.dns-serial into pvl.dns.serial module
Tero Marttila <terom@paivola.fi>
parents: 233
diff changeset
    21
233
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    22
    prog = argv[0]
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    23
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    24
    parser = optparse.OptionParser(
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    25
            prog        = prog,
234
472f0a422234 split up pvl.dns-serial into pvl.dns.serial module
Tero Marttila <terom@paivola.fi>
parents: 233
diff changeset
    26
            usage       = '%prog: [options] <serial-path> ...',
233
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    27
            version     = __version__,
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    28
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    29
            # module docstring
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    30
            description = __doc__,
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    31
    )
234
472f0a422234 split up pvl.dns-serial into pvl.dns.serial module
Tero Marttila <terom@paivola.fi>
parents: 233
diff changeset
    32
    
472f0a422234 split up pvl.dns-serial into pvl.dns.serial module
Tero Marttila <terom@paivola.fi>
parents: 233
diff changeset
    33
    # options
472f0a422234 split up pvl.dns-serial into pvl.dns.serial module
Tero Marttila <terom@paivola.fi>
parents: 233
diff changeset
    34
    parser.add_option_group(pvl.args.parser(parser))
233
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    35
234
472f0a422234 split up pvl.dns-serial into pvl.dns.serial module
Tero Marttila <terom@paivola.fi>
parents: 233
diff changeset
    36
    parser.add_option('-n', '--noop',       action='store_true',
472f0a422234 split up pvl.dns-serial into pvl.dns.serial module
Tero Marttila <terom@paivola.fi>
parents: 233
diff changeset
    37
            help="Do not actually update serial")
233
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    38
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    39
    # defaults
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    40
    parser.set_defaults(
234
472f0a422234 split up pvl.dns-serial into pvl.dns.serial module
Tero Marttila <terom@paivola.fi>
parents: 233
diff changeset
    41
233
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    42
    )
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    43
    
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    44
    # parse
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    45
    options, args = parser.parse_args(argv[1:])
234
472f0a422234 split up pvl.dns-serial into pvl.dns.serial module
Tero Marttila <terom@paivola.fi>
parents: 233
diff changeset
    46
    
472f0a422234 split up pvl.dns-serial into pvl.dns.serial module
Tero Marttila <terom@paivola.fi>
parents: 233
diff changeset
    47
    # apply
472f0a422234 split up pvl.dns-serial into pvl.dns.serial module
Tero Marttila <terom@paivola.fi>
parents: 233
diff changeset
    48
    pvl.args.apply(options, prog)
233
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    49
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    50
    return options, args
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    51
234
472f0a422234 split up pvl.dns-serial into pvl.dns.serial module
Tero Marttila <terom@paivola.fi>
parents: 233
diff changeset
    52
def process_serial (options, path) :
233
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    53
    """
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    54
        Read old serial, generate new one, and update file.
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    55
    """
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    56
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    57
    # read
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    58
    if os.path.exists(path) :
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    59
        serial = open(path).read().strip()
234
472f0a422234 split up pvl.dns-serial into pvl.dns.serial module
Tero Marttila <terom@paivola.fi>
parents: 233
diff changeset
    60
        log.debug("%s: current: %s", path, serial)
233
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    61
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    62
    else :
234
472f0a422234 split up pvl.dns-serial into pvl.dns.serial module
Tero Marttila <terom@paivola.fi>
parents: 233
diff changeset
    63
        log.warn("%s: Given .serial does not yet exist", path)
233
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    64
        serial = None
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    65
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    66
    # update
234
472f0a422234 split up pvl.dns-serial into pvl.dns.serial module
Tero Marttila <terom@paivola.fi>
parents: 233
diff changeset
    67
    serial = pvl.dns.serial.update_serial(serial)
472f0a422234 split up pvl.dns-serial into pvl.dns.serial module
Tero Marttila <terom@paivola.fi>
parents: 233
diff changeset
    68
    
472f0a422234 split up pvl.dns-serial into pvl.dns.serial module
Tero Marttila <terom@paivola.fi>
parents: 233
diff changeset
    69
    if options.noop :
472f0a422234 split up pvl.dns-serial into pvl.dns.serial module
Tero Marttila <terom@paivola.fi>
parents: 233
diff changeset
    70
        log.warn("%s: %s", path, serial)
472f0a422234 split up pvl.dns-serial into pvl.dns.serial module
Tero Marttila <terom@paivola.fi>
parents: 233
diff changeset
    71
    else :
472f0a422234 split up pvl.dns-serial into pvl.dns.serial module
Tero Marttila <terom@paivola.fi>
parents: 233
diff changeset
    72
        # write
472f0a422234 split up pvl.dns-serial into pvl.dns.serial module
Tero Marttila <terom@paivola.fi>
parents: 233
diff changeset
    73
        open(path, 'w').write(serial + '\n')
233
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    74
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    75
    return serial
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    76
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    77
def main (argv) :
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    78
    options, args = parse_options(argv)
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    79
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    80
    # serial files to update
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    81
    for path in args :
234
472f0a422234 split up pvl.dns-serial into pvl.dns.serial module
Tero Marttila <terom@paivola.fi>
parents: 233
diff changeset
    82
        process_serial(options, path)
233
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    83
    
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    84
    return 0
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    85
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    86
if __name__ == '__main__':
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    87
    import sys
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    88
c4941645464c import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    89
    sys.exit(main(sys.argv))