author | Tero Marttila <tero.marttila@aalto.fi> |
Tue, 03 Mar 2015 12:14:22 +0200 | |
changeset 716 | 4fecd0d1cf23 |
parent 648 | 8e3e6be9ac70 |
child 717 | e37b0a857a5d |
permissions | -rw-r--r-- |
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 |
import logging |
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 |
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
|
3 |
import os.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
|
4 |
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
|
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 |
from pvl.dns import 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
|
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 |
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
|
9 |
|
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 |
def 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
|
11 |
group = optparse.OptionGroup(parser, "Hosts config files") |
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 |
group.add_option('--input-charset', metavar='CHARSET', default='utf-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
|
13 |
help="Encoding used for input files") |
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 |
group.add_option('-o', '--output', metavar='FILE', default=None, |
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 |
help="Write to output file; default stdout") |
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 |
|
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 |
group.add_option('--output-charset', metavar='CHARSET', default='utf-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
|
19 |
help="Encoding used for output files") |
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 |
|
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 |
return group |
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 |
def zone_serial (rrs, 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
|
24 |
""" |
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
|
25 |
Update the serial in the 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
|
26 |
""" |
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
|
27 |
|
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 |
for rr in rrs: |
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 |
if isinstance(rr, zone.ZoneRecordSOA) and rr.type == 'SOA': |
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 |
yield zone.ZoneRecordSOA.build(rr.name, rr.type, |
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 |
rr.master, rr.contact, |
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 |
serial, rr.refresh, rr.retry, rr.expire, rr.nxttl, |
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
|
33 |
line=rr.line, origin=rr.origin, comment=rr.comment, |
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
|
34 |
) |
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
|
35 |
else: |
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
|
36 |
yield rr |
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
|
37 |
|
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
|
38 |
def zone_includes (rrs, includes_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
|
39 |
include_trace=None, |
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
|
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 |
Rewrite include paths in zones. |
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
|
43 |
|
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
|
44 |
include_trace - append included paths to given list |
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
|
45 |
""" |
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 |
for rr in rrs: |
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 |
if isinstance(rr, zone.ZoneDirective) and rr.directive == 'INCLUDE': |
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 |
include_path, = rr.arguments |
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
|
50 |
|
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
|
51 |
include = os.path.join(includes_path, 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
|
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 |
if include_trace is not None: |
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 |
include_trace.append(include) |
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 |
|
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 |
yield zone.ZoneDirective.INCLUDE(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
|
57 |
else: |
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 |
yield rr |
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 |
|
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 |
def 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
|
61 |
""" |
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 |
Output given ZoneDirective/ZoneRecord items to the output file/stdout. |
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 |
""" |
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 |
|
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
|
65 |
file = pvl.args.apply_file(options.output, 'w', options.output_charset) |
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
|
66 |
|
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
|
67 |
for item in 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
|
68 |
file.write(unicode(item)) |
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
|
69 |
file.write('\n') |
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
|
70 |
|
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
|
71 |
def apply_zone (options, 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
|
72 |
""" |
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
|
73 |
ZoneLine.load() in given zones. |
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
|
74 |
|
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
|
75 |
Yields ZoneDirective/ZoneRecord items. |
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
|
76 |
""" |
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
|
77 |
|
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
|
78 |
for file in pvl.args.apply_files(args, 'r', options.input_charset) : |
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
|
79 |
log.info("%s: reading zone", file.name) |
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
|
80 |
|
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
|
81 |
for item in zone.ZoneLine.load(file): |
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
|
82 |
yield item |
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
|
83 |
|
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
|
84 |
def apply_zone_records (options, origin, 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
|
85 |
""" |
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
|
86 |
ZoneRecord.load() in given zones. |
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
|
87 |
|
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
|
88 |
Yields expanded ZoneRecord items. |
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
|
89 |
""" |
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
|
90 |
|
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
|
91 |
for file in pvl.args.apply_files(args, 'r', options.input_charset) : |
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
|
92 |
log.info("%s: expanding zone", file.name) |
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
|
93 |
|
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
|
94 |
for item in zone.ZoneRecord.load(file, origin): |
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
|
95 |
yield item |