conf_dhcp.py
author Tero Marttila <terom@fixme.fi>
Thu, 02 Apr 2009 17:47:43 +0300
changeset 0 257003279747
permissions -rw-r--r--
initial code
0
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
"""
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
    Configuration file output for the ISC DHCP server
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
"""
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
import conf
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
import itertools
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
class ConfDHCP (conf.File) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
    def __init__ (self, name="dhcpd.conf", path="/etc/dhcp3/dhcpd.conf") :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
        """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
            Initialize the dhcpd config file, but don't open it yet
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    13
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
            @see conf.ConfFile.__init__
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
        """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
        
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
        super(ConfDHCP, self).__init__(name, path)
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
class Statement (conf.Object) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
    """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
      A statement is a single line in the config file
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
    """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    23
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
    def __init__ (self, name, *args) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
        """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
            The statement will be formatted like this:
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
                <name> [ <arg> [ ... ] ] ";"
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
        """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
        self.name = name
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
        self.args = args
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
    
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
    def _fmt_arg (self, arg) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
        """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
            Formats a arg for use in output, the following types are supported:
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
                list/tuple/iter:    results in a comma-and-space separated list of formatted values
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
                unicode:            results in an encoded str
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
                str:                results in the string itself, quoted if needed
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    40
                other:              attempt to convert to a str, and then format that
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41
        """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
        
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    43
        # format lists specially
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
        # XXX: iterators?
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
        if isinstance(arg, (list, tuple)) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
            # recurse as a comma-and-space separated list
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
            return ', '.join(self._fmt_arg(a) for a in arg)
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
        elif isinstance(arg, Literal) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
            # use what it specifies
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    51
            return arg.fmt_arg()
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    52
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    53
        elif isinstance(arg, unicode) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    54
            # recurse with the str version
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    55
            # XXX: what encoding to use?
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    56
            return self._fmt_arg(arg.encode('utf8'))
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    57
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    58
        elif isinstance(arg, str) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    59
            # XXX: quoting
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    60
            return arg
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    61
        
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    62
        else :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    63
            # try and use it as a string
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    64
            return self._fmt_arg(str(arg))
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    65
    
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    66
    def _fmt_data (self) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    67
        """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    68
            Formats the statement name/params as a single line
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    69
        """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    70
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    71
        return "%s%s" % (self.name, (' ' + ' '.join(self._fmt_arg(a) for a in self.args)) if self.args else '')
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    72
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    73
class Literal (Statement) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    74
    """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    75
        A literal is something that goes into the config file as-is, with no formatting or escaping applied.
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    76
    """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    77
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    78
    def __init__ (self, literal) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    79
        self.literal = literal
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    80
    
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    81
    def fmt_arg (self) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    82
        return self.literal
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    83
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    84
    def fmt_lines (self) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    85
        yield self.literal
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    86
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    87
class Parameter (Statement) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    88
    """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    89
        A parameter is a single statement that configures the behaviour of something.
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    90
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    91
        Parameters have a name, and optionally, a number of arguments, and are formatted as statements terminated with
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    92
        a semicolon.
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    93
    """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    94
    
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    95
    def fmt_lines (self) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    96
        """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    97
            Yields a single ;-terminated line
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    98
        """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    99
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   100
        yield "%s;" % self._fmt_data()
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   101
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   102
class Declaration (Statement) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   103
    """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   104
        A declaration begins like a statement (with name and args), but then contains a block of any number of
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   105
        parameters followed by any number of nested declarations.
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   106
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   107
        <name> [ <args> [ ... ] ] {
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   108
            [ <parameters> ]
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   109
            [ <declarations> ]
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   110
        }
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   111
        
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   112
    """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   113
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   114
    def __init__ (self, name, args=[], params=[], decls=[]) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   115
        """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   116
            The name/args will be formatted as in Statement, but params should be an iterable of Parameters, and decls
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   117
            an iterable of Declarations.
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   118
        """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   119
        
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   120
        # init the statement bit
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   121
        Statement.__init__(self, name, *args)
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   122
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   123
        # store the iterables
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   124
        self.params = params
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   125
        self.decls = decls
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   126
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   127
    def fmt_lines (self) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   128
        """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   129
            Yields a header line, a series of indented body lines, and the footer line
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   130
        """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   131
        
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   132
        # the header to open the block
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   133
        yield "%s {" % self._fmt_data()
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   134
        
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   135
        # then output each content line
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   136
        for stmt in itertools.chain(self.params, self.decls) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   137
            # ..indented
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   138
            for line in stmt.fmt_lines() :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   139
                yield "\t%s" % line
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   140
        
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   141
        # and then close the block
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   142
        yield "}"
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   143
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   144
class SharedNetwork (Declaration) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   145
    """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   146
        A shared-network declaration is used to define a set of subnets that share the same physical network,
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   147
        optionally with some shared params.
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   148
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   149
        shared-network <name> {
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   150
            [ parameters ]
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   151
            [ declarations ]
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   152
        }
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   153
    """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   154
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   155
    def __init__ (self, name, params=[], decls=[]) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   156
        """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   157
            @param name the name of the shared-subnet
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   158
            @param params optional parameters
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   159
            @param decls the iterable of subnets or other declarations in the shared network
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   160
        """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   161
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   162
        super(SharedNetwork, self).__init__("shared-network", [name], params, decls)
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   163
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   164
class Subnet (Declaration) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   165
    """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   166
        A subnet is used to provide the information about a subnet required to identify whether or not an IP address is
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   167
        on that subnet, and may also be used to specify parameters/declarations for that subnet.
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   168
        
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   169
        subnet <subnet-number> netmask <netmask> {
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   170
            [ parameters ]
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   171
            [ declarations ]
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   172
        }
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   173
    """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   174
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   175
    def __init__ (self, network, params=[], decls=[]) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   176
        """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   177
            @param network the addr.Network for the subnet
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   178
            @param params optional parameters
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   179
            @param decls optional decls, e.g. subnets
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   180
        """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   181
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   182
        super(Subnet, self).__init__("subnet", [network.net(), "netmask", network.netmask()], params, decls)
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   183
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   184
class Group (Declaration) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   185
    """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   186
        A group is simply used to apply a set of parameters to a set of declarations.
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   187
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   188
        group {
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   189
            [ parameters ]
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   190
            [ declarations ]
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   191
        }
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   192
    """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   193
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   194
    def __init__ (self, params=[], decls=[]) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   195
        super(Group, self).__init__("group", [], params, decls)
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   196
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   197
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   198
class Host (Declaration) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   199
    """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   200
        A host is used to match a request against specific host, and then apply settings for that host.
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   201
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   202
        The "hostname" is the DHCP name to identify the host. 
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   203
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   204
        If no dhcp-client-identifier option is specified in the parameters, then the host is matched using the
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   205
        "hardware" parameter.
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   206
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   207
        host <hostname> {
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   208
            [ parameters ]
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   209
            [ declarations ]
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   210
        }
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   211
    """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   212
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   213
    def __init__ (self, hostname, params=[], decls=[]) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   214
        super(Host, self).__init__("host", [hostname], params, decls)
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   215
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   216
class Option (Parameter) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   217
    """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   218
        A generic 'option' parameter for a dhcpd.conf file
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   219
    """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   220
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   221
    def __init__ (self, name, *args) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   222
        """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   223
            Formatted as a Satement with a name of "option <name>".
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   224
        """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   225
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   226
        super(Option, self).__init__("option %s" % name, *args)
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   227