host.py
author Tero Marttila <terom@fixme.fi>
Sun, 12 Jul 2009 00:43:36 +0300
changeset 6 57e8168ba8c4
parent 5 86b05c0ab5cd
permissions -rw-r--r--
use FQDN for zone hosts
1
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
"""
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
    Information about one physica host
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
"""
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
import dhcp
5
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
     6
import bind_conf as bindc
1
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
class Interface (object) :
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
    """
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
        A physical interface for a host
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
    """
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    13
    def __init__ (self, mac_addr, name=None) :
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
        """
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
            @param name the short name of the interface (e.g. 'lan' or 'wlan'), or None for no suffix
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
            @param mac the physical-layer addr.MAC address
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
        """
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
        self.addr = mac_addr
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
        self.name = name
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
class Host (object) :
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    23
    """
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
        A host has a single address/name, an owner, and multiple interfaces
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
    """
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
    def __init__ (self, hostname, address, interfaces) :
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
        """
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
            @param hostname the short hostname, without the domain name component
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
            @param address the addr.IP address
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
            @param interfaces a list of zero or more Interface objects
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
        """
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
        self.hostname = hostname
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
        self.address = address
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
        self.interfaces = interfaces
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
    
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
    def build_dhcp_hosts (self) :
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
        """
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    40
            Build and yield a series of dhcp_conf.Host objects for this host.
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
            If the host does not have any interfaces defined, this doesn't yield anything
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    43
        """
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
        
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
        # XXX: do we want to ensure that the host names are unique?
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
        
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
        for iface in self.interfaces :
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
            # the DHCP hostname
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
            name = "%s%s" % (self.hostname, ('-%s' % (iface.name)) if iface.name else '')
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
            
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    51
            # build it
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    52
            yield dhcp.Host(name, iface.addr, self.address)
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    53
5
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    54
    def build_bind_domain_records (self, origin) :
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    55
        """
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    56
            Build and yield one or more forward records (A/AAAA) for the host, with the given domain as the origin
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    57
        """
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    58
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    59
        yield bindc.A(self.hostname, self.address)
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    60