bin/pvl.dhcp-conf
author Tero Marttila <terom@paivola.fi>
Mon, 09 Mar 2015 23:31:13 +0200
changeset 738 3104fdf7ea26
parent 667 2d5750797b8a
permissions -rwxr-xr-x
pvl.hosts.hosts: drop support for instanced ip.* in favor of improved interface:ip.* =
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)