dhcp.py
author Tero Marttila <terom@fixme.fi>
Sun, 12 Jul 2009 00:43:36 +0300
changeset 6 57e8168ba8c4
parent 4 8b633782f02d
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
    Higher-level DHCP config structure model
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_conf as dhcpc
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
class Config (dhcpc.ConfFile) :
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
    """
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
        A full configuration file
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
    """
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
    def __init__ (self, name=dhcpc.ConfFile.DEFAULT_NAME, path=dhcpc.ConfFile.DEFAULT_PATH, 
4
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    13
            settings=None, options=None, shared_network=False, subnets=None, hosts=None, comment=None
1
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
        """
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
            Create a full configuration file for the given settings:
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
            settings:       a { name: value } mappping of general settings to set
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
            options:        a { opt_name: opt_value } mapping of options to set
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
            shared_network: define the subnets as a shared network of the given name
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
            subnets:        an iterable of Subnet's to define
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
            hosts:          an iterable of Host's to define
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
        """
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
4
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    26
        dhcpc.ConfFile.__init__(self, name, path, comment=comment)
1
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
        # define global settings
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
        if settings :
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
            self.add_params(dhcpc.Parameter(setting, value) for setting, value in settings.iteritems())
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
        
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
        # define global options
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
        if options :
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
            self.add_params(dhcpc.Option(option, value) for option, value in options.iteritems())
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
        
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
        # the shared-network section, or a series of subnets
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
        if shared_network :
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
            self.add_decl(dhcpc.SharedNetwork(shared_network, decls=subnets))
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
        elif subnets :
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41
            self.add_decls(subnets)
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
        
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    43
        # hosts section
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
        if hosts :
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
            self.add_decls(hosts)
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
class Subnet (dhcpc.Subnet) :
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
    """
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
        A subnet declaration with a router, and optionally a dynamic address pool, and allow/deny unknown clients
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
4
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    52
    def __init__ (self, subnet, router_idx=1, range=None, unknown_clients=None, comment=None) :
1
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    53
        """
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    54
            @param subnet the addr.IP representing the subnet
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    55
            @param router_idx the subnet[index] of the default gateway
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    56
            @param range optional (from_idx, to_idx) to define a dhcp pool
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    57
            @param unknown_clients optional 'allow'/'deny' to set a policy for unknown clients
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    58
        """
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    59
        
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    60
        # validate
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    61
        if unknown_clients :
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    62
            assert unknown_clients in ('allow', 'deny')
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    63
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    64
        super(Subnet, self).__init__(subnet, params=[
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    65
            dhcpc.Option("routers", subnet[router_idx]),
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    66
            dhcpc.Parameter("range", subnet[range[0]], subnet[range[1]]) if range else None,
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    67
            dhcpc.Parameter(unknown_clients, "unknown-clients") if unknown_clients else None,
4
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    68
        ], comment=comment)
1
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    69
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    70
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    71
class Host (dhcpc.Host) :
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    72
    """
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    73
        A host declaration with a hardware address and a IP address
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    74
    """
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    75
4
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    76
    def __init__ (self, hostname, mac_addr, ip_addr, comment=None) :
1
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    77
        super(Host, self).__init__(hostname, params=[
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    78
            dhcpc.Parameter("hardware ethernet", mac_addr),
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    79
            dhcpc.Parameter("fixed-address", ip_addr)
4
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    80
        ], comment=comment)
1
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    81