bind_conf.py
author Tero Marttila <terom@fixme.fi>
Thu, 02 Apr 2009 22:52:26 +0300
changeset 4 8b633782f02d
child 5 86b05c0ab5cd
permissions -rw-r--r--
write bind_conf.py
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
        
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
        Object.__init__(comment)
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
        conf.File.__init__(name, path)
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
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    54
class Comment (Object) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    55
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    56
        A comment, is, well, a comment :)
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    57
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    58
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    59
    def __init__ (self, comment) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    60
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    61
            @param comment the comment string
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    62
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    63
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    64
        Object.__init__(self, [comment])
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    65
    
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    66
    def fmt_lines (self) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    67
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    68
            Yield a single line with the comment
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    69
        """
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
        return self._fmt_comments()
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
class Label (object) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    74
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    75
        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
    76
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    77
        You can also use strs, this just implements a __str__ method
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
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    80
    def __init__ (self, label) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    81
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    82
            @param label the literal label to use
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    83
        """
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
        self.label = label
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    86
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    87
    def __str__ (self) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    88
        return self.label
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
class Origin (Label) :
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
        A label that represents the zone's origin
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) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    96
        pass
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    97
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    98
    def __str__ (self) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    99
        return '@'
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   100
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   101
class FQDN (Label) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   102
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   103
        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
   104
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   105
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   106
    def __init__ (self, fqdn) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   107
        self.fqdn = fqdn
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
    def __str__ (self) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   110
        return "%s." % (self.fqdn, )
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   111
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   112
class Interval (object) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   113
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   114
        A time interval suitable for use in SOA records
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
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   117
    def __init__ (self, s=None, m=None, h=None, d=None) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   118
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   119
            @param s seconds
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   120
            @param m minutes
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   121
            @param h hours
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   122
            @param d days
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
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   125
        self.s = s
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   126
        self.m = m
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   127
        self.h = h
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   128
        self.d = d
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   129
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   130
    def __str__ (self) :
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
            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
   133
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   134
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   135
        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
   136
            return str(self.s)
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   137
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   138
        else :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   139
            return "%s%s%s%s" % (
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   140
                    "%ds" % self.s if self.s else '',
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   141
                    "%dm" % self.m if self.m else '',
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   142
                    "%dh" % self.h if self.h else '',
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   143
                    "%dd" % self.d if self.d else ''
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
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   146
class ResourceRecord (Object) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   147
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   148
        A generic resource record for a BIND zone file
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
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   151
    def __init__ (self, label, type, rdata, cls='IN', ttl=None, **kwargs) :
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
            @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
   154
            @param type the type as a string ('A', 'TXT', etc.)
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   155
            @param rdata the rdata, as a raw string
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   156
            @param cls the class, e.g. 'IN'
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   157
            @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
   158
        """
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
        super(ResourceRecord, self).__init__(**kwargs)
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   161
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   162
        self.label = label
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   163
        self.type = type
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   164
        self.rdata = rdata
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   165
        self.cls = cls
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   166
        self.ttl = ttl
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
    def fmt_lines (self) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   169
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   170
            Just format the lines, eh
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   171
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   172
        
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   173
        # prefix comments
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   174
        for line in self._fmt_comments() :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   175
            yield line
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
        # then format the line
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   178
        # XXX: TTL?
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   179
        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)
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   180
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   181
class SOA (ResourceRecord) :
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
        "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
   184
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   185
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   186
    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
   187
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   188
            @param label the "name" of the zone, usually ORIGIN
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   189
            @param primary_ns the address of the primary NS server
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   190
            @param hostmaster the mailbox of the zone's hostmaster
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   191
            @param serial the serial number of the zone as an integer
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   192
            @param refresh time interval between zone refreshes in seconds
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   193
            @param retry time interval between retrys for failed refreshes
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   194
            @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
   195
            @param minimum minimum TTL for RRs in this zone
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   196
        """
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
        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
   199
                primary_ns, hostmaster, serial, refresh, retry, expire, minimum
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   200
            ), **kwargs)
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   201
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   202
class A (ResourceRecord) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   203
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   204
        An IPv4 forward address
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   205
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   206
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   207
    def __init__ (self, label, addr, **kwargs) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   208
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   209
            @param label the "name" of the address
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   210
            @param addr the IPv4 target address
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
        assert(addr.is_v4())
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   214
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   215
        super(A, self).__init__(label, 'A', addr, **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 AAAA (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 IPv6 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 IPv6 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_v6())
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(AAAA, self).__init__(label, 'AAAA', addr.strCompressed(), **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 CNAME (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
        A canonical-name alias
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, target, **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 alias
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   240
            @param target the alias target
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
        super(CNAME, self).__init__(label, 'CNAME', target, **kwargs)
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
class TXT (ResourceRecord) :
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
        A human-readable information record
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
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   250
    def __init__ (self, label, text, **kwargs) :
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
            @param label the "name" of the text record
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   253
            @param text the text data, shouldn't contain any quotes...
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   254
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   255
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   256
        super(TXT, self).__init__(label, 'TXT', '"%s"' % text, **kwargs)
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
class MX (ResourceRecord) :
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
        A mail-exchange definition
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
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   263
    def __init__ (self, label, pref, exchange, **kwargs) :
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
            @param label the "name" of the domain to handle mail for
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   266
            @param pref the numerical preference for this exchange
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   267
            @param exchange the domain name of the mail exchange (SMTP server)
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   268
        """
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
        super(MX, self).__init__(label, 'MX', "%d %s" % (pref, exchange), **kwargs)
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   271
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   272
class NS (ResourceRecord) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   273
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   274
        An authorative name server
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   275
    """
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
    def __init__ (self, label, nsname, **kwargs) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   278
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   279
            @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
   280
            @param nsname the name of the nameserver
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   281
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   282
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   283
        super(NS, self).__init__(label, 'NS', nsname)
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
class PTR (ResourceRecord) :
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
        An IPv4/IPv6 reverse address
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
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   290
    def __init__ (self, addr, name, **kwargs) :
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
            @param addr the addr.IP to map via in-addr.arpa
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   293
            @param name the name to map the address to
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   294
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   295
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   296
        # XXX: quick hack, this gives an absolute name
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   297
        label = addr.reverseName()
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   298
        
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   299
        super(PTR, self).__init__(label, 'PTR', name)
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   300
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   301
class Directive (Object) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   302
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   303
        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
   304
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   305
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   306
    def __init__ (self, name, *args, **kwargs) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   307
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   308
            @param name the $NAME bit
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   309
            @param args optional list of space-seprated arguments, Nones are ignored
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
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   312
        super(Directive, self).__init__(**kwargs)
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
        self.name = name
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   315
        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
   316
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   317
    def fmt_lines (self) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   318
        # prefix comments
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   319
        for line in self._fmt_comments() :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   320
            yield line
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   321
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   322
        # then format it
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   323
        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
   324
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   325
class OriginDirective (Directive) :
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
        Set the origin used to resolve the zone's labels.
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
        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
   330
    """
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 __init__ (self, origin, **kwargs) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   333
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   334
            @param origin the origin label
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   335
        """
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
        super(OriginDirective, self).__init__('ORIGIN', origin, **kwargs)
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   338
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   339
class TTLDirective (Directive) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   340
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   341
        Set the TTL used for records by default
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   342
    """
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
    def __init__ (self, ttl, **kwargs) :
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
            @param ttl the new ttl to use
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   347
        """
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
        super(TTLDirective, self).__init__('TTL', ttl, **kwargs)
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
class IncludeDirective (Directive) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   352
    """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   353
        Include another zoen file, optionally with a different origin
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   354
    """
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
    def __init__ (self, filename, origin=None, **kwargs) :
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
            @param filename the zone file to include
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   359
            @param origin the optional origin to process the zonefile with
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
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   362
        super(IncludeDirective, self).__init__('INCLUDE', filename, origin, **kwargs)
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
class GenerateDirective (Directive) :
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
        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
   367
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   368
        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
   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, range, lhs, type, rhs, ttl=None, cls=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 range (start, stop, step) tuple
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   374
            @param lhs expression to generate the label
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   375
            @param type the resource record type
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   376
            @param rhs expression to generate the rdata
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   377
        """
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
        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
   380