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