bin/pvl.dns-serial
author Tero Marttila <terom@paivola.fi>
Mon, 09 Mar 2015 21:17:06 +0200
changeset 736 75938aa0390b
parent 645 0467e1464cca
permissions -rwxr-xr-x
pvl.hosts.interfaces: remove junos-specifics
#!/usr/bin/env python

"""
    Update zone serials.
"""

import logging; log = logging.getLogger('main')
import optparse
import os.path
import pvl.args
import pvl.dns.serial

from pvl.hosts import __version__

def parse_options (argv) :
    """
        Parse command-line arguments.
    """

    prog = argv[0]

    parser = optparse.OptionParser(
            prog        = prog,
            usage       = '%prog: [options] <serial-path> ...',
            version     = __version__,

            # module docstring
            description = __doc__,
    )
    
    # options
    parser.add_option_group(pvl.args.parser(parser))

    parser.add_option('-n', '--noop',       action='store_true',
            help="Do not actually update serial")

    # defaults
    parser.set_defaults(

    )
    
    # parse
    options, args = parser.parse_args(argv[1:])
    
    # apply
    pvl.args.apply(options, prog)

    return options, args

def process_serial (options, path) :
    """
        Read old serial, generate new one, and update file.
    """

    # read
    if os.path.exists(path) :
        serial = open(path).read().strip()
        log.debug("%s: current: %s", path, serial)

    else :
        log.warn("%s: Given .serial does not yet exist", path)
        serial = None

    # update
    serial = pvl.dns.serial.update_serial(serial)
    
    if options.noop :
        log.warn("%s: %s", path, serial)
    else :
        # write
        open(path, 'w').write(serial + '\n')

    return serial

def main (argv) :
    options, args = parse_options(argv)

    # serial files to update
    for path in args :
        process_serial(options, path)
    
    return 0

if __name__ == '__main__':
    import sys

    sys.exit(main(sys.argv))