author | Tero Marttila <terom@paivola.fi> |
Thu, 16 May 2013 01:03:29 +0300 | |
changeset 233 | c4941645464c |
child 234 | 472f0a422234 |
permissions | -rwxr-xr-x |
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 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
8 |
__version__ = '0.0.1-dev' |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
9 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
10 |
import optparse |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
11 |
import codecs |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
12 |
import os.path |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
13 |
from datetime import datetime |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
14 |
import logging |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
15 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
16 |
log = logging.getLogger('main') |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
17 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
18 |
# command-line options, global state |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
19 |
options = None |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
20 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
21 |
def parse_options (argv) : |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
22 |
""" |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
23 |
Parse command-line arguments. |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
24 |
""" |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
25 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
26 |
prog = argv[0] |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
27 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
28 |
parser = optparse.OptionParser( |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
29 |
prog = prog, |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
30 |
usage = '%prog: [options]', |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
31 |
version = __version__, |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
32 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
33 |
# module docstring |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
34 |
description = __doc__, |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
35 |
) |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
36 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
37 |
# logging |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
38 |
general = optparse.OptionGroup(parser, "General Options") |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
39 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
40 |
general.add_option('-q', '--quiet', dest='loglevel', action='store_const', const=logging.ERROR, help="Less output") |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
41 |
general.add_option('-v', '--verbose', dest='loglevel', action='store_const', const=logging.INFO, help="More output") |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
42 |
general.add_option('-D', '--debug', dest='loglevel', action='store_const', const=logging.DEBUG, help="Even more output") |
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 |
parser.add_option_group(general) |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
45 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
46 |
# defaults |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
47 |
parser.set_defaults( |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
48 |
loglevel = logging.WARN, |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
49 |
expand = [], |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
50 |
) |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
51 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
52 |
# parse |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
53 |
options, args = parser.parse_args(argv[1:]) |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
54 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
55 |
# configure |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
56 |
logging.basicConfig( |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
57 |
format = prog + ': %(name)s: %(levelname)s %(funcName)s : %(message)s', |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
58 |
level = options.loglevel, |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
59 |
) |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
60 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
61 |
return options, args |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
62 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
63 |
# date fmt to use in serial |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
64 |
DATE_FMT = '%Y%m%d' |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
65 |
DATE_LEN = 8 |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
66 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
67 |
SERIAL_FMT = "{date:8}{count:02}" |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
68 |
SERIAL_LEN = 10 |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
69 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
70 |
def format_serial (date, count) : |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
71 |
return SERIAL_FMT.format(date=date.strftime(DATE_FMT), count=count) |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
72 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
73 |
def next_count (value, date, count) : |
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 with next count. |
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 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
78 |
count += 1 |
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 |
# check |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
81 |
if count > 99 : |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
82 |
serial = str(value + 1) |
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 |
log.warn("Serial count rollover: %s, %s; fallback -> %s", date, count, serial) |
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 |
return serial |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
87 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
88 |
return format_serial(date, count) |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
89 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
90 |
def update_serial (serial) : |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
91 |
""" |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
92 |
Update new serial number into given file, based on date. |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
93 |
""" |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
94 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
95 |
today = datetime.now().date() |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
96 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
97 |
# handle |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
98 |
if not serial : |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
99 |
# fresh |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
100 |
log.info("Setting initial serial: %s01", today) |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
101 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
102 |
return format_serial(today, 1) |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
103 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
104 |
elif len(serial) != SERIAL_LEN : |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
105 |
log.warn("Invalid serial format: %s", serial) |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
106 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
107 |
value = int(serial) |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
108 |
serial = str(value + 1) |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
109 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
110 |
log.info("Incrementing serial: %d -> %s", value, serial) |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
111 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
112 |
return serial |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
113 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
114 |
else : |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
115 |
# parse |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
116 |
value = int(serial) |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
117 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
118 |
try : |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
119 |
date = datetime.strptime(serial[:DATE_LEN], DATE_FMT).date() |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
120 |
count = int(serial[DATE_LEN:]) |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
121 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
122 |
except ValueError, e : |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
123 |
# invalid date/count format? |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
124 |
log.warn("Unable to parse serial: %s: %s", serial, e) |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
125 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
126 |
serial = str(value + 1) |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
127 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
128 |
log.info("Incrementing serial: %d -> %s", value, serial) |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
129 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
130 |
return serial |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
131 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
132 |
log.debug("old serial=%s, value=%d, date=%s, count=%s", serial, value, date, count) |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
133 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
134 |
# update |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
135 |
if date < today : |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
136 |
log.info("Updating to today: %s -> %s", date, today) |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
137 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
138 |
# update date |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
139 |
return format_serial(today, 1) |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
140 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
141 |
elif date == today : |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
142 |
# keep date, update count |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
143 |
log.info("Updating today's count: %s, %s", date, count) |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
144 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
145 |
# handle count rollover |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
146 |
return next_count(value, date, count) |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
147 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
148 |
elif date > today : |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
149 |
# keep, update count |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
150 |
serial = next_count(value, date, count) |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
151 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
152 |
log.warn("Serial in future; incrementing count: %s, %s -> %s", date, count, serial) |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
153 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
154 |
return serial |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
155 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
156 |
else : |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
157 |
raise Exception("Invalid serial: %s:%s", old_date, old_count) |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
158 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
159 |
def process_serial (path) : |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
160 |
""" |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
161 |
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
|
162 |
""" |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
163 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
164 |
# read |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
165 |
if os.path.exists(path) : |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
166 |
serial = open(path).read().strip() |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
167 |
log.debug("current serial: %s", serial) |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
168 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
169 |
else : |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
170 |
log.warn("Given .serial does not yet exist: %s", path) |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
171 |
serial = None |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
172 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
173 |
# update |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
174 |
serial = update_serial(serial) |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
175 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
176 |
# write |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
177 |
open(path, 'w').write(serial + '\n') |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
178 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
179 |
return serial |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
180 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
181 |
def main (argv) : |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
182 |
global options |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
183 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
184 |
options, args = parse_options(argv) |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
185 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
186 |
# serial files to update |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
187 |
for path in args : |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
188 |
process_serial(path) |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
189 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
190 |
return 0 |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
191 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
192 |
if __name__ == '__main__': |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
193 |
import sys |
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
194 |
|
c4941645464c
import pvl.dns-* scripts from pvl-dns
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
195 |
sys.exit(main(sys.argv)) |