bin/pvl.hosts-dhcp
author Tero Marttila <terom@paivola.fi>
Mon, 16 Dec 2013 19:11:58 +0200
changeset 271 4dfa1a939153
child 284 eb7e2a4c6880
permissions -rwxr-xr-x
pvl.hosts-dhcp: generate dhcp hosts conf
271
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     1
#!/usr/bin/env python
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     2
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     3
import pvl.args
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     4
import pvl.hosts
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     5
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     6
import configobj
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     7
import logging; log = logging.getLogger('pvl.hosts-dhcp')
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     8
import optparse
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     9
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    10
def process_hosts (options, hosts) :
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    11
    for host in hosts :
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    12
        if host.owner :
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    13
            yield u"# {owner}".format(owner=host.owner)
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    14
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    15
        for index, ethernet in enumerate(host.ethernet) :
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    16
            if len(host.ethernet) > 1 :
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    17
                yield "host {host}-{index} {{".format(host=host, index=index)
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    18
            else :
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    19
                yield "host {host} {{".format(host=host)
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    20
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    21
            yield '\toption host-name "{host}";'.format(host=host)
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    22
            yield "\thardware ethernet {ethernet};".format(ethernet=ethernet)
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    23
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    24
            if host.ip :
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    25
                yield "\tfixed-address {ip};".format(ip=host.ip)
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    26
            
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    27
            yield "}"
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    28
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    29
        yield ""
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    30
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    31
def apply_conf (options, lines) :
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    32
    for line in lines :
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    33
        print line
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    34
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    35
def main (argv) :
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    36
    """
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    37
        Generate DHCP host configs from host definitions.
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    38
    """
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    39
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    40
    parser = optparse.OptionParser(main.__doc__)
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    41
    parser.add_option_group(pvl.args.parser(parser))
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    42
    parser.add_option_group(pvl.hosts.optparser(parser))
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    43
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    44
    options, args = parser.parse_args(argv[1:])
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    45
    pvl.args.apply(options)
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    46
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    47
    # input
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    48
    hosts = pvl.hosts.apply(options, args)
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    49
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    50
    # process
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    51
    apply_conf(options, process_hosts(options, hosts))
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    52
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    53
if __name__ == '__main__':
4dfa1a939153 pvl.hosts-dhcp: generate dhcp hosts conf
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    54
    pvl.args.main(main)