pvl.hosts.config: fix handling of mixed boot=... boot.foo=... independent of dict ordering
#!/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))