author | Tero Marttila <tero.marttila@aalto.fi> |
Tue, 03 Mar 2015 11:40:02 +0200 | |
changeset 710 | 09c6676a90a1 |
parent 379 | 60ce05b30227 |
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 |
""" |
268
560ba0544254
pvl.hosts-import: ugly indexed foo.X keys for multi-value fields..
Tero Marttila <terom@paivola.fi>
parents:
266
diff
changeset
|
4 |
Import hosts from existing BIND or dhcpd files. |
259
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 |
|
268
560ba0544254
pvl.hosts-import: ugly indexed foo.X keys for multi-value fields..
Tero Marttila <terom@paivola.fi>
parents:
266
diff
changeset
|
7 |
import pvl.args |
259
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 |
313
c211ef65fd67
pvl.hosts-import: alias4 mapping
Tero Marttila <terom@paivola.fi>
parents:
311
diff
changeset
|
10 |
import pvl.hosts |
261
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
11 |
import pvl.ldap.args |
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
12 |
|
302
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
13 |
import collections |
263
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
14 |
import ipaddr |
302
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
15 |
import logging; log = logging.getLogger('pvl.hosts-import') |
263
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
16 |
import optparse |
302
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
17 |
import os.path |
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
18 |
import re |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
19 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
20 |
__version__ = '0.1' |
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 |
def parse_options (argv) : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
23 |
""" |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
24 |
Parse command-line arguments. |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
25 |
""" |
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 |
parser = optparse.OptionParser( |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
28 |
prog = argv[0], |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
29 |
usage = '%prog: [options]', |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
30 |
version = __version__, |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
31 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
32 |
# module docstring |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
33 |
description = __doc__, |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
34 |
) |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
35 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
36 |
# logging |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
37 |
parser.add_option_group(pvl.args.parser(parser)) |
261
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
38 |
parser.add_option_group(pvl.ldap.args.parser(parser)) |
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
39 |
|
379
60ce05b30227
pvl.hosts-import: fix conflicting -c option
Tero Marttila <terom@fixme.fi>
parents:
328
diff
changeset
|
40 |
parser.add_option('--input-charset', metavar='CHARSET', default='utf-8', |
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
41 |
help="Encoding used for input files") |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
42 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
43 |
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
|
44 |
help="Encoding used for output files") |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
45 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
46 |
# input |
301
b41902b0b9cf
pvl.hosts-import: support multiple --import-zone/dhcp-hosts files, change --import-zone-comments-*, import TXT as comments
Tero Marttila <terom@paivola.fi>
parents:
288
diff
changeset
|
47 |
parser.add_option('--import-zone-hosts', metavar='FILE', action='append', |
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
48 |
help="Load hosts from DNS zone") |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
49 |
|
302
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
50 |
parser.add_option('--import-zone-origin', metavar='ORIGIN', |
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
51 |
help="Initial origin for given zone file; default is basename") |
280
8118854bfa6f
pvl.hosts-import: import boot settings
Tero Marttila <terom@paivola.fi>
parents:
279
diff
changeset
|
52 |
|
301
b41902b0b9cf
pvl.hosts-import: support multiple --import-zone/dhcp-hosts files, change --import-zone-comments-*, import TXT as comments
Tero Marttila <terom@paivola.fi>
parents:
288
diff
changeset
|
53 |
parser.add_option('--import-zone-comments-owner', action='store_const', |
b41902b0b9cf
pvl.hosts-import: support multiple --import-zone/dhcp-hosts files, change --import-zone-comments-*, import TXT as comments
Tero Marttila <terom@paivola.fi>
parents:
288
diff
changeset
|
54 |
dest='import_zone_comments', const='owner', |
275
4dc5cc30a278
pvl.hosts-import: support AAAA, make default comment handling an option
Tero Marttila <terom@paivola.fi>
parents:
268
diff
changeset
|
55 |
help="Import DNS zone comment as owner comment") |
4dc5cc30a278
pvl.hosts-import: support AAAA, make default comment handling an option
Tero Marttila <terom@paivola.fi>
parents:
268
diff
changeset
|
56 |
|
301
b41902b0b9cf
pvl.hosts-import: support multiple --import-zone/dhcp-hosts files, change --import-zone-comments-*, import TXT as comments
Tero Marttila <terom@paivola.fi>
parents:
288
diff
changeset
|
57 |
parser.add_option('--import-zone-comments-host', action='store_const', |
b41902b0b9cf
pvl.hosts-import: support multiple --import-zone/dhcp-hosts files, change --import-zone-comments-*, import TXT as comments
Tero Marttila <terom@paivola.fi>
parents:
288
diff
changeset
|
58 |
dest='import_zone_comments', const='host', |
275
4dc5cc30a278
pvl.hosts-import: support AAAA, make default comment handling an option
Tero Marttila <terom@paivola.fi>
parents:
268
diff
changeset
|
59 |
help="Import DNS zone comment as host comment") |
4dc5cc30a278
pvl.hosts-import: support AAAA, make default comment handling an option
Tero Marttila <terom@paivola.fi>
parents:
268
diff
changeset
|
60 |
|
302
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
61 |
parser.add_option('--import-dhcp-hosts', metavar='FILE', action='append', |
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
62 |
help="Load hosts from DHCP config") |
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
63 |
|
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
64 |
parser.add_option('--import-dhcp-boot-server', metavar='NEXT-SERVER', |
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
65 |
help="Default boot_server for dpc hosts") |
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
66 |
|
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
67 |
|
261
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
68 |
parser.add_option('--dump-host-comments', action='store_true', |
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
69 |
help="Dump out info on imported host comments") |
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
70 |
|
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
71 |
# defaults |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
72 |
parser.add_option('--zone-unused', metavar='HOST', |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
73 |
help="DNS name for unallocated hosts") |
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 |
# output |
311
0e79917de9f7
pvl.hosts-import: default --output-hosts to stdout
Tero Marttila <terom@paivola.fi>
parents:
309
diff
changeset
|
76 |
parser.add_option('--output-hosts', metavar='FILE', default='-', |
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
77 |
help="Output hosts file") |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
78 |
|
265
5f2807999222
pvl.dns-hosts: always sort by ip
Tero Marttila <terom@paivola.fi>
parents:
264
diff
changeset
|
79 |
parser.add_option('--output-prefix', metavar='PREFIX', |
5f2807999222
pvl.dns-hosts: always sort by ip
Tero Marttila <terom@paivola.fi>
parents:
264
diff
changeset
|
80 |
help="Select hosts by ip prefix") |
263
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
81 |
|
304
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
82 |
parser.add_option('--output-domain', metavar='DOMAIN', |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
83 |
help="Select hosts by domain") |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
84 |
|
327
9d7d40206a74
pvl.hosts-import: add --output-others
Tero Marttila <terom@paivola.fi>
parents:
326
diff
changeset
|
85 |
parser.add_option('--output-others', action='store_true', |
9d7d40206a74
pvl.hosts-import: add --output-others
Tero Marttila <terom@paivola.fi>
parents:
326
diff
changeset
|
86 |
help="Negate selection") |
9d7d40206a74
pvl.hosts-import: add --output-others
Tero Marttila <terom@paivola.fi>
parents:
326
diff
changeset
|
87 |
|
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
88 |
# defaults |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
89 |
parser.set_defaults( |
301
b41902b0b9cf
pvl.hosts-import: support multiple --import-zone/dhcp-hosts files, change --import-zone-comments-*, import TXT as comments
Tero Marttila <terom@paivola.fi>
parents:
288
diff
changeset
|
90 |
import_zone_hosts = [], |
b41902b0b9cf
pvl.hosts-import: support multiple --import-zone/dhcp-hosts files, change --import-zone-comments-*, import TXT as comments
Tero Marttila <terom@paivola.fi>
parents:
288
diff
changeset
|
91 |
import_dhcp_hosts = [], |
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
92 |
) |
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 |
# parse |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
95 |
options, args = parser.parse_args(argv[1:]) |
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 |
# apply |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
98 |
pvl.args.apply(options, argv[0]) |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
99 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
100 |
return options, args |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
101 |
|
302
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
102 |
def import_zone_host_name (options, name, origin) : |
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
103 |
""" |
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
104 |
Import zone name from rr |
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
105 |
""" |
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
106 |
|
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
107 |
if '.' in name : |
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
108 |
host, domain = name.split('.', 1) |
309
2b8ba955afac
pvl.dns: import join() within package
Tero Marttila <terom@paivola.fi>
parents:
304
diff
changeset
|
109 |
domain = pvl.dns.join(domain, origin) |
302
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
110 |
else : |
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
111 |
host = name |
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
112 |
domain = origin |
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
113 |
|
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
114 |
if domain : |
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
115 |
# not a fqdn |
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
116 |
domain = domain.rstrip('.') |
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
117 |
|
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
118 |
log.info("%s: %s@%s", name, host, domain) |
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
119 |
else : |
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
120 |
log.warn("%s: no domain", name) |
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
121 |
|
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
122 |
return host, domain |
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
123 |
|
263
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
124 |
def import_zone_hosts (options, file) : |
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
125 |
""" |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
126 |
Yield host info from zonefile records. |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
127 |
""" |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
128 |
|
302
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
129 |
origin = options.import_zone_origin or os.path.basename(file.name) |
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
130 |
|
318
304f56896942
pvl.hosts-import: import $GENERATE ips for hosts also in dhcp
Tero Marttila <terom@paivola.fi>
parents:
315
diff
changeset
|
131 |
for line, rr in pvl.dns.zone.ZoneLine.load(file, |
302
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
132 |
# used to determine domain |
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
133 |
origin = origin, |
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
134 |
|
318
304f56896942
pvl.hosts-import: import $GENERATE ips for hosts also in dhcp
Tero Marttila <terom@paivola.fi>
parents:
315
diff
changeset
|
135 |
# lazy-import generated hosts on demand |
304f56896942
pvl.hosts-import: import $GENERATE ips for hosts also in dhcp
Tero Marttila <terom@paivola.fi>
parents:
315
diff
changeset
|
136 |
expand_generate = True, |
279
1b72f1e0cdbe
pvl.hosts-import: do not import $GENERATE hosts; fix warnings on missing owner comments
Tero Marttila <terom@paivola.fi>
parents:
275
diff
changeset
|
137 |
) : |
319
f56f60c2dd9b
pvl.hosts-import: do not warn on $ORIGIN lines
Tero Marttila <terom@paivola.fi>
parents:
318
diff
changeset
|
138 |
if rr : |
f56f60c2dd9b
pvl.hosts-import: do not warn on $ORIGIN lines
Tero Marttila <terom@paivola.fi>
parents:
318
diff
changeset
|
139 |
pass |
f56f60c2dd9b
pvl.hosts-import: do not warn on $ORIGIN lines
Tero Marttila <terom@paivola.fi>
parents:
318
diff
changeset
|
140 |
elif line.parts[0] == '$ORIGIN' : |
f56f60c2dd9b
pvl.hosts-import: do not warn on $ORIGIN lines
Tero Marttila <terom@paivola.fi>
parents:
318
diff
changeset
|
141 |
# handled by ZoneLine.load |
f56f60c2dd9b
pvl.hosts-import: do not warn on $ORIGIN lines
Tero Marttila <terom@paivola.fi>
parents:
318
diff
changeset
|
142 |
continue |
f56f60c2dd9b
pvl.hosts-import: do not warn on $ORIGIN lines
Tero Marttila <terom@paivola.fi>
parents:
318
diff
changeset
|
143 |
else : |
318
304f56896942
pvl.hosts-import: import $GENERATE ips for hosts also in dhcp
Tero Marttila <terom@paivola.fi>
parents:
315
diff
changeset
|
144 |
log.warn("%s: skip non-rr line: %s", line, line.line) |
304f56896942
pvl.hosts-import: import $GENERATE ips for hosts also in dhcp
Tero Marttila <terom@paivola.fi>
parents:
315
diff
changeset
|
145 |
continue |
304f56896942
pvl.hosts-import: import $GENERATE ips for hosts also in dhcp
Tero Marttila <terom@paivola.fi>
parents:
315
diff
changeset
|
146 |
|
302
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
147 |
host, domain = import_zone_host_name(options, rr.name, rr.origin) |
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
148 |
|
328
9b4ee4bad3d1
pvl.hosts-import: also import --zone-unused=ufc hosts, and output them as special comments
Tero Marttila <terom@paivola.fi>
parents:
327
diff
changeset
|
149 |
if rr.type in ('A', 'AAAA') : |
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
150 |
ip, = rr.data |
328
9b4ee4bad3d1
pvl.hosts-import: also import --zone-unused=ufc hosts, and output them as special comments
Tero Marttila <terom@paivola.fi>
parents:
327
diff
changeset
|
151 |
ip = ipaddr.IPAddress(ip) |
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
152 |
|
281
b236f689ba22
pvl.hosts-import: separate ip6 field
Tero Marttila <terom@paivola.fi>
parents:
280
diff
changeset
|
153 |
type = { 'A': 'ip', 'AAAA': 'ip6' }[rr.type] |
b236f689ba22
pvl.hosts-import: separate ip6 field
Tero Marttila <terom@paivola.fi>
parents:
280
diff
changeset
|
154 |
|
328
9b4ee4bad3d1
pvl.hosts-import: also import --zone-unused=ufc hosts, and output them as special comments
Tero Marttila <terom@paivola.fi>
parents:
327
diff
changeset
|
155 |
if options.zone_unused and rr.name == options.zone_unused : |
9b4ee4bad3d1
pvl.hosts-import: also import --zone-unused=ufc hosts, and output them as special comments
Tero Marttila <terom@paivola.fi>
parents:
327
diff
changeset
|
156 |
yield (str(ip), domain), 'ip.unused', ip |
9b4ee4bad3d1
pvl.hosts-import: also import --zone-unused=ufc hosts, and output them as special comments
Tero Marttila <terom@paivola.fi>
parents:
327
diff
changeset
|
157 |
else : |
9b4ee4bad3d1
pvl.hosts-import: also import --zone-unused=ufc hosts, and output them as special comments
Tero Marttila <terom@paivola.fi>
parents:
327
diff
changeset
|
158 |
yield (host, domain), type, ip, |
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
159 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
160 |
if rr.comment : |
304
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
161 |
yield (host, domain), 'comment', rr.comment |
275
4dc5cc30a278
pvl.hosts-import: support AAAA, make default comment handling an option
Tero Marttila <terom@paivola.fi>
parents:
268
diff
changeset
|
162 |
|
318
304f56896942
pvl.hosts-import: import $GENERATE ips for hosts also in dhcp
Tero Marttila <terom@paivola.fi>
parents:
315
diff
changeset
|
163 |
if line.parts[0] == '$GENERATE' : |
304f56896942
pvl.hosts-import: import $GENERATE ips for hosts also in dhcp
Tero Marttila <terom@paivola.fi>
parents:
315
diff
changeset
|
164 |
# only import as host if used for other purposes as well |
304f56896942
pvl.hosts-import: import $GENERATE ips for hosts also in dhcp
Tero Marttila <terom@paivola.fi>
parents:
315
diff
changeset
|
165 |
yield (host, domain), 'lazy-import', True |
304f56896942
pvl.hosts-import: import $GENERATE ips for hosts also in dhcp
Tero Marttila <terom@paivola.fi>
parents:
315
diff
changeset
|
166 |
|
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
167 |
elif rr.type == 'CNAME' : |
302
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
168 |
alias, = rr.data |
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
169 |
alias_host, alias_domain = import_zone_host_name(options, alias, rr.origin) |
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
170 |
|
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
171 |
if domain == alias_domain : |
304
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
172 |
yield (alias_host, alias_domain), 'alias', host |
325
9be2b216e87c
change host alias to always be host-domain relative
Tero Marttila <terom@paivola.fi>
parents:
320
diff
changeset
|
173 |
elif domain.endswith('.' + alias_domain) : |
9be2b216e87c
change host alias to always be host-domain relative
Tero Marttila <terom@paivola.fi>
parents:
320
diff
changeset
|
174 |
yield (alias_host, alias_domain), 'alias', pvl.dns.join(host, domain[:(len(domain) - len(alias_domain) - 1)]) |
302
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
175 |
else : |
325
9be2b216e87c
change host alias to always be host-domain relative
Tero Marttila <terom@paivola.fi>
parents:
320
diff
changeset
|
176 |
log.warn("%s@%s: alias outside of target domain: %s", host, domain, alias_domain) |
301
b41902b0b9cf
pvl.hosts-import: support multiple --import-zone/dhcp-hosts files, change --import-zone-comments-*, import TXT as comments
Tero Marttila <terom@paivola.fi>
parents:
288
diff
changeset
|
177 |
|
b41902b0b9cf
pvl.hosts-import: support multiple --import-zone/dhcp-hosts files, change --import-zone-comments-*, import TXT as comments
Tero Marttila <terom@paivola.fi>
parents:
288
diff
changeset
|
178 |
elif rr.type == 'TXT' : |
b41902b0b9cf
pvl.hosts-import: support multiple --import-zone/dhcp-hosts files, change --import-zone-comments-*, import TXT as comments
Tero Marttila <terom@paivola.fi>
parents:
288
diff
changeset
|
179 |
txt, = rr.data |
b41902b0b9cf
pvl.hosts-import: support multiple --import-zone/dhcp-hosts files, change --import-zone-comments-*, import TXT as comments
Tero Marttila <terom@paivola.fi>
parents:
288
diff
changeset
|
180 |
|
304
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
181 |
yield (host, domain), 'comment', txt |
259
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 |
else : |
302
f50469a1da4d
pvl.hosts-import: importing zones with multiple domains
Tero Marttila <terom@paivola.fi>
parents:
301
diff
changeset
|
184 |
log.warn("%s: unknown rr: %s", host, rr) |
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
185 |
|
304
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
186 |
def import_dhcp_host (options, dhcp_host, items) : |
259
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 |
Yield host infos from a dhcp host ... { ... } |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
189 |
""" |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
190 |
|
304
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
191 |
host_name = None |
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
192 |
ethernet = [] |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
193 |
fixed_address = None |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
194 |
|
280
8118854bfa6f
pvl.hosts-import: import boot settings
Tero Marttila <terom@paivola.fi>
parents:
279
diff
changeset
|
195 |
boot_server = options.import_dhcp_boot_server |
8118854bfa6f
pvl.hosts-import: import boot settings
Tero Marttila <terom@paivola.fi>
parents:
279
diff
changeset
|
196 |
boot_filename = None |
8118854bfa6f
pvl.hosts-import: import boot settings
Tero Marttila <terom@paivola.fi>
parents:
279
diff
changeset
|
197 |
|
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
198 |
for item in items : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
199 |
item, args = item[0], item[1:] |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
200 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
201 |
if item == 'hardware' : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
202 |
_ethernet, ethernet = args |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
203 |
assert _ethernet == 'ethernet' |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
204 |
elif item == 'fixed-address' : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
205 |
fixed_address, = args |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
206 |
elif item == 'option' : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
207 |
option = args.pop(0) |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
208 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
209 |
if option == 'host-name' : |
304
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
210 |
host_name, = args |
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
211 |
else : |
304
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
212 |
log.warn("host %s: ignore unknown option: %s", dhcp_host, option) |
280
8118854bfa6f
pvl.hosts-import: import boot settings
Tero Marttila <terom@paivola.fi>
parents:
279
diff
changeset
|
213 |
elif item == 'next-sever' : |
8118854bfa6f
pvl.hosts-import: import boot settings
Tero Marttila <terom@paivola.fi>
parents:
279
diff
changeset
|
214 |
boot_server, = args |
8118854bfa6f
pvl.hosts-import: import boot settings
Tero Marttila <terom@paivola.fi>
parents:
279
diff
changeset
|
215 |
elif item == 'filename' : |
8118854bfa6f
pvl.hosts-import: import boot settings
Tero Marttila <terom@paivola.fi>
parents:
279
diff
changeset
|
216 |
boot_filename, = args |
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
217 |
else : |
304
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
218 |
log.warn("host %s: ignore unknown item: %s", dhcp_host, item) |
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
219 |
|
304
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
220 |
# determine host |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
221 |
host = None |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
222 |
domain = None |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
223 |
suffix = None |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
224 |
|
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
225 |
if not fixed_address : |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
226 |
log.warn("%s: fixed-address is missing, unable to determine hostname/domainname", dhcp_host) |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
227 |
elif re.match(r'\d+\.\d+\.\d+.\d+', fixed_address) : |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
228 |
log.warn("%s: fixed-address is an IP, unable to determine hostname/domainname", dhcp_host) |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
229 |
else : |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
230 |
host, domain = fixed_address.split('.', 1) |
264
ce29be46f705
add unknown owners as a comment..
Tero Marttila <terom@paivola.fi>
parents:
263
diff
changeset
|
231 |
|
304
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
232 |
# XXX: not actually true... eh |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
233 |
if host and dhcp_host.lower() == host.lower() : |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
234 |
# do not split suffix from host |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
235 |
pass |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
236 |
elif host and '-' in dhcp_host : |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
237 |
dhcp_host, suffix = dhcp_host.rsplit('-', 1) |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
238 |
elif '-' in dhcp_host : |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
239 |
host, suffix = dhcp_host.rsplit('-', 1) |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
240 |
else : |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
241 |
host = dhcp_host |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
242 |
|
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
243 |
if not (host or ethernet) : |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
244 |
log.warn("%s: no hostname/ethernet: %s/%s", dhcp_host, hostname, ethernet) |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
245 |
elif suffix : |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
246 |
log.info("%s: %s@%s: %s: %s", dhcp_host, host, domain, suffix, ethernet) |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
247 |
yield (host, domain), 'ethernet.{suffix}'.format(suffix=suffix), ethernet |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
248 |
else : |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
249 |
log.info("%s: %s@%s: %s", dhcp_host, host, domain, ethernet) |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
250 |
yield (host, domain), 'ethernet', ethernet |
280
8118854bfa6f
pvl.hosts-import: import boot settings
Tero Marttila <terom@paivola.fi>
parents:
279
diff
changeset
|
251 |
|
8118854bfa6f
pvl.hosts-import: import boot settings
Tero Marttila <terom@paivola.fi>
parents:
279
diff
changeset
|
252 |
if boot_server and boot_filename : |
304
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
253 |
yield (host, domain), 'boot', "{server}:{filename}".format( |
280
8118854bfa6f
pvl.hosts-import: import boot settings
Tero Marttila <terom@paivola.fi>
parents:
279
diff
changeset
|
254 |
server = boot_server, |
8118854bfa6f
pvl.hosts-import: import boot settings
Tero Marttila <terom@paivola.fi>
parents:
279
diff
changeset
|
255 |
filename = boot_filename, |
8118854bfa6f
pvl.hosts-import: import boot settings
Tero Marttila <terom@paivola.fi>
parents:
279
diff
changeset
|
256 |
) |
8118854bfa6f
pvl.hosts-import: import boot settings
Tero Marttila <terom@paivola.fi>
parents:
279
diff
changeset
|
257 |
elif boot_filename : |
304
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
258 |
yield (host, domain), 'boot', "{filename}".format(filename=boot_filename) |
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
259 |
|
303
b8ba5df799be
pvl.hosts-import: log dhcp conf paths
Tero Marttila <terom@paivola.fi>
parents:
302
diff
changeset
|
260 |
def import_dhcp_hosts (options, file_name, blocks) : |
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
261 |
""" |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
262 |
Process hosts from a parsed block |
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 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
265 |
for block, items, blocks in blocks : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
266 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
267 |
block, args = block[0], block[1:] |
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 |
if block == 'group' : |
303
b8ba5df799be
pvl.hosts-import: log dhcp conf paths
Tero Marttila <terom@paivola.fi>
parents:
302
diff
changeset
|
270 |
log.info("%s: group", file_name) |
b8ba5df799be
pvl.hosts-import: log dhcp conf paths
Tero Marttila <terom@paivola.fi>
parents:
302
diff
changeset
|
271 |
for info in import_dhcp_hosts(options, file_name, blocks) : |
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
272 |
yield info |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
273 |
elif block == 'host' : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
274 |
host, = args |
301
b41902b0b9cf
pvl.hosts-import: support multiple --import-zone/dhcp-hosts files, change --import-zone-comments-*, import TXT as comments
Tero Marttila <terom@paivola.fi>
parents:
288
diff
changeset
|
275 |
|
303
b8ba5df799be
pvl.hosts-import: log dhcp conf paths
Tero Marttila <terom@paivola.fi>
parents:
302
diff
changeset
|
276 |
log.info("%s: host: %s", file_name, host) |
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
277 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
278 |
try : |
263
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
279 |
for info in import_dhcp_host(options, host, items) : |
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
280 |
yield info |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
281 |
except ValueError as error : |
303
b8ba5df799be
pvl.hosts-import: log dhcp conf paths
Tero Marttila <terom@paivola.fi>
parents:
302
diff
changeset
|
282 |
log.exception("%s: invalid host %s: %s", file_name, host, error) |
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
283 |
else: |
303
b8ba5df799be
pvl.hosts-import: log dhcp conf paths
Tero Marttila <terom@paivola.fi>
parents:
302
diff
changeset
|
284 |
log.warn("%s: ignore unknown block: %s", file_name, block) |
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
285 |
|
263
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
286 |
def import_dhcp_conf (options, file) : |
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
287 |
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
|
288 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
289 |
for item in items : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
290 |
item, args = item[0], item[1:] |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
291 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
292 |
if item == 'include' : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
293 |
include, = args |
263
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
294 |
for info in import_dhcp_conf(options, pvl.args.apply_file(include)) : |
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
295 |
yield info |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
296 |
else : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
297 |
log.warn("ignore unknown item: %s", item) |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
298 |
|
303
b8ba5df799be
pvl.hosts-import: log dhcp conf paths
Tero Marttila <terom@paivola.fi>
parents:
302
diff
changeset
|
299 |
for info in import_dhcp_hosts(options, file.name, blocks) : |
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
300 |
yield info |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
301 |
|
260
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
302 |
ZONE_COMMENTS = ( |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
303 |
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
|
304 |
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
|
305 |
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
|
306 |
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
|
307 |
) |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
308 |
|
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
309 |
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
|
310 |
|
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
311 |
def process_zone_comment (options, hostname, comment) : |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
312 |
""" |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
313 |
Attempt to parse a host comment field... :D |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
314 |
|
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
315 |
Yields (field, value) bits |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
316 |
""" |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
317 |
|
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
318 |
for regex in ZONE_COMMENTS : |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
319 |
match = regex.match(comment) |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
320 |
|
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
321 |
if match : |
275
4dc5cc30a278
pvl.hosts-import: support AAAA, make default comment handling an option
Tero Marttila <terom@paivola.fi>
parents:
268
diff
changeset
|
322 |
matches = match.groupdict() |
279
1b72f1e0cdbe
pvl.hosts-import: do not import $GENERATE hosts; fix warnings on missing owner comments
Tero Marttila <terom@paivola.fi>
parents:
275
diff
changeset
|
323 |
|
1b72f1e0cdbe
pvl.hosts-import: do not import $GENERATE hosts; fix warnings on missing owner comments
Tero Marttila <terom@paivola.fi>
parents:
275
diff
changeset
|
324 |
log.info("%s: matched comment: %s", hostname, comment) |
260
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
325 |
break |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
326 |
else : |
301
b41902b0b9cf
pvl.hosts-import: support multiple --import-zone/dhcp-hosts files, change --import-zone-comments-*, import TXT as comments
Tero Marttila <terom@paivola.fi>
parents:
288
diff
changeset
|
327 |
if options.import_zone_comments : |
279
1b72f1e0cdbe
pvl.hosts-import: do not import $GENERATE hosts; fix warnings on missing owner comments
Tero Marttila <terom@paivola.fi>
parents:
275
diff
changeset
|
328 |
log.info("%s: default comment: %s", hostname, comment) |
301
b41902b0b9cf
pvl.hosts-import: support multiple --import-zone/dhcp-hosts files, change --import-zone-comments-*, import TXT as comments
Tero Marttila <terom@paivola.fi>
parents:
288
diff
changeset
|
329 |
matches = { options.import_zone_comments: comment } |
275
4dc5cc30a278
pvl.hosts-import: support AAAA, make default comment handling an option
Tero Marttila <terom@paivola.fi>
parents:
268
diff
changeset
|
330 |
else : |
4dc5cc30a278
pvl.hosts-import: support AAAA, make default comment handling an option
Tero Marttila <terom@paivola.fi>
parents:
268
diff
changeset
|
331 |
log.warn("%s: unknown comment: %s", hostname, comment) |
4dc5cc30a278
pvl.hosts-import: support AAAA, make default comment handling an option
Tero Marttila <terom@paivola.fi>
parents:
268
diff
changeset
|
332 |
return |
260
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
333 |
|
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
334 |
owner = matches.pop('owner', None) |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
335 |
|
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
336 |
if owner : |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
337 |
mail_match = ZONE_OWNER_MAIL.match(owner) |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
338 |
|
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
339 |
if mail_match : |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
340 |
mail_matches = mail_match.groupdict() |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
341 |
|
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
342 |
owner = mail_matches['owner'] |
261
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
343 |
yield 'mail', mail_matches['mail'].strip() |
275
4dc5cc30a278
pvl.hosts-import: support AAAA, make default comment handling an option
Tero Marttila <terom@paivola.fi>
parents:
268
diff
changeset
|
344 |
|
4dc5cc30a278
pvl.hosts-import: support AAAA, make default comment handling an option
Tero Marttila <terom@paivola.fi>
parents:
268
diff
changeset
|
345 |
yield 'owner', owner.strip() |
260
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
346 |
|
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
347 |
for field, value in matches.iteritems() : |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
348 |
if value : |
261
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
349 |
yield field, value.strip() |
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
350 |
|
263
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
351 |
NONE_OWNERS = set(( |
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
352 |
u'tech', |
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
353 |
u'atk', |
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
354 |
u'toimisto', |
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
355 |
)) |
261
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
356 |
|
263
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
357 |
def process_host_owner_ldap (options, host, info) : |
261
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
358 |
""" |
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
359 |
Yield guesses for user from LDAP. |
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
360 |
""" |
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
361 |
|
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
362 |
if info.get('mail') : |
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
363 |
for user in options.ldap.users.filter( |
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
364 |
{ 'mailLocalAddress': info['mail'] }, |
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
365 |
{ 'uid': info['mail'] }, |
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
366 |
) : |
263
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
367 |
yield user, None |
261
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
368 |
|
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
369 |
if info.get('group') and info.get('owner') : |
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
370 |
groups = options.ldap.groups.filter(cn=info['group']) |
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
371 |
|
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
372 |
for group in groups : |
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
373 |
for user in options.ldap.users.filter({ |
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
374 |
'gidNumber': group['gidNumber'], |
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
375 |
'cn': info['owner'], |
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
376 |
}) : |
263
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
377 |
yield user, group |
261
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
378 |
|
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
379 |
if info.get('owner') : |
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
380 |
for user in options.ldap.users.filter({ |
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
381 |
'cn': info['owner'], |
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
382 |
}) : |
263
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
383 |
yield user, None |
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
384 |
|
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
385 |
def process_host_owner (options, host, info) : |
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
386 |
""" |
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
387 |
Return (owner, comment) for host based on info, or None. |
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
388 |
""" |
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
389 |
|
275
4dc5cc30a278
pvl.hosts-import: support AAAA, make default comment handling an option
Tero Marttila <terom@paivola.fi>
parents:
268
diff
changeset
|
390 |
owner = info.get('owner') |
4dc5cc30a278
pvl.hosts-import: support AAAA, make default comment handling an option
Tero Marttila <terom@paivola.fi>
parents:
268
diff
changeset
|
391 |
|
4dc5cc30a278
pvl.hosts-import: support AAAA, make default comment handling an option
Tero Marttila <terom@paivola.fi>
parents:
268
diff
changeset
|
392 |
if owner and owner.lower() in NONE_OWNERS : |
264
ce29be46f705
add unknown owners as a comment..
Tero Marttila <terom@paivola.fi>
parents:
263
diff
changeset
|
393 |
return False |
263
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
394 |
|
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
395 |
# from ldap? |
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
396 |
for ldap in process_host_owner_ldap(options, host, info) : |
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
397 |
user, group = ldap |
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
398 |
|
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
399 |
if not group : |
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
400 |
# get group from ldap |
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
401 |
group = options.ldap.users.group(user) |
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
402 |
|
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
403 |
return user['uid'], u"{group} / {user}".format( |
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
404 |
user = user.getunicode('cn'), |
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
405 |
group = group.getunicode('cn'), |
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
406 |
) |
261
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
407 |
|
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
408 |
def process_host_comments (options, host, info) : |
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
409 |
""" |
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
410 |
Process host fields from comment. |
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
411 |
|
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
412 |
Attempts to find owner from LDAP.. |
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
413 |
""" |
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
414 |
|
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
415 |
log.debug("%s: %s", host, info) |
260
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
416 |
|
263
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
417 |
owner = process_host_owner(options, host, info) |
261
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
418 |
|
264
ce29be46f705
add unknown owners as a comment..
Tero Marttila <terom@paivola.fi>
parents:
263
diff
changeset
|
419 |
if owner is False : |
ce29be46f705
add unknown owners as a comment..
Tero Marttila <terom@paivola.fi>
parents:
263
diff
changeset
|
420 |
# do not mark any owner |
ce29be46f705
add unknown owners as a comment..
Tero Marttila <terom@paivola.fi>
parents:
263
diff
changeset
|
421 |
pass |
ce29be46f705
add unknown owners as a comment..
Tero Marttila <terom@paivola.fi>
parents:
263
diff
changeset
|
422 |
|
ce29be46f705
add unknown owners as a comment..
Tero Marttila <terom@paivola.fi>
parents:
263
diff
changeset
|
423 |
elif owner : |
263
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
424 |
owner, comment = owner |
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
425 |
|
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
426 |
log.info("%s: %s (%s)", host, owner, comment) |
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
427 |
|
304
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
428 |
yield 'comment.owner', comment |
261
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
429 |
yield 'owner', owner, |
264
ce29be46f705
add unknown owners as a comment..
Tero Marttila <terom@paivola.fi>
parents:
263
diff
changeset
|
430 |
|
279
1b72f1e0cdbe
pvl.hosts-import: do not import $GENERATE hosts; fix warnings on missing owner comments
Tero Marttila <terom@paivola.fi>
parents:
275
diff
changeset
|
431 |
elif 'group' in info or 'owner' in info : |
264
ce29be46f705
add unknown owners as a comment..
Tero Marttila <terom@paivola.fi>
parents:
263
diff
changeset
|
432 |
log.warn("%s: unknown owner: %s", host, info) |
304
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
433 |
yield 'comment.owner', "{group} / {owner}".format( |
264
ce29be46f705
add unknown owners as a comment..
Tero Marttila <terom@paivola.fi>
parents:
263
diff
changeset
|
434 |
group = info.get('group', ''), |
ce29be46f705
add unknown owners as a comment..
Tero Marttila <terom@paivola.fi>
parents:
263
diff
changeset
|
435 |
owner = info.get('owner', ''), |
ce29be46f705
add unknown owners as a comment..
Tero Marttila <terom@paivola.fi>
parents:
263
diff
changeset
|
436 |
) |
262
36c980a6d04a
pvl.dns-host: add host comment
Tero Marttila <terom@paivola.fi>
parents:
261
diff
changeset
|
437 |
|
36c980a6d04a
pvl.dns-host: add host comment
Tero Marttila <terom@paivola.fi>
parents:
261
diff
changeset
|
438 |
if info.get('host') : |
304
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
439 |
yield 'comment.host', info['host'] |
260
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
440 |
|
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
441 |
def process_hosts_comments (options, import_hosts) : |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
442 |
""" |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
443 |
Parse out comments from host imports.. |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
444 |
""" |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
445 |
|
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
446 |
for host, field, value in import_hosts : |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
447 |
if field != 'comment': |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
448 |
yield host, field, value |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
449 |
continue |
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
450 |
|
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
451 |
fields = dict(process_zone_comment(options, host, value)) |
261
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
452 |
|
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
453 |
if options.dump_host_comments : |
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
454 |
print u"{host:20} {comment:80} = {group:15} / {owner:20} <{mail:20}> / {hostinfo}".format( |
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
455 |
host = host, |
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
456 |
comment = value, |
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
457 |
group = fields.get('group', ''), |
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
458 |
owner = fields.get('owner', ''), |
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
459 |
mail = fields.get('mail', ''), |
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
460 |
hostinfo = fields.get('host', ''), |
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
461 |
).encode('utf-8') |
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
462 |
|
260
e58baab6b4cd
pvl.dns-hosts: process_hosts_comments
Tero Marttila <terom@paivola.fi>
parents:
259
diff
changeset
|
463 |
|
261
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
464 |
for field, value in process_host_comments(options, host, fields) : |
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
465 |
yield host, field, value |
263
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
466 |
|
304
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
467 |
def import_hosts_files (options, zone_files, dhcp_files) : |
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
468 |
""" |
263
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
469 |
Import host infos from given files. |
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
470 |
""" |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
471 |
|
304
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
472 |
for zone_file in zone_files: |
301
b41902b0b9cf
pvl.hosts-import: support multiple --import-zone/dhcp-hosts files, change --import-zone-comments-*, import TXT as comments
Tero Marttila <terom@paivola.fi>
parents:
288
diff
changeset
|
473 |
file = pvl.args.apply_file(zone_file, 'r', options.input_charset) |
b41902b0b9cf
pvl.hosts-import: support multiple --import-zone/dhcp-hosts files, change --import-zone-comments-*, import TXT as comments
Tero Marttila <terom@paivola.fi>
parents:
288
diff
changeset
|
474 |
for info in import_zone_hosts(options, file) : |
263
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
475 |
yield info |
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
476 |
|
304
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
477 |
for dhcp_file in dhcp_files : |
301
b41902b0b9cf
pvl.hosts-import: support multiple --import-zone/dhcp-hosts files, change --import-zone-comments-*, import TXT as comments
Tero Marttila <terom@paivola.fi>
parents:
288
diff
changeset
|
478 |
file = pvl.args.apply_file(dhcp_file, 'r', options.input_charset) |
b41902b0b9cf
pvl.hosts-import: support multiple --import-zone/dhcp-hosts files, change --import-zone-comments-*, import TXT as comments
Tero Marttila <terom@paivola.fi>
parents:
288
diff
changeset
|
479 |
for info in import_dhcp_conf(options, file) : |
263
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
480 |
yield info |
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
481 |
|
304
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
482 |
def process_import_hosts (options, import_hosts) : |
263
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
483 |
""" |
304
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
484 |
Build hosts from imported fields. |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
485 |
|
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
486 |
Yields (domain, host), { (field, ...): value } |
263
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
487 |
""" |
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
488 |
|
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
489 |
# gather |
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
490 |
hosts = collections.defaultdict(lambda: collections.defaultdict(list)) |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
491 |
|
304
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
492 |
for (host, domain), field, value in import_hosts : |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
493 |
hosts[domain, host][tuple(field.split('.'))].append(value) |
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
494 |
|
304
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
495 |
# process |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
496 |
for (domain, host), fields in hosts.iteritems() : |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
497 |
SINGLE_FIELDS = ( |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
498 |
'ip', |
328
9b4ee4bad3d1
pvl.hosts-import: also import --zone-unused=ufc hosts, and output them as special comments
Tero Marttila <terom@paivola.fi>
parents:
327
diff
changeset
|
499 |
'ip.unused', |
304
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
500 |
'ip6', |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
501 |
'comment.owner', |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
502 |
'owner', |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
503 |
'boot', |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
504 |
) |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
505 |
MULTI_FIELDS = ( |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
506 |
'comment.host', |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
507 |
'ethernet', |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
508 |
'alias', |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
509 |
) |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
510 |
host_fields = {} |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
511 |
|
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
512 |
for field_name in SINGLE_FIELDS : |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
513 |
field = tuple(field_name.split('.')) |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
514 |
values = fields.get(field) |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
515 |
|
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
516 |
if not values : |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
517 |
continue |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
518 |
elif len(values) == 1 : |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
519 |
value, = values |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
520 |
else : |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
521 |
log.error("%s@%s: multiple %s: %s", host, domain, field, values) |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
522 |
value = values[0] |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
523 |
|
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
524 |
log.debug("%s@%s: %s: %s", host, domain, field, value) |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
525 |
host_fields[field] = value |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
526 |
|
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
527 |
for field_name in MULTI_FIELDS : |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
528 |
field_prefix = tuple(field_name.split('.')) |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
529 |
|
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
530 |
# find labled fields by prefix, or unlabled multi-fields |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
531 |
for field, values in fields.iteritems() : |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
532 |
pre, field_index = field[:-1], field[-1] |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
533 |
|
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
534 |
if not values : |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
535 |
pass |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
536 |
|
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
537 |
elif pre == field_prefix : |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
538 |
log.debug("%s@%s: %s.%s: %s", host, domain, field_prefix, field_index, value) |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
539 |
host_fields[field] = values |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
540 |
|
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
541 |
elif field == field_prefix : |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
542 |
log.debug("%s@%s: %s.*: %s", host, domain, field_prefix, value) |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
543 |
host_fields[field_prefix] = values |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
544 |
|
318
304f56896942
pvl.hosts-import: import $GENERATE ips for hosts also in dhcp
Tero Marttila <terom@paivola.fi>
parents:
315
diff
changeset
|
545 |
lazy_import = fields.get(tuple('lazy-import'.split('.'))) |
304f56896942
pvl.hosts-import: import $GENERATE ips for hosts also in dhcp
Tero Marttila <terom@paivola.fi>
parents:
315
diff
changeset
|
546 |
|
304f56896942
pvl.hosts-import: import $GENERATE ips for hosts also in dhcp
Tero Marttila <terom@paivola.fi>
parents:
315
diff
changeset
|
547 |
if not lazy_import : |
304f56896942
pvl.hosts-import: import $GENERATE ips for hosts also in dhcp
Tero Marttila <terom@paivola.fi>
parents:
315
diff
changeset
|
548 |
pass |
304f56896942
pvl.hosts-import: import $GENERATE ips for hosts also in dhcp
Tero Marttila <terom@paivola.fi>
parents:
315
diff
changeset
|
549 |
elif set(host_fields) == set([('ip', )]) : |
304f56896942
pvl.hosts-import: import $GENERATE ips for hosts also in dhcp
Tero Marttila <terom@paivola.fi>
parents:
315
diff
changeset
|
550 |
log.info("%s: omit lazy-import with fields: %s", host, ' '.join('.'.join(field) for field in host_fields)) |
304f56896942
pvl.hosts-import: import $GENERATE ips for hosts also in dhcp
Tero Marttila <terom@paivola.fi>
parents:
315
diff
changeset
|
551 |
continue |
304f56896942
pvl.hosts-import: import $GENERATE ips for hosts also in dhcp
Tero Marttila <terom@paivola.fi>
parents:
315
diff
changeset
|
552 |
else : |
304f56896942
pvl.hosts-import: import $GENERATE ips for hosts also in dhcp
Tero Marttila <terom@paivola.fi>
parents:
315
diff
changeset
|
553 |
log.info("%s: import lazy-import with fields: %s", host, ' '.join('.'.join(field) for field in host_fields)) |
304f56896942
pvl.hosts-import: import $GENERATE ips for hosts also in dhcp
Tero Marttila <terom@paivola.fi>
parents:
315
diff
changeset
|
554 |
|
304
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
555 |
yield (host, domain), host_fields |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
556 |
|
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
557 |
def apply_import_hosts (options) : |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
558 |
""" |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
559 |
Import hosts. |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
560 |
""" |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
561 |
|
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
562 |
import_hosts = import_hosts_files(options, options.import_zone_hosts, options.import_dhcp_hosts) |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
563 |
|
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
564 |
# process |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
565 |
import_hosts = process_hosts_comments(options, import_hosts) |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
566 |
|
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
567 |
# gather |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
568 |
return process_import_hosts(options, import_hosts) |
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
569 |
|
313
c211ef65fd67
pvl.hosts-import: alias4 mapping
Tero Marttila <terom@paivola.fi>
parents:
311
diff
changeset
|
570 |
def process_hosts (options, hosts) : |
c211ef65fd67
pvl.hosts-import: alias4 mapping
Tero Marttila <terom@paivola.fi>
parents:
311
diff
changeset
|
571 |
""" |
c211ef65fd67
pvl.hosts-import: alias4 mapping
Tero Marttila <terom@paivola.fi>
parents:
311
diff
changeset
|
572 |
Sanity-check and post-process hosts. |
c211ef65fd67
pvl.hosts-import: alias4 mapping
Tero Marttila <terom@paivola.fi>
parents:
311
diff
changeset
|
573 |
|
c211ef65fd67
pvl.hosts-import: alias4 mapping
Tero Marttila <terom@paivola.fi>
parents:
311
diff
changeset
|
574 |
Does alias4 mapping, nonexistant alias checks, duplicate ip checks.. |
c211ef65fd67
pvl.hosts-import: alias4 mapping
Tero Marttila <terom@paivola.fi>
parents:
311
diff
changeset
|
575 |
""" |
c211ef65fd67
pvl.hosts-import: alias4 mapping
Tero Marttila <terom@paivola.fi>
parents:
311
diff
changeset
|
576 |
|
288
2f2f92e4c58e
pvl.hosts-import: check_hosts: verify nonexistan aliases
Tero Marttila <terom@paivola.fi>
parents:
285
diff
changeset
|
577 |
by_name = dict(hosts) |
313
c211ef65fd67
pvl.hosts-import: alias4 mapping
Tero Marttila <terom@paivola.fi>
parents:
311
diff
changeset
|
578 |
by_ip = dict() |
288
2f2f92e4c58e
pvl.hosts-import: check_hosts: verify nonexistan aliases
Tero Marttila <terom@paivola.fi>
parents:
285
diff
changeset
|
579 |
|
313
c211ef65fd67
pvl.hosts-import: alias4 mapping
Tero Marttila <terom@paivola.fi>
parents:
311
diff
changeset
|
580 |
# scan for alias4 |
c211ef65fd67
pvl.hosts-import: alias4 mapping
Tero Marttila <terom@paivola.fi>
parents:
311
diff
changeset
|
581 |
for (host, domain), fields in by_name.items() : |
314
a1e4ef8dfb76
pvl.hosts-import: fix alias4/alias6 processing
Tero Marttila <terom@paivola.fi>
parents:
313
diff
changeset
|
582 |
for fmt, ip_field, alias_field in ( |
a1e4ef8dfb76
pvl.hosts-import: fix alias4/alias6 processing
Tero Marttila <terom@paivola.fi>
parents:
313
diff
changeset
|
583 |
(pvl.hosts.Host.ALIAS4_FMT, 'ip', 'alias4'), |
a1e4ef8dfb76
pvl.hosts-import: fix alias4/alias6 processing
Tero Marttila <terom@paivola.fi>
parents:
313
diff
changeset
|
584 |
(pvl.hosts.Host.ALIAS6_FMT, 'ip6', 'alias6'), |
a1e4ef8dfb76
pvl.hosts-import: fix alias4/alias6 processing
Tero Marttila <terom@paivola.fi>
parents:
313
diff
changeset
|
585 |
) : |
a1e4ef8dfb76
pvl.hosts-import: fix alias4/alias6 processing
Tero Marttila <terom@paivola.fi>
parents:
313
diff
changeset
|
586 |
alias = fmt.format(host=host) |
a1e4ef8dfb76
pvl.hosts-import: fix alias4/alias6 processing
Tero Marttila <terom@paivola.fi>
parents:
313
diff
changeset
|
587 |
alias_fields = by_name.get((alias, domain)) |
313
c211ef65fd67
pvl.hosts-import: alias4 mapping
Tero Marttila <terom@paivola.fi>
parents:
311
diff
changeset
|
588 |
|
314
a1e4ef8dfb76
pvl.hosts-import: fix alias4/alias6 processing
Tero Marttila <terom@paivola.fi>
parents:
313
diff
changeset
|
589 |
if not alias_fields : |
a1e4ef8dfb76
pvl.hosts-import: fix alias4/alias6 processing
Tero Marttila <terom@paivola.fi>
parents:
313
diff
changeset
|
590 |
continue |
313
c211ef65fd67
pvl.hosts-import: alias4 mapping
Tero Marttila <terom@paivola.fi>
parents:
311
diff
changeset
|
591 |
|
314
a1e4ef8dfb76
pvl.hosts-import: fix alias4/alias6 processing
Tero Marttila <terom@paivola.fi>
parents:
313
diff
changeset
|
592 |
elif alias_fields[(ip_field, )] != fields[(ip_field, )] : |
a1e4ef8dfb76
pvl.hosts-import: fix alias4/alias6 processing
Tero Marttila <terom@paivola.fi>
parents:
313
diff
changeset
|
593 |
log.warn("%s: %s %s collision with %s", host, alias_field, ip_field, alias) |
a1e4ef8dfb76
pvl.hosts-import: fix alias4/alias6 processing
Tero Marttila <terom@paivola.fi>
parents:
313
diff
changeset
|
594 |
elif ('alias', ) in alias_fields : |
a1e4ef8dfb76
pvl.hosts-import: fix alias4/alias6 processing
Tero Marttila <terom@paivola.fi>
parents:
313
diff
changeset
|
595 |
log.warn("%s: mapped to %s on %s", alias, alias_field, host) |
a1e4ef8dfb76
pvl.hosts-import: fix alias4/alias6 processing
Tero Marttila <terom@paivola.fi>
parents:
313
diff
changeset
|
596 |
fields[(alias_field, )] = alias_fields.get(('alias', ), ()) |
a1e4ef8dfb76
pvl.hosts-import: fix alias4/alias6 processing
Tero Marttila <terom@paivola.fi>
parents:
313
diff
changeset
|
597 |
del by_name[(alias, domain)] |
a1e4ef8dfb76
pvl.hosts-import: fix alias4/alias6 processing
Tero Marttila <terom@paivola.fi>
parents:
313
diff
changeset
|
598 |
else : |
a1e4ef8dfb76
pvl.hosts-import: fix alias4/alias6 processing
Tero Marttila <terom@paivola.fi>
parents:
313
diff
changeset
|
599 |
log.warn("%s: %s mapped to %s, but no aliases", alias, alias_field, host) |
315
3ad1822cd91d
pvl.hosts-import: drop alias-less aliasX from hosts if empty
Tero Marttila <terom@paivola.fi>
parents:
314
diff
changeset
|
600 |
del by_name[(alias, domain)] |
313
c211ef65fd67
pvl.hosts-import: alias4 mapping
Tero Marttila <terom@paivola.fi>
parents:
311
diff
changeset
|
601 |
|
320
bfda3703fa0c
pvl.hosts-import: implement alias chaning (flatten CNAME chains)
Tero Marttila <terom@paivola.fi>
parents:
319
diff
changeset
|
602 |
# scan by alias |
bfda3703fa0c
pvl.hosts-import: implement alias chaning (flatten CNAME chains)
Tero Marttila <terom@paivola.fi>
parents:
319
diff
changeset
|
603 |
by_alias = { } |
bfda3703fa0c
pvl.hosts-import: implement alias chaning (flatten CNAME chains)
Tero Marttila <terom@paivola.fi>
parents:
319
diff
changeset
|
604 |
|
bfda3703fa0c
pvl.hosts-import: implement alias chaning (flatten CNAME chains)
Tero Marttila <terom@paivola.fi>
parents:
319
diff
changeset
|
605 |
for (host, domain), fields in hosts : |
bfda3703fa0c
pvl.hosts-import: implement alias chaning (flatten CNAME chains)
Tero Marttila <terom@paivola.fi>
parents:
319
diff
changeset
|
606 |
for alias in fields.get(('alias', ), ()) : |
bfda3703fa0c
pvl.hosts-import: implement alias chaning (flatten CNAME chains)
Tero Marttila <terom@paivola.fi>
parents:
319
diff
changeset
|
607 |
if (alias, domain) in by_alias : |
bfda3703fa0c
pvl.hosts-import: implement alias chaning (flatten CNAME chains)
Tero Marttila <terom@paivola.fi>
parents:
319
diff
changeset
|
608 |
log.warn("%s: duplicate alias %s: %s", host, alias, by_alias[(alias, domain)]) |
bfda3703fa0c
pvl.hosts-import: implement alias chaning (flatten CNAME chains)
Tero Marttila <terom@paivola.fi>
parents:
319
diff
changeset
|
609 |
else : |
bfda3703fa0c
pvl.hosts-import: implement alias chaning (flatten CNAME chains)
Tero Marttila <terom@paivola.fi>
parents:
319
diff
changeset
|
610 |
by_alias[(alias, domain)] = (host, fields) |
bfda3703fa0c
pvl.hosts-import: implement alias chaning (flatten CNAME chains)
Tero Marttila <terom@paivola.fi>
parents:
319
diff
changeset
|
611 |
|
313
c211ef65fd67
pvl.hosts-import: alias4 mapping
Tero Marttila <terom@paivola.fi>
parents:
311
diff
changeset
|
612 |
for (host, domain), fields in hosts : |
314
a1e4ef8dfb76
pvl.hosts-import: fix alias4/alias6 processing
Tero Marttila <terom@paivola.fi>
parents:
313
diff
changeset
|
613 |
fields = by_name.get((host, domain)) |
a1e4ef8dfb76
pvl.hosts-import: fix alias4/alias6 processing
Tero Marttila <terom@paivola.fi>
parents:
313
diff
changeset
|
614 |
|
a1e4ef8dfb76
pvl.hosts-import: fix alias4/alias6 processing
Tero Marttila <terom@paivola.fi>
parents:
313
diff
changeset
|
615 |
if not fields : |
313
c211ef65fd67
pvl.hosts-import: alias4 mapping
Tero Marttila <terom@paivola.fi>
parents:
311
diff
changeset
|
616 |
# skip |
c211ef65fd67
pvl.hosts-import: alias4 mapping
Tero Marttila <terom@paivola.fi>
parents:
311
diff
changeset
|
617 |
continue |
c211ef65fd67
pvl.hosts-import: alias4 mapping
Tero Marttila <terom@paivola.fi>
parents:
311
diff
changeset
|
618 |
|
304
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
619 |
if set(fields) == set([('alias', )]) : |
320
bfda3703fa0c
pvl.hosts-import: implement alias chaning (flatten CNAME chains)
Tero Marttila <terom@paivola.fi>
parents:
319
diff
changeset
|
620 |
aliases = fields[('alias', )] |
bfda3703fa0c
pvl.hosts-import: implement alias chaning (flatten CNAME chains)
Tero Marttila <terom@paivola.fi>
parents:
319
diff
changeset
|
621 |
if (host, domain) in by_alias : |
bfda3703fa0c
pvl.hosts-import: implement alias chaning (flatten CNAME chains)
Tero Marttila <terom@paivola.fi>
parents:
319
diff
changeset
|
622 |
alias_host, alias_fields = by_alias[(host, domain)] |
bfda3703fa0c
pvl.hosts-import: implement alias chaning (flatten CNAME chains)
Tero Marttila <terom@paivola.fi>
parents:
319
diff
changeset
|
623 |
log.info("%s: chain as alias to %s: %s", host, alias_host, ' '.join(aliases)) |
bfda3703fa0c
pvl.hosts-import: implement alias chaning (flatten CNAME chains)
Tero Marttila <terom@paivola.fi>
parents:
319
diff
changeset
|
624 |
alias_fields[('alias', )].extend(aliases) |
bfda3703fa0c
pvl.hosts-import: implement alias chaning (flatten CNAME chains)
Tero Marttila <terom@paivola.fi>
parents:
319
diff
changeset
|
625 |
continue |
bfda3703fa0c
pvl.hosts-import: implement alias chaning (flatten CNAME chains)
Tero Marttila <terom@paivola.fi>
parents:
319
diff
changeset
|
626 |
else : |
bfda3703fa0c
pvl.hosts-import: implement alias chaning (flatten CNAME chains)
Tero Marttila <terom@paivola.fi>
parents:
319
diff
changeset
|
627 |
log.warn("%s@%s: nonexistant alias target for: %s", host, domain, ' '.join(aliases)) |
313
c211ef65fd67
pvl.hosts-import: alias4 mapping
Tero Marttila <terom@paivola.fi>
parents:
311
diff
changeset
|
628 |
|
c211ef65fd67
pvl.hosts-import: alias4 mapping
Tero Marttila <terom@paivola.fi>
parents:
311
diff
changeset
|
629 |
ip = fields.get(('ip', )) |
c211ef65fd67
pvl.hosts-import: alias4 mapping
Tero Marttila <terom@paivola.fi>
parents:
311
diff
changeset
|
630 |
|
c211ef65fd67
pvl.hosts-import: alias4 mapping
Tero Marttila <terom@paivola.fi>
parents:
311
diff
changeset
|
631 |
if ip in by_ip : |
c211ef65fd67
pvl.hosts-import: alias4 mapping
Tero Marttila <terom@paivola.fi>
parents:
311
diff
changeset
|
632 |
log.warn("%s: duplicate ip %s: %s", host, ip, by_ip[ip]) |
328
9b4ee4bad3d1
pvl.hosts-import: also import --zone-unused=ufc hosts, and output them as special comments
Tero Marttila <terom@paivola.fi>
parents:
327
diff
changeset
|
633 |
elif ip : |
9b4ee4bad3d1
pvl.hosts-import: also import --zone-unused=ufc hosts, and output them as special comments
Tero Marttila <terom@paivola.fi>
parents:
327
diff
changeset
|
634 |
by_ip[ip] = host |
313
c211ef65fd67
pvl.hosts-import: alias4 mapping
Tero Marttila <terom@paivola.fi>
parents:
311
diff
changeset
|
635 |
else : |
328
9b4ee4bad3d1
pvl.hosts-import: also import --zone-unused=ufc hosts, and output them as special comments
Tero Marttila <terom@paivola.fi>
parents:
327
diff
changeset
|
636 |
log.warn("%s: no ip", host) |
313
c211ef65fd67
pvl.hosts-import: alias4 mapping
Tero Marttila <terom@paivola.fi>
parents:
311
diff
changeset
|
637 |
|
c211ef65fd67
pvl.hosts-import: alias4 mapping
Tero Marttila <terom@paivola.fi>
parents:
311
diff
changeset
|
638 |
yield (host, domain), fields |
288
2f2f92e4c58e
pvl.hosts-import: check_hosts: verify nonexistan aliases
Tero Marttila <terom@paivola.fi>
parents:
285
diff
changeset
|
639 |
|
2f2f92e4c58e
pvl.hosts-import: check_hosts: verify nonexistan aliases
Tero Marttila <terom@paivola.fi>
parents:
285
diff
changeset
|
640 |
def sort_export_hosts (options, hosts) : |
304
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
641 |
""" |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
642 |
Generate a sortable version of hosts, yielding (sort, host, fields). |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
643 |
""" |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
644 |
|
265
5f2807999222
pvl.dns-hosts: always sort by ip
Tero Marttila <terom@paivola.fi>
parents:
264
diff
changeset
|
645 |
if options.output_prefix : |
5f2807999222
pvl.dns-hosts: always sort by ip
Tero Marttila <terom@paivola.fi>
parents:
264
diff
changeset
|
646 |
prefix = ipaddr.IPNetwork(options.output_prefix) |
5f2807999222
pvl.dns-hosts: always sort by ip
Tero Marttila <terom@paivola.fi>
parents:
264
diff
changeset
|
647 |
else : |
5f2807999222
pvl.dns-hosts: always sort by ip
Tero Marttila <terom@paivola.fi>
parents:
264
diff
changeset
|
648 |
prefix = None |
5f2807999222
pvl.dns-hosts: always sort by ip
Tero Marttila <terom@paivola.fi>
parents:
264
diff
changeset
|
649 |
|
304
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
650 |
if options.output_domain : |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
651 |
select_domain = options.output_domain |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
652 |
else : |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
653 |
select_domain = None |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
654 |
|
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
655 |
for (host, domain), fields in hosts : |
328
9b4ee4bad3d1
pvl.hosts-import: also import --zone-unused=ufc hosts, and output them as special comments
Tero Marttila <terom@paivola.fi>
parents:
327
diff
changeset
|
656 |
ip = fields.get(('ip', )) or fields.get(('ip', 'unused')) |
304
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
657 |
|
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
658 |
log.debug("%s@%s: ip=%s", host, domain, ip) |
265
5f2807999222
pvl.dns-hosts: always sort by ip
Tero Marttila <terom@paivola.fi>
parents:
264
diff
changeset
|
659 |
|
5f2807999222
pvl.dns-hosts: always sort by ip
Tero Marttila <terom@paivola.fi>
parents:
264
diff
changeset
|
660 |
# sort by IP |
5f2807999222
pvl.dns-hosts: always sort by ip
Tero Marttila <terom@paivola.fi>
parents:
264
diff
changeset
|
661 |
if ip : |
304
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
662 |
sort = ip |
265
5f2807999222
pvl.dns-hosts: always sort by ip
Tero Marttila <terom@paivola.fi>
parents:
264
diff
changeset
|
663 |
else : |
5f2807999222
pvl.dns-hosts: always sort by ip
Tero Marttila <terom@paivola.fi>
parents:
264
diff
changeset
|
664 |
# fake, to sort correctly |
5f2807999222
pvl.dns-hosts: always sort by ip
Tero Marttila <terom@paivola.fi>
parents:
264
diff
changeset
|
665 |
sort = ipaddr.IPAddress(0) |
5f2807999222
pvl.dns-hosts: always sort by ip
Tero Marttila <terom@paivola.fi>
parents:
264
diff
changeset
|
666 |
|
5f2807999222
pvl.dns-hosts: always sort by ip
Tero Marttila <terom@paivola.fi>
parents:
264
diff
changeset
|
667 |
# select |
327
9d7d40206a74
pvl.hosts-import: add --output-others
Tero Marttila <terom@paivola.fi>
parents:
326
diff
changeset
|
668 |
match = True |
9d7d40206a74
pvl.hosts-import: add --output-others
Tero Marttila <terom@paivola.fi>
parents:
326
diff
changeset
|
669 |
|
265
5f2807999222
pvl.dns-hosts: always sort by ip
Tero Marttila <terom@paivola.fi>
parents:
264
diff
changeset
|
670 |
if prefix: |
5f2807999222
pvl.dns-hosts: always sort by ip
Tero Marttila <terom@paivola.fi>
parents:
264
diff
changeset
|
671 |
if not (ip and ip in prefix) : |
327
9d7d40206a74
pvl.hosts-import: add --output-others
Tero Marttila <terom@paivola.fi>
parents:
326
diff
changeset
|
672 |
match = False |
263
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
673 |
|
304
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
674 |
if select_domain : |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
675 |
if not (domain and domain == select_domain) : |
327
9d7d40206a74
pvl.hosts-import: add --output-others
Tero Marttila <terom@paivola.fi>
parents:
326
diff
changeset
|
676 |
match = False |
304
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
677 |
|
327
9d7d40206a74
pvl.hosts-import: add --output-others
Tero Marttila <terom@paivola.fi>
parents:
326
diff
changeset
|
678 |
if match and options.output_others : |
9d7d40206a74
pvl.hosts-import: add --output-others
Tero Marttila <terom@paivola.fi>
parents:
326
diff
changeset
|
679 |
pass |
9d7d40206a74
pvl.hosts-import: add --output-others
Tero Marttila <terom@paivola.fi>
parents:
326
diff
changeset
|
680 |
elif not match and not options.output_others : |
9d7d40206a74
pvl.hosts-import: add --output-others
Tero Marttila <terom@paivola.fi>
parents:
326
diff
changeset
|
681 |
pass |
9d7d40206a74
pvl.hosts-import: add --output-others
Tero Marttila <terom@paivola.fi>
parents:
326
diff
changeset
|
682 |
else : |
9d7d40206a74
pvl.hosts-import: add --output-others
Tero Marttila <terom@paivola.fi>
parents:
326
diff
changeset
|
683 |
yield (domain, sort), (host, domain), fields |
263
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
684 |
|
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
685 |
def export_hosts (options, hosts) : |
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
686 |
""" |
285
e18aaec99e54
pvl.hosts-import: generate domain-sections
Tero Marttila <terom@paivola.fi>
parents:
281
diff
changeset
|
687 |
Generate hosts config lines for given hosts. |
263
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
688 |
""" |
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
689 |
|
265
5f2807999222
pvl.dns-hosts: always sort by ip
Tero Marttila <terom@paivola.fi>
parents:
264
diff
changeset
|
690 |
# filter + sort |
288
2f2f92e4c58e
pvl.hosts-import: check_hosts: verify nonexistan aliases
Tero Marttila <terom@paivola.fi>
parents:
285
diff
changeset
|
691 |
hosts = [(host, fields) for sort, host, fields in sorted(sort_export_hosts(options, hosts))] |
263
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
692 |
|
304
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
693 |
if options.output_domain : |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
694 |
# global |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
695 |
output_domain = False |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
696 |
else : |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
697 |
output_domain = None |
263
5ee3bcd5b4b5
pvl.dns-hosts: name import/export; export as config
Tero Marttila <terom@paivola.fi>
parents:
262
diff
changeset
|
698 |
|
304
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
699 |
for (host, domain), fields in hosts : |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
700 |
if output_domain is False : |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
701 |
pass |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
702 |
elif domain != output_domain : |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
703 |
yield u"[{domain}]".format(domain=domain) |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
704 |
output_domain = domain |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
705 |
|
328
9b4ee4bad3d1
pvl.hosts-import: also import --zone-unused=ufc hosts, and output them as special comments
Tero Marttila <terom@paivola.fi>
parents:
327
diff
changeset
|
706 |
# special handling for "unused" hosts |
9b4ee4bad3d1
pvl.hosts-import: also import --zone-unused=ufc hosts, and output them as special comments
Tero Marttila <terom@paivola.fi>
parents:
327
diff
changeset
|
707 |
if ('ip', 'unused') in fields : |
9b4ee4bad3d1
pvl.hosts-import: also import --zone-unused=ufc hosts, and output them as special comments
Tero Marttila <terom@paivola.fi>
parents:
327
diff
changeset
|
708 |
yield u"{indent}# {unused} {ip}".format( |
9b4ee4bad3d1
pvl.hosts-import: also import --zone-unused=ufc hosts, and output them as special comments
Tero Marttila <terom@paivola.fi>
parents:
327
diff
changeset
|
709 |
indent = '\t' if output_domain else '', |
9b4ee4bad3d1
pvl.hosts-import: also import --zone-unused=ufc hosts, and output them as special comments
Tero Marttila <terom@paivola.fi>
parents:
327
diff
changeset
|
710 |
unused = options.zone_unused, |
9b4ee4bad3d1
pvl.hosts-import: also import --zone-unused=ufc hosts, and output them as special comments
Tero Marttila <terom@paivola.fi>
parents:
327
diff
changeset
|
711 |
ip = fields[('ip', 'unused')], |
9b4ee4bad3d1
pvl.hosts-import: also import --zone-unused=ufc hosts, and output them as special comments
Tero Marttila <terom@paivola.fi>
parents:
327
diff
changeset
|
712 |
) |
9b4ee4bad3d1
pvl.hosts-import: also import --zone-unused=ufc hosts, and output them as special comments
Tero Marttila <terom@paivola.fi>
parents:
327
diff
changeset
|
713 |
yield u"" |
9b4ee4bad3d1
pvl.hosts-import: also import --zone-unused=ufc hosts, and output them as special comments
Tero Marttila <terom@paivola.fi>
parents:
327
diff
changeset
|
714 |
continue |
9b4ee4bad3d1
pvl.hosts-import: also import --zone-unused=ufc hosts, and output them as special comments
Tero Marttila <terom@paivola.fi>
parents:
327
diff
changeset
|
715 |
|
304
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
716 |
# optional host-comments |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
717 |
for comment in fields.get(('comment', 'host'), ()): |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
718 |
yield u"{indent}# {comment}".format( |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
719 |
indent = '\t' if output_domain else '', |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
720 |
comment = comment, |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
721 |
) |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
722 |
|
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
723 |
if output_domain : |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
724 |
yield u"\t[[{host}]]".format(host=host) |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
725 |
else : |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
726 |
yield u"[{host}]".format(host=host) |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
727 |
|
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
728 |
#if not options.output_domain and domain : |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
729 |
# yield u"\t{field:15} = {domain}".format(field='domain', domain=domain) |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
730 |
|
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
731 |
for field_name in ( |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
732 |
'ip', |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
733 |
'ip6', |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
734 |
'ethernet', |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
735 |
'owner', |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
736 |
'alias', |
314
a1e4ef8dfb76
pvl.hosts-import: fix alias4/alias6 processing
Tero Marttila <terom@paivola.fi>
parents:
313
diff
changeset
|
737 |
'alias4', |
a1e4ef8dfb76
pvl.hosts-import: fix alias4/alias6 processing
Tero Marttila <terom@paivola.fi>
parents:
313
diff
changeset
|
738 |
'alias6', |
304
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
739 |
'boot', |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
740 |
) : |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
741 |
for field, value in fields.iteritems() : |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
742 |
if field[0] == field_name : |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
743 |
# optional field-comment |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
744 |
comment = fields.get(('comment', field_name), None) |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
745 |
|
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
746 |
if isinstance(value, list) : |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
747 |
value = ' '.join(value) |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
748 |
|
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
749 |
yield u"{indent}{field:15} = {value} {comment}".format( |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
750 |
indent = '\t\t' if output_domain else '\t', |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
751 |
field = '.'.join(str(label) for label in field), |
268
560ba0544254
pvl.hosts-import: ugly indexed foo.X keys for multi-value fields..
Tero Marttila <terom@paivola.fi>
parents:
266
diff
changeset
|
752 |
value = value, |
304
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
753 |
comment = u"# {comment}".format(comment=comment) if comment else '', |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
754 |
).rstrip() |
285
e18aaec99e54
pvl.hosts-import: generate domain-sections
Tero Marttila <terom@paivola.fi>
parents:
281
diff
changeset
|
755 |
|
e18aaec99e54
pvl.hosts-import: generate domain-sections
Tero Marttila <terom@paivola.fi>
parents:
281
diff
changeset
|
756 |
yield "" |
e18aaec99e54
pvl.hosts-import: generate domain-sections
Tero Marttila <terom@paivola.fi>
parents:
281
diff
changeset
|
757 |
|
e18aaec99e54
pvl.hosts-import: generate domain-sections
Tero Marttila <terom@paivola.fi>
parents:
281
diff
changeset
|
758 |
def apply_hosts_export (options, hosts) : |
e18aaec99e54
pvl.hosts-import: generate domain-sections
Tero Marttila <terom@paivola.fi>
parents:
281
diff
changeset
|
759 |
""" |
e18aaec99e54
pvl.hosts-import: generate domain-sections
Tero Marttila <terom@paivola.fi>
parents:
281
diff
changeset
|
760 |
Export hosts to file. |
e18aaec99e54
pvl.hosts-import: generate domain-sections
Tero Marttila <terom@paivola.fi>
parents:
281
diff
changeset
|
761 |
""" |
e18aaec99e54
pvl.hosts-import: generate domain-sections
Tero Marttila <terom@paivola.fi>
parents:
281
diff
changeset
|
762 |
|
e18aaec99e54
pvl.hosts-import: generate domain-sections
Tero Marttila <terom@paivola.fi>
parents:
281
diff
changeset
|
763 |
file = pvl.args.apply_file(options.output_hosts, 'w', options.output_charset) |
e18aaec99e54
pvl.hosts-import: generate domain-sections
Tero Marttila <terom@paivola.fi>
parents:
281
diff
changeset
|
764 |
|
e18aaec99e54
pvl.hosts-import: generate domain-sections
Tero Marttila <terom@paivola.fi>
parents:
281
diff
changeset
|
765 |
for line in export_hosts(options, hosts) : |
e18aaec99e54
pvl.hosts-import: generate domain-sections
Tero Marttila <terom@paivola.fi>
parents:
281
diff
changeset
|
766 |
print >>file, line |
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
767 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
768 |
def main (argv) : |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
769 |
options, args = parse_options(argv) |
261
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
770 |
|
dff7dcf0013f
pvl.dns-hosts: find owners from ldap
Tero Marttila <terom@paivola.fi>
parents:
260
diff
changeset
|
771 |
options.ldap = pvl.ldap.args.apply(options) |
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
772 |
|
304
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
773 |
# import |
9332f21f5aa1
pvl.hosts-import: support host domains, rework multi-value fields
Tero Marttila <terom@paivola.fi>
parents:
303
diff
changeset
|
774 |
hosts = list(apply_import_hosts(options)) |
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
775 |
|
288
2f2f92e4c58e
pvl.hosts-import: check_hosts: verify nonexistan aliases
Tero Marttila <terom@paivola.fi>
parents:
285
diff
changeset
|
776 |
# verify |
313
c211ef65fd67
pvl.hosts-import: alias4 mapping
Tero Marttila <terom@paivola.fi>
parents:
311
diff
changeset
|
777 |
hosts = process_hosts(options, hosts) |
288
2f2f92e4c58e
pvl.hosts-import: check_hosts: verify nonexistan aliases
Tero Marttila <terom@paivola.fi>
parents:
285
diff
changeset
|
778 |
|
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
779 |
# output |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
780 |
if options.output_hosts : |
285
e18aaec99e54
pvl.hosts-import: generate domain-sections
Tero Marttila <terom@paivola.fi>
parents:
281
diff
changeset
|
781 |
apply_hosts_export(options, hosts) |
259
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
782 |
|
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
783 |
if __name__ == '__main__': |
65b483fb862c
pvl.dns-hosts: import hosts from dns/dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
784 |
pvl.args.main(main) |