summaryrefslogtreecommitdiffstats
path: root/ipa-server/ipaserver/bindinstance.py
diff options
context:
space:
mode:
authorSimo Sorce <ssorce@redhat.com>2008-03-27 19:01:38 -0400
committerSimo Sorce <ssorce@redhat.com>2008-03-27 19:01:38 -0400
commitaac086582aee79ccf72206faf118e997c623170c (patch)
tree7c806025ad651531015b62ca806db7a32f55c2a8 /ipa-server/ipaserver/bindinstance.py
parentb7924139d895c7ebe019fbfc9c85fed3baae642e (diff)
downloadfreeipa.git-aac086582aee79ccf72206faf118e997c623170c.tar.gz
freeipa.git-aac086582aee79ccf72206faf118e997c623170c.tar.xz
freeipa.git-aac086582aee79ccf72206faf118e997c623170c.zip
Move sysrestore to ipa-python so it can be used by client scripts too.
Change backup format so files are all in a single directory (no dir hierarchies) and use an index file so we can save also ownership and permission info for the restore (and eventually other data later on).
Diffstat (limited to 'ipa-server/ipaserver/bindinstance.py')
-rw-r--r--ipa-server/ipaserver/bindinstance.py55
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()