Automatically re-configure secondary Bind server to primary

With this script, you will able to re-configure a DNS server running on Bind9 from a secondary to a primary role :

  • For “secondary”, I talk about the server that hosts the slave zones (read only)
  • For “primary”, I talk about the server that hosts the master zones (writable)

Before running this Python script, you have to configure the variable bind_conf_path.

The script follows these steps :

  • create a backup of the current file named.conf
  • replace each line of the named.conf to configure all zones as master
  • save the result in the file named.conf-master
  • replace the named.conf file by named.conf-master
  • reload zone file using the command rndc reload
import shutil
import re

#Define variables
bind_conf_path = "/etc/bind/"
named_src_slave = str(bind_conf_path)+"named.conf"
named_bkp_slave = str(bind_conf_path)+"named.conf-secondary"
named_dst_mastr = str(bind_conf_path)+"named.conf-master"

shutil.copyfile(named_src_slave, named_bkp_slave)

#Regex to get the lines containing the master ip address for the zone
regexp = re.compile(r'masters { \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}; };')

outfile = open(named_dst_mastr, 'w')

#Create a new named.conf with master zone instead of slave zone
with open(named_bkp_slave) as f:
    for line in f:
        if line.strip() == "type slave;":
                line = "\ttype master;\n"
        elif regexp.search(line.strip()) is not None:
                line = ''
        outfile.write(line)

outfile.close()

#Replace the named.conf with the new one that contains the dns zone configured as master
shutil.copyfile(named_dst_mastr,named_src_slave)

#Reload Bind zone file
from subprocess import call
call(["rndc", "reload"])
Automatically re-configure secondary Bind server to primary

Leave a Reply

Your email address will not be published. Required fields are marked *