author | Tero Marttila <terom@paivola.fi> |
Mon, 09 Mar 2015 23:31:13 +0200 | |
changeset 738 | 3104fdf7ea26 |
parent 667 | 2d5750797b8a |
permissions | -rwxr-xr-x |
321
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
1 |
#!/usr/bin/env python |
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
2 |
|
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
3 |
""" |
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
4 |
Process dhcpd configs. |
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
5 |
|
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
6 |
Takes a conf file as input, and gives a conf file as output. |
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
7 |
""" |
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
8 |
|
667
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
9 |
import logging; log = logging.getLogger('pvl.dhcp-conf') |
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
10 |
import optparse |
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
11 |
import os.path |
321
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
12 |
import pvl.args |
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
13 |
import pvl.dhcp.config |
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
14 |
|
667
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
15 |
def process_dhcp_items (block, items, |
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
16 |
include_path = None, |
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
17 |
): |
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
18 |
""" |
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
19 |
Yield items for output from given input items. |
321
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
20 |
|
667
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
21 |
include_path - rewrite includes to be relative to given path. |
321
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
22 |
""" |
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
23 |
|
667
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
24 |
for item in items: |
321
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
25 |
name, args = item[0], item[1:] |
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
26 |
|
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
27 |
log.debug("%s: %s: %s", block, name, args) |
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
28 |
|
667
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
29 |
if name == 'include': |
321
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
30 |
include, = args |
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
31 |
|
667
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
32 |
if include_path: |
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
33 |
include = os.path.join(include_path, include) |
321
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
34 |
|
667
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
35 |
log.info("%s: include: %s", block, include) |
376
31d9ae0c1dab
pvl.dhcp-conf: whitelist set of attributes to quote
Tero Marttila <terom@paivola.fi>
parents:
321
diff
changeset
|
36 |
|
667
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
37 |
yield 'include', include |
376
31d9ae0c1dab
pvl.dhcp-conf: whitelist set of attributes to quote
Tero Marttila <terom@paivola.fi>
parents:
321
diff
changeset
|
38 |
|
667
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
39 |
else: |
321
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
40 |
yield item |
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
41 |
|
667
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
42 |
def process_dhcp_block (block, **opts): |
321
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
43 |
""" |
667
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
44 |
Return Block for output from given input Block. |
321
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
45 |
""" |
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
46 |
|
667
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
47 |
log.debug("%s <- %s %s", block, block.items, block.blocks) |
321
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
48 |
|
667
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
49 |
block = pvl.dhcp.config.Block(block.key, |
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
50 |
items = list(process_dhcp_items(block, block.items, **opts)), |
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
51 |
blocks = [process_dhcp_block(subblock, **opts) for subblock in block.blocks] |
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
52 |
) |
321
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
53 |
|
667
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
54 |
log.debug("%s -> %s %s", block, block.items, block.blocks) |
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
55 |
|
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
56 |
return block |
321
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
57 |
|
667
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
58 |
def main (argv): |
321
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
59 |
parser = optparse.OptionParser(__doc__) |
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
60 |
parser.add_option_group(pvl.args.parser(parser)) |
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
61 |
|
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
62 |
parser.add_option('--include-path', metavar='PATH', |
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
63 |
help="Adjust includes to use given path prefix") |
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
64 |
|
667
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
65 |
options, args = pvl.args.parse(parser, argv) |
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
66 |
|
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
67 |
for file in pvl.args.apply_files(args): |
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
68 |
try: |
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
69 |
conf = pvl.dhcp.config.DHCPConfigParser.load(file) |
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
70 |
except pvl.dhcp.config.DHCPConfigError as error: |
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
71 |
log.error("%s", error) |
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
72 |
return 3 |
321
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
73 |
|
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
74 |
# process |
667
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
75 |
conf = process_dhcp_block(conf, |
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
76 |
include_path = options.include_path, |
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
77 |
) |
321
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
78 |
|
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
79 |
# output |
667
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
80 |
for line in pvl.dhcp.config.build_block(conf): |
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
81 |
print line |
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
82 |
|
2d5750797b8a
pvl.dhcp-conf: update for pvl.dhcp.config, removing --output-conf option and just printing to stdout
Tero Marttila <terom@paivola.fi>
parents:
376
diff
changeset
|
83 |
return 0 |
321
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
84 |
|
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
85 |
if __name__ == '__main__': |
e931ff718ead
pvl.dhcp-conf: simplistic --include-path processing for dhcp.conf files
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
86 |
pvl.args.main(main) |