bind.py
author Tero Marttila <terom@fixme.fi>
Sun, 12 Jul 2009 00:43:36 +0300
changeset 6 57e8168ba8c4
parent 5 86b05c0ab5cd
permissions -rw-r--r--
use FQDN for zone hosts
5
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
"""
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
    High-level BIND stuff
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
"""
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
from __future__ import with_statement
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
import bind_conf as bindc
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
import os.path, datetime
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
DEFAULT_TTL = bindc.Interval(3600)
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    13
class Settings (object) :
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
    """
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
        A set of basic settings for a zone, mostly default TTL/refresh/retry/expire/minimum settings
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
    """
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
    def __init__ (self, ttl, hostmaster, refresh, retry, expire, minimum) :
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
        self.ttl = ttl
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
        self.hostmaster = hostmaster
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
        self.refresh = refresh
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
        self.retry = retry
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    23
        self.expire = expire
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
        self.minimum = minimum
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
class AutoSerial (object) :
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
    """
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
        Automatically generate the next serial to use by loading it from a file.
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
        The generated serials are in YYYYMMDDXX format.
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
    """
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
    def __init__ (self, path) :
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
        """
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
            Load the current serial 
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
            @param path the path to the serial file
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
        """
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
        
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    40
        # store
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41
        self.path = path
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
            
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    43
        # load it
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
        # XXX: locking
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
        serial = self.read()
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
        
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
        # current date
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
        today = datetime.date.today()
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
        # parse it
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    51
        if serial :
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    52
            date, code = self.parse(serial)
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    53
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    54
        else :
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    55
            date, code = today, 0
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    56
        
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    57
        # increment it
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    58
        date, code = self.next(date, code)
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    59
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    60
        # format it
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    61
        self._serial = self.build(date, code)
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    62
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    63
        # write it out
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    64
        self.write(self._serial)
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    65
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    66
    def parse (self, serial) :
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    67
        """
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    68
            Parse the given serial into a (datetime.date, code) format
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    69
        """
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    70
        
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    71
        # build it into a date
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    72
        date = datetime.date(
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    73
                year    = int(serial[0:4]),
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    74
                month   = int(serial[4:6]),
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    75
                day     = int(serial[6:8])
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    76
            )
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    77
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    78
        code = int(serial[8:])
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    79
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    80
        return date, code
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    81
   
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    82
    def next (self, date, code) :
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    83
        """
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    84
            Return the next valid serial following the given one
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    85
        """
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    86
        
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    87
        # current date
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    88
        today = datetime.date.today()
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    89
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    90
        # now to increment?
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    91
        if date < today :
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    92
            # jump to today's first serial
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    93
            date = today
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    94
            code = 0
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    95
        
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    96
        else :
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    97
            # today or overflowed into the future, just increment the code
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    98
            code += 1
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    99
        
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   100
        # code overflowed into next day?
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   101
        if code > 99 :
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   102
            date += datetime.timedelta(days=1)
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   103
            code = 0
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   104
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   105
        # ok
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   106
        return date, code
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   107
    
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   108
    def build (self, date, code) :
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   109
        """
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   110
            Build a serial code the given date/code
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   111
        """
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   112
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   113
        assert 0 <= code <= 99
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   114
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   115
        return "%s%02d" % (date.strftime("%Y%m%d"), code)
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   116
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   117
    def read (self) :
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   118
        """
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   119
            Read the current serial, returning it, or None, if not found...
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   120
        """
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   121
        
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   122
        # if it doesn't exist, default
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   123
        if not os.path.exists(self.path) :
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   124
            return None
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   125
        
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   126
        # read it
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   127
        with open(self.path) as fh :
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   128
            return fh.read().strip()
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   129
        
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   130
    def write (self, serial) :
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   131
        """
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   132
            Write a new serial
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   133
        """
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   134
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   135
        with open(self.path, 'w') as fh :
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   136
            fh.write("%s\n" % (serial, ))
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   137
    
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   138
    def serial (self) :
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   139
        """
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   140
            Return a new, unused serial code (before __init__)
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   141
        """
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   142
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   143
        return self._serial
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   144
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   145
class Domain (bindc.ZoneFile) :
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   146
    """
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   147
        A domain has a skeleton of stuff defined, but the rest is $INCLUDE'd from elsewhere, which is useful for
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   148
        multi-domain setups where the domains are mostly similar
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   149
    """
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   150
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   151
    def __init__ (self, domain, path, nameservers, mailservers, serial, settings, include=None, objs=None) :
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   152
        """
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   153
            @param domain the domain name
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   154
            @param path the path to the zone file
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   155
            @param nameservers list of nameservers as labels
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   156
            @param mailservers list of (pref, label) tuples for MX records
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   157
            @param serial the serial code to use
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   158
            @param settings the TTL/SOA settings to use
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   159
            @param include the optional zonefile to include
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   160
            @param objs the optional other objects to add to the zonefile
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   161
        """
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   162
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   163
        super(Domain, self).__init__(domain, path)
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   164
        
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   165
        # the default TTL
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   166
        self.add_directive(bindc.TTLDirective(settings.ttl))
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   167
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   168
        # the SOA record
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   169
        self.add_record(bindc.SOA(None, nameservers[0], 
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   170
                settings.hostmaster, serial, settings.refresh, settings.retry, settings.expire, settings.minimum
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   171
            ))
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   172
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   173
        # the NS records
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   174
        for label in nameservers :
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   175
            self.add_record(bindc.NS(None, label))
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   176
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   177
        # the MX records
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   178
        for pref, label in mailservers :
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   179
            self.add_record(bindc.MX(None, pref, label))
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   180
        
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   181
        # include?
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   182
        if include :
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   183
            self.add_directive(bindc.IncludeDirective(include))
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   184
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   185
        if objs :
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   186
            for obj in objs :
86b05c0ab5cd generate a db.paivola.fi file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   187
                self.add_obj(obj)