pvl/config/bind_conf.py
author Tero Marttila <terom@fixme.fi>
Sun, 12 Jul 2009 00:51:08 +0300
changeset 7 0f9cae2d7147
parent 5 bind_conf.py@86b05c0ab5cd
permissions -rw-r--r--
restructure, break
4
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
"""
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
    Configuration file output for the ISC DNS server: BIND
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
"""
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
import conf
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
class Object (conf.ConfObject) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
        Our own version of ConfObject that knows how to format comments
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
    def _fmt_comments (self) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    13
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
            Format comments using the standard format:
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
                ";" <comment>
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
        for comment in self.comments :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
            if comment is not None :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
                yield "; %s" % (comment, )
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
class ZoneFile (Object, conf.File) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    23
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
        A zone file containing a bunch of directives, resource records and comments
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
    def __init__ (self, name, path, ttl=None, comment=None) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
            @param name the name of the zonefile, for status stuff
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
            @param path the path to the zonefile
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
            @param ttl default TTL to use
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
            @param comment optional comments
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
        
5
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    35
        Object.__init__(self, comment)
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    36
        conf.File.__init__(self, name, path)
4
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
        # init
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
        self.objects = []
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    40
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41
        if ttl :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
            self.add_directive(TTLDirective(ttl))
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    43
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
    def add_obj (self, obj) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
            Add an Object onto the list of things to include in this zone file
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
        self.objects.append(obj)
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    51
    # various aliases...
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    52
    add_comment = add_record = add_directive = add_obj
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    53
5
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    54
    def fmt_lines (self) :
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    55
        """
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    56
            Just format all our objects
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    57
        """
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    58
        
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    59
        # prefix comments
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    60
        for line in self._fmt_comments() :
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    61
            yield line
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    62
        
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    63
        # and then all objects
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    64
        for obj in self.objects :
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    65
            # ...and their lines
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    66
            for line in obj.fmt_lines() :
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    67
                yield line
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    68
    
4
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    69
class Comment (Object) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    70
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    71
        A comment, is, well, a comment :)
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    72
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    73
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    74
    def __init__ (self, comment) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    75
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    76
            @param comment the comment string
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    77
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    78
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    79
        Object.__init__(self, [comment])
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    80
    
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    81
    def fmt_lines (self) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    82
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    83
            Yield a single line with the comment
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    84
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    85
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    86
        return self._fmt_comments()
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    87
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    88
class Label (object) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    89
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    90
        A label, as used in a ResourceRecord, either as the label, or the rdata for various resource types
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    91
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    92
        You can also use strs, this just implements a __str__ method
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    93
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    94
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    95
    def __init__ (self, label) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    96
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    97
            @param label the literal label to use
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    98
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    99
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   100
        self.label = label
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   101
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   102
    def __str__ (self) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   103
        return self.label
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   104
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   105
class Origin (Label) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   106
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   107
        A label that represents the zone's origin
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   108
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   109
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   110
    def __init__ (self) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   111
        pass
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   112
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   113
    def __str__ (self) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   114
        return '@'
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   115
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   116
class FQDN (Label) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   117
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   118
        A label that represents the given external domain (i.e. this adds the . to the end that people always forget).
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   119
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   120
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   121
    def __init__ (self, fqdn) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   122
        self.fqdn = fqdn
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   123
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   124
    def __str__ (self) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   125
        return "%s." % (self.fqdn, )
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   126
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   127
class Interval (object) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   128
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   129
        A time interval suitable for use in SOA records
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   130
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   131
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   132
    def __init__ (self, s=None, m=None, h=None, d=None) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   133
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   134
            @param s seconds
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   135
            @param m minutes
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   136
            @param h hours
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   137
            @param d days
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   138
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   139
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   140
        self.s = s
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   141
        self.m = m
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   142
        self.h = h
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   143
        self.d = d
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   144
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   145
    def __str__ (self) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   146
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   147
            If only seconds were given, just return those directly, otherwise, apply units
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   148
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   149
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   150
        if self.s and not self.m and not self.h and not self.d :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   151
            return str(self.s)
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   152
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   153
        else :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   154
            return "%s%s%s%s" % (
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   155
                    "%ds" % self.s if self.s else '',
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   156
                    "%dm" % self.m if self.m else '',
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   157
                    "%dh" % self.h if self.h else '',
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   158
                    "%dd" % self.d if self.d else ''
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   159
                )
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   160
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   161
class ResourceRecord (Object) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   162
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   163
        A generic resource record for a BIND zone file
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   164
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   165
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   166
    def __init__ (self, label, type, rdata, cls='IN', ttl=None, **kwargs) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   167
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   168
            @param label the "name" of this record, or None to referr to the previous record's label
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   169
            @param type the type as a string ('A', 'TXT', etc.)
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   170
            @param rdata the rdata, as a raw string
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   171
            @param cls the class, e.g. 'IN'
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   172
            @param ttl the time-to-live value in seconds, or None to omit it
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   173
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   174
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   175
        super(ResourceRecord, self).__init__(**kwargs)
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   176
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   177
        self.label = label
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   178
        self.type = type
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   179
        self.rdata = rdata
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   180
        self.cls = cls
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   181
        self.ttl = ttl
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   182
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   183
    def fmt_lines (self) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   184
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   185
            Just format the lines, eh
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   186
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   187
        
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   188
        # prefix comments
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   189
        for line in self._fmt_comments() :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   190
            yield line
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   191
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   192
        # then format the line
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   193
        # XXX: TTL?
5
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   194
        yield "%-30s %-4s%-4s %-8s %s" % (self.label if self.label is not None else '', str(self.ttl) if self.ttl else '', self.cls, self.type, self.rdata)
4
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   195
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   196
class SOA (ResourceRecord) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   197
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   198
        "Identifies the start of a zone of authority", must be the first record
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   199
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   200
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   201
    def __init__ (self, label, primary_ns, hostmaster, serial, refresh, retry, expire, minimum, **kwargs) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   202
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   203
            @param label the "name" of the zone, usually ORIGIN
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   204
            @param primary_ns the address of the primary NS server
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   205
            @param hostmaster the mailbox of the zone's hostmaster
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   206
            @param serial the serial number of the zone as an integer
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   207
            @param refresh time interval between zone refreshes in seconds
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   208
            @param retry time interval between retrys for failed refreshes
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   209
            @param expire time interval before zone data can no longer be considered authorative
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   210
            @param minimum minimum TTL for RRs in this zone
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   211
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   212
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   213
        super(SOA, self).__init__(label, 'SOA', "%s %s ( %s %s %s %s %s )" % (
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   214
                primary_ns, hostmaster, serial, refresh, retry, expire, minimum
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   215
            ), **kwargs)
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   216
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   217
class A (ResourceRecord) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   218
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   219
        An IPv4 forward address
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   220
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   221
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   222
    def __init__ (self, label, addr, **kwargs) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   223
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   224
            @param label the "name" of the address
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   225
            @param addr the IPv4 target address
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   226
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   227
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   228
        assert(addr.is_v4())
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   229
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   230
        super(A, self).__init__(label, 'A', addr, **kwargs)
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   231
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   232
class AAAA (ResourceRecord) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   233
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   234
        An IPv6 forward address
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   235
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   236
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   237
    def __init__ (self, label, addr, **kwargs) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   238
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   239
            @param label the "name" of the address
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   240
            @param addr the IPv6 target address
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   241
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   242
        
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   243
        assert(addr.is_v6())
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   244
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   245
        super(AAAA, self).__init__(label, 'AAAA', addr.strCompressed(), **kwargs)
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   246
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   247
class CNAME (ResourceRecord) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   248
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   249
        A canonical-name alias
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   250
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   251
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   252
    def __init__ (self, label, target, **kwargs) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   253
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   254
            @param label the "name" of the alias
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   255
            @param target the alias target
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   256
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   257
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   258
        super(CNAME, self).__init__(label, 'CNAME', target, **kwargs)
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   259
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   260
class TXT (ResourceRecord) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   261
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   262
        A human-readable information record
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   263
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   264
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   265
    def __init__ (self, label, text, **kwargs) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   266
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   267
            @param label the "name" of the text record
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   268
            @param text the text data, shouldn't contain any quotes...
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   269
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   270
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   271
        super(TXT, self).__init__(label, 'TXT', '"%s"' % text, **kwargs)
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   272
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   273
class MX (ResourceRecord) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   274
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   275
        A mail-exchange definition
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   276
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   277
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   278
    def __init__ (self, label, pref, exchange, **kwargs) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   279
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   280
            @param label the "name" of the domain to handle mail for
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   281
            @param pref the numerical preference for this exchange
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   282
            @param exchange the domain name of the mail exchange (SMTP server)
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   283
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   284
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   285
        super(MX, self).__init__(label, 'MX', "%d %s" % (pref, exchange), **kwargs)
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   286
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   287
class NS (ResourceRecord) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   288
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   289
        An authorative name server
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   290
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   291
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   292
    def __init__ (self, label, nsname, **kwargs) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   293
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   294
            @param label the "name" of the domain to have a nameserver for
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   295
            @param nsname the name of the nameserver
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   296
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   297
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   298
        super(NS, self).__init__(label, 'NS', nsname)
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   299
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   300
class PTR (ResourceRecord) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   301
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   302
        An IPv4/IPv6 reverse address
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   303
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   304
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   305
    def __init__ (self, addr, name, **kwargs) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   306
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   307
            @param addr the addr.IP to map via in-addr.arpa
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   308
            @param name the name to map the address to
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   309
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   310
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   311
        # XXX: quick hack, this gives an absolute name
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   312
        label = addr.reverseName()
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   313
        
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   314
        super(PTR, self).__init__(label, 'PTR', name)
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   315
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   316
class Directive (Object) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   317
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   318
        Special directives that can be used in zone files to control behaviour
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   319
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   320
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   321
    def __init__ (self, name, *args, **kwargs) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   322
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   323
            @param name the $NAME bit
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   324
            @param args optional list of space-seprated arguments, Nones are ignored
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   325
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   326
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   327
        super(Directive, self).__init__(**kwargs)
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   328
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   329
        self.name = name
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   330
        self.args = [arg for arg in args if arg is not None]
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   331
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   332
    def fmt_lines (self) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   333
        # prefix comments
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   334
        for line in self._fmt_comments() :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   335
            yield line
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   336
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   337
        # then format it
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   338
        yield "$%s%s" % (self.name, (' ' + ' '.join(str(arg) for arg in self.args)) if self.args else '')
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   339
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   340
class OriginDirective (Directive) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   341
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   342
        Set the origin used to resolve the zone's labels.
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   343
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   344
        Note that the origin label is not absolute by default - use FQDN for that
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   345
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   346
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   347
    def __init__ (self, origin, **kwargs) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   348
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   349
            @param origin the origin label
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   350
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   351
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   352
        super(OriginDirective, self).__init__('ORIGIN', origin, **kwargs)
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   353
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   354
class TTLDirective (Directive) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   355
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   356
        Set the TTL used for records by default
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   357
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   358
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   359
    def __init__ (self, ttl, **kwargs) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   360
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   361
            @param ttl the new ttl to use
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   362
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   363
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   364
        super(TTLDirective, self).__init__('TTL', ttl, **kwargs)
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   365
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   366
class IncludeDirective (Directive) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   367
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   368
        Include another zoen file, optionally with a different origin
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   369
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   370
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   371
    def __init__ (self, filename, origin=None, **kwargs) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   372
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   373
            @param filename the zone file to include
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   374
            @param origin the optional origin to process the zonefile with
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   375
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   376
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   377
        super(IncludeDirective, self).__init__('INCLUDE', filename, origin, **kwargs)
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   378
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   379
class GenerateDirective (Directive) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   380
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   381
        Generate a bunch of numbered records using an expression for the label and rdata.
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   382
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   383
        At the simplest, any "$" in the expression is replaced with the value of the iterator.
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   384
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   385
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   386
    def __init__ (self, range, lhs, type, rhs, ttl=None, cls=None, **kwargs) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   387
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   388
            @param range (start, stop, step) tuple
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   389
            @param lhs expression to generate the label
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   390
            @param type the resource record type
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   391
            @param rhs expression to generate the rdata
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   392
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   393
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   394
        super(GenerateDirective, self).__init__('GENERATE', '%d-%d' % range, lhs, ttl, cls, type, rhs, **kwargs)
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   395