diff options
Diffstat (limited to 'ipa-server/ipaserver/bindinstance.py')
-rw-r--r-- | ipa-server/ipaserver/bindinstance.py | 55 |
1 files changed, 42 insertions, 13 deletions
diff --git a/ipa-server/ipaserver/bindinstance.py b/ipa-server/ipaserver/bindinstance.py index e9824ef0..a331b9d5 100644 --- a/ipa-server/ipaserver/bindinstance.py +++ b/ipa-server/ipaserver/bindinstance.py @@ -22,13 +22,14 @@ import tempfile import shutil import os import socket +import logging import service -import sysrestore +from ipa import sysrestore from ipa import ipautil class BindInstance(service.Service): - def __init__(self): + def __init__(self, fstore=None): service.Service.__init__(self, "named") self.fqdn = None self.domain = None @@ -37,6 +38,11 @@ class BindInstance(service.Service): self.realm = None self.sub_dict = None + if fstore: + self.fstore = fstore + else: + self.fstore = sysrestore.FileStore('/var/lib/ipa/sysrestore') + def setup(self, fqdn, ip_address, realm_name, domain_name): self.fqdn = fqdn self.ip_address = ip_address @@ -68,15 +74,25 @@ class BindInstance(service.Service): except: pass - self.__setup_zone() - self.__setup_named_conf() + self.step("Setting up our zone", self.__setup_zone) + self.step("Setting up named.conf", self.__setup_named_conf) + + self.step("restarting named", self.__start) + self.step("configuring named to start on boot", self.__enable) + + self.step("Changing resolve.conf to point to ourselves", self.__setup_resolve_conf) + def __start(self): try: self.backup_state("running", self.is_running()) - self.start() + self.restart() except: print "named service failed to start" + def __enable(self): + self.backup_state("enabled", self.is_running()) + self.chkconfig_on() + def __setup_sub_dict(self): self.sub_dict = dict(FQDN=self.fqdn, IP=self.ip_address, @@ -87,13 +103,13 @@ class BindInstance(service.Service): def __setup_zone(self): self.backup_state("domain", self.domain) zone_txt = ipautil.template_file(ipautil.SHARE_DIR + "bind.zone.db.template", self.sub_dict) - sysrestore.backup_file('/var/named/'+self.domain+'.zone.db') + self.fstore.backup_file('/var/named/'+self.domain+'.zone.db') zone_fd = open('/var/named/'+self.domain+'.zone.db', 'w') zone_fd.write(zone_txt) zone_fd.close() def __setup_named_conf(self): - sysrestore.backup_file('/etc/named.conf') + self.fstore.backup_file('/etc/named.conf') named_txt = ipautil.template_file(ipautil.SHARE_DIR + "bind.named.conf.template", self.sub_dict) named_fd = open('/etc/named.conf', 'w') named_fd.seek(0) @@ -101,7 +117,8 @@ class BindInstance(service.Service): named_fd.write(named_txt) named_fd.close() - sysrestore.backup_file('/etc/resolve.conf') + def __setup_resolve_conf(self): + self.fstore.backup_file('/etc/resolve.conf') resolve_txt = "search "+self.domain+"\nnameserver "+self.ip_address+"\n" resolve_fd = open('/etc/resolve.conf', 'w') resolve_fd.seek(0) @@ -111,16 +128,28 @@ class BindInstance(service.Service): def uninstall(self): running = self.restore_state("running") + enabled = self.restore_state("enabled") domain = self.restore_state("domain") if not running is None: self.stop() - if not domain is None: - sysrestore.restore_file(os.path.join ("/var/named/", domain + ".zone.db")) - - sysrestore.restore_file('/etc/named.conf') - sysrestore.restore_file('/etc/resolve.conf') + if not domain is None: + try: + self.fstore.restore_file(os.path.join ("/var/named/", domain + ".zone.db")) + except ValueError, error: + logging.debug(error) + pass + + for f in ["/etc/named.conf", "/etc/resolve.conf"]: + try: + self.fstore.restore_file(f) + except ValueError, error: + logging.debug(error) + pass + + if not enabled is None and not enabled: + self.chkconfig_off() if not running is None and running: self.start() |