author | Tero Marttila <terom@paivola.fi> |
Mon, 16 Dec 2013 11:48:04 +0200 | |
changeset 260 | e58baab6b4cd |
parent 259 | 65b483fb862c |
child 261 | dff7dcf0013f |
permissions | -rwxr-xr-x |
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
1 |
#!/usr/bin/env python |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
2 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
3 |
""" |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
4 |
Manipulate host definitions for dns/dhcp. |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
5 |
""" |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
6 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
7 |
import pvl.args, optparse |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
8 |
import pvl.dns.zone |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
9 |
import pvl.dhcp.config |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
10 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
11 |
import collections |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
12 |
import re |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
13 |
import logging; log = logging.getLogger('main') |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
14 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
15 |
__version__ = '0.1' |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
16 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
17 |
def parse_options (argv) : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
18 |
""" |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
19 |
Parse command-line arguments. |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
20 |
""" |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
21 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
22 |
parser = optparse.OptionParser( |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
23 |
prog = argv[0], |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
24 |
usage = '%prog: [options]', |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
25 |
version = __version__, |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
26 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
27 |
# module docstring |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
28 |
description = __doc__, |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
29 |
) |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
30 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
31 |
# logging |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
32 |
parser.add_option_group(pvl.args.parser(parser)) |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
33 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
34 |
parser.add_option('-c', '--input-charset', metavar='CHARSET', default='utf-8', |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
35 |
help="Encoding used for input files") |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
36 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
37 |
parser.add_option('--output-charset', metavar='CHARSET', default='utf-8', |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
38 |
help="Encoding used for output files") |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
39 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
40 |
# input |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
41 |
parser.add_option('--import-zone-hosts', metavar='FILE', |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
42 |
help="Load hosts from DNS zone") |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
43 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
44 |
parser.add_option('--import-dhcp-hosts', metavar='FILE', |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
45 |
help="Load hosts from DHCP config") |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
46 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
47 |
# defaults |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
48 |
parser.add_option('--hosts-domain', metavar='DOMAIN', |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
49 |
help="Default domain for hosts") |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
50 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
51 |
parser.add_option('--zone-unused', metavar='HOST', |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
52 |
help="DNS name for unallocated hosts") |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
53 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
54 |
# output |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
55 |
parser.add_option('--output-hosts', metavar='FILE', |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
56 |
help="Output hosts file") |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
57 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
58 |
# defaults |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
59 |
parser.set_defaults( |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
60 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
61 |
) |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
62 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
63 |
# parse |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
64 |
options, args = parser.parse_args(argv[1:]) |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
65 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
66 |
# apply |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
67 |
pvl.args.apply(options, argv[0]) |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
68 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
69 |
return options, args |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
70 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
71 |
def process_zone_hosts (options, file) : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
72 |
""" |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
73 |
Yield host info from zonefile records. |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
74 |
""" |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
75 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
76 |
for rr in pvl.dns.zone.ZoneRecord.load(file) : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
77 |
if options.zone_unused and rr.name == options.zone_unused : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
78 |
log.debug("%s: skip %s", rr.name, rr) |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
79 |
continue |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
80 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
81 |
elif rr.type == 'A' : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
82 |
ip, = rr.data |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
83 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
84 |
yield rr.name, 'ip', ip |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
85 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
86 |
if rr.comment : |
260
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
87 |
yield rr.name, 'comment', rr.comment |
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
88 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
89 |
elif rr.type == 'CNAME' : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
90 |
host, = rr.data |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
91 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
92 |
yield host, 'alias', rr.name |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
93 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
94 |
else : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
95 |
log.warn("%s: unknown rr: %s", rr.name, rr) |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
96 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
97 |
def process_dhcp_host (options, host, items) : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
98 |
""" |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
99 |
Yield host infos from a dhcp host ... { ... } |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
100 |
""" |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
101 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
102 |
hostname = None |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
103 |
ethernet = [] |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
104 |
fixed_address = None |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
105 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
106 |
for item in items : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
107 |
item, args = item[0], item[1:] |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
108 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
109 |
if item == 'hardware' : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
110 |
_ethernet, ethernet = args |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
111 |
assert _ethernet == 'ethernet' |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
112 |
elif item == 'fixed-address' : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
113 |
fixed_address, = args |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
114 |
elif item == 'option' : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
115 |
option = args.pop(0) |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
116 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
117 |
if option == 'host-name' : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
118 |
hostname, = args |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
119 |
else : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
120 |
log.warn("host %s: ignore unknown option: %s", host, option) |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
121 |
else : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
122 |
log.warn("host %s: ignore unknown item: %s", host, item) |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
123 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
124 |
# determine hostname |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
125 |
if hostname : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
126 |
pass |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
127 |
elif fixed_address and not re.match(r'\d+\.\d+\.\d+.\d+', fixed_address) : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
128 |
hostname, domain = fixed_address.split('.', 1) |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
129 |
elif '-' in host : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
130 |
hostname, suffix = host.rsplit('-', 1) |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
131 |
else : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
132 |
log.warn("%s: guess hostname: %s", host, host) |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
133 |
hostname = host |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
134 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
135 |
if hostname : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
136 |
yield hostname, 'ethernet', ethernet |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
137 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
138 |
def process_dhcp_hosts (options, blocks) : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
139 |
""" |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
140 |
Process hosts from a parsed block |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
141 |
""" |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
142 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
143 |
for block, items, blocks in blocks : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
144 |
log.info("%s", block) |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
145 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
146 |
block, args = block[0], block[1:] |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
147 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
148 |
if block == 'group' : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
149 |
for info in process_dhcp_hosts(options, blocks) : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
150 |
yield info |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
151 |
elif block == 'host' : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
152 |
host, = args |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
153 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
154 |
try : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
155 |
for info in process_dhcp_host(options, host, items) : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
156 |
yield info |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
157 |
except ValueError as error : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
158 |
log.warn("%s: invalid host: %s", host, error) |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
159 |
else: |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
160 |
log.warn("ignore unknown block: %s", block) |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
161 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
162 |
def process_dhcp_conf (options, file) : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
163 |
items, blocks = pvl.dhcp.config.DHCPConfigParser().load(file) |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
164 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
165 |
for item in items : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
166 |
item, args = item[0], item[1:] |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
167 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
168 |
if item == 'include' : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
169 |
include, = args |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
170 |
for info in process_dhcp_conf(options, pvl.args.apply_file(include)) : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
171 |
yield info |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
172 |
else : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
173 |
log.warn("ignore unknown item: %s", item) |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
174 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
175 |
for info in process_dhcp_hosts(options, blocks) : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
176 |
yield info |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
177 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
178 |
def apply_hosts_import (options) : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
179 |
""" |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
180 |
Import host infos from given files. |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
181 |
""" |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
182 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
183 |
if options.import_zone_hosts: |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
184 |
for info in process_zone_hosts(options, |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
185 |
pvl.args.apply_file(options.import_zone_hosts)) : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
186 |
yield info |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
187 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
188 |
if options.import_dhcp_hosts: |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
189 |
for info in process_dhcp_conf(options, |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
190 |
pvl.args.apply_file(options.import_dhcp_hosts)) : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
191 |
yield info |
260
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
192 |
|
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
193 |
ZONE_COMMENTS = ( |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
194 |
re.compile(r'(?P<owner>[^/]+)\s*-\s+(?P<host>.+)'), |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
195 |
re.compile(r'(?P<group>.+?)\s*/\s*(?P<owner>.+)\s+[/-]\s+(?P<host>.+)'), |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
196 |
re.compile(r'(?P<group>.+?)\s*/\s*(?P<owner>.+)\s+[(]\s*(?P<host>.+)[)]'), |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
197 |
re.compile(r'(?P<group>.+?)\s*/\s*(?P<owner>.+)'), |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
198 |
re.compile(r'(?P<owner>.+)'), |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
199 |
) |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
200 |
|
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
201 |
ZONE_OWNER_MAIL = re.compile(r'(?P<owner>.*?)\s*<(?P<mail>.+?)>') |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
202 |
|
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
203 |
def process_zone_comment (options, hostname, comment) : |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
204 |
""" |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
205 |
Attempt to parse a host comment field... :D |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
206 |
|
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
207 |
Yields (field, value) bits |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
208 |
""" |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
209 |
|
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
210 |
for regex in ZONE_COMMENTS : |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
211 |
match = regex.match(comment) |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
212 |
|
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
213 |
if match : |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
214 |
break |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
215 |
else : |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
216 |
log.warn("%s: unparsed comment: %s", hostname, comment) |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
217 |
return |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
218 |
|
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
219 |
matches = match.groupdict() |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
220 |
owner = matches.pop('owner', None) |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
221 |
|
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
222 |
if owner : |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
223 |
mail_match = ZONE_OWNER_MAIL.match(owner) |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
224 |
|
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
225 |
if mail_match : |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
226 |
mail_matches = mail_match.groupdict() |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
227 |
|
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
228 |
owner = mail_matches['owner'] |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
229 |
yield 'mail', mail_matches['mail'] |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
230 |
|
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
231 |
yield 'owner', owner |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
232 |
|
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
233 |
for field, value in matches.iteritems() : |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
234 |
if value : |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
235 |
yield field, value |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
236 |
|
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
237 |
|
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
238 |
def process_hosts_comments (options, import_hosts) : |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
239 |
""" |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
240 |
Parse out comments from host imports.. |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
241 |
""" |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
242 |
|
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
243 |
for host, field, value in import_hosts : |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
244 |
if field != 'comment': |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
245 |
yield host, field, value |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
246 |
continue |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
247 |
|
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
248 |
fields = dict(process_zone_comment(options, host, value)) |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
249 |
|
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
250 |
print u"{host:20} {comment:80} = {group:15} / {owner:20} <{mail:20}> / {hostinfo}".format( |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
251 |
host = host, |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
252 |
comment = value, |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
253 |
group = fields.get('group', ''), |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
254 |
owner = fields.get('owner', ''), |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
255 |
mail = fields.get('mail', ''), |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
256 |
hostinfo = fields.get('host', ''), |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
257 |
).encode('utf-8') |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
258 |
|
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
259 |
def process_hosts_import (options, import_hosts) : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
260 |
""" |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
261 |
Import host definitions from given infos |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
262 |
""" |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
263 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
264 |
hosts = collections.defaultdict(lambda: collections.defaultdict(list)) |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
265 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
266 |
for host, field, value in import_hosts : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
267 |
hosts[host][field].append(value) |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
268 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
269 |
return hosts.iteritems() |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
270 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
271 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
272 |
def main (argv) : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
273 |
options, args = parse_options(argv) |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
274 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
275 |
if args : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
276 |
# direct from file |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
277 |
hosts = pvl.args.apply_files(args, 'r', options.input_charset) |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
278 |
else : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
279 |
# import |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
280 |
import_hosts = apply_hosts_import(options) |
260
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
281 |
import_hosts = process_hosts_comments(options, import_hosts) |
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
282 |
hosts = process_hosts_import(options, import_hosts) |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
283 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
284 |
# output |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
285 |
if options.output_hosts : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
286 |
for host, fields in hosts : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
287 |
print host |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
288 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
289 |
for field, values in fields.iteritems() : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
290 |
for value in values : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
291 |
print "\t", field, "\t", value.encode(options.output_charset) |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
292 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
293 |
return 0 |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
294 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
295 |
if __name__ == '__main__': |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
296 |
pvl.args.main(main) |