summaryrefslogtreecommitdiffstats
path: root/ipaserver
diff options
context:
space:
mode:
authorRob Crittenden <rcritten@redhat.com>2011-08-29 11:16:52 -0400
committerRob Crittenden <rcritten@redhat.com>2011-08-29 16:50:43 -0400
commitd7618acb73f57a63aca0a9fcfa8bf5edb1cffdda (patch)
tree7bb4e57eca685c60d5d88b146d33d56595285640 /ipaserver
parent5ee93349f6700d024fa4db68c960951d9964504b (diff)
downloadfreeipa-d7618acb73f57a63aca0a9fcfa8bf5edb1cffdda.tar.gz
freeipa-d7618acb73f57a63aca0a9fcfa8bf5edb1cffdda.tar.xz
freeipa-d7618acb73f57a63aca0a9fcfa8bf5edb1cffdda.zip
Add common is_installed() fn, better uninstall logging, check for errors.
The installer and ipactl used two different methods to determine whether IPA was configured, unify them. When uninstalling report any thing that looks suspicious and warn that a re-install may fail. This includes any remaining 389-ds instances and any state or files that remains after all the module uninstallers are complete. Add wrappers for removing files and directories to log failures. https://fedorahosted.org/freeipa/ticket/1715
Diffstat (limited to 'ipaserver')
-rw-r--r--ipaserver/install/dsinstance.py60
-rw-r--r--ipaserver/install/installutils.py49
2 files changed, 69 insertions, 40 deletions
diff --git a/ipaserver/install/dsinstance.py b/ipaserver/install/dsinstance.py
index 7243a61dc..b1037fa38 100644
--- a/ipaserver/install/dsinstance.py
+++ b/ipaserver/install/dsinstance.py
@@ -66,42 +66,24 @@ def schema_dirname(serverid):
return config_dirname(serverid) + "/schema/"
def erase_ds_instance_data(serverid):
- try:
- shutil.rmtree("/etc/dirsrv/slapd-%s" % serverid)
- except:
- pass
- try:
- shutil.rmtree("/usr/lib/dirsrv/slapd-%s" % serverid)
- except:
- pass
- try:
- shutil.rmtree("/usr/lib64/dirsrv/slapd-%s" % serverid)
- except:
- pass
- try:
- shutil.rmtree("/var/lib/dirsrv/slapd-%s" % serverid)
- except:
- pass
- try:
- shutil.rmtree("/var/lock/dirsrv/slapd-%s" % serverid)
- except:
- pass
- try:
- os.unlink("/var/run/slapd-%s.socket" % serverid)
- except:
- pass
- try:
- shutil.rmtree("/var/lib/dirsrv/scripts-%s" % serverid)
- except:
- pass
- try:
- os.unlink("/etc/dirsrv/ds.keytab")
- except:
- pass
- try:
- os.unlink("/etc/sysconfig/dirsrv-%s" % serverid)
- except:
- pass
+ installutils.rmtree("/etc/dirsrv/slapd-%s" % serverid)
+
+ installutils.rmtree("/usr/lib/dirsrv/slapd-%s" % serverid)
+
+ installutils.rmtree("/usr/lib64/dirsrv/slapd-%s" % serverid)
+
+ installutils.rmtree("/var/lib/dirsrv/slapd-%s" % serverid)
+
+ installutils.rmtree("/var/lock/dirsrv/slapd-%s" % serverid)
+
+ installutils.remove_file("/var/run/slapd-%s.socket" % serverid)
+
+ installutils.rmtree("/var/lib/dirsrv/scripts-%s" % serverid)
+
+ installutils.remove_file("/etc/dirsrv/ds.keytab")
+
+ installutils.remove_file("/etc/sysconfig/dirsrv-%s" % serverid)
+
# try:
# shutil.rmtree("/var/log/dirsrv/slapd-%s" % serverid)
# except:
@@ -114,6 +96,7 @@ def check_existing_installation():
serverids = []
for d in dirs:
+ logging.debug('Found existing 389-ds instance %s' % d)
serverids.append(os.path.basename(d).split("slapd-", 1)[1])
return serverids
@@ -674,10 +657,7 @@ class DsInstance(service.Service):
if user_exists == False:
pent = pwd.getpwnam(DS_USER)
- try:
- os.unlink("/var/tmp/ldap_%d" % pent.pw_uid)
- except:
- pass
+ installutils.remove_file("/var/tmp/ldap_%d" % pent.pw_uid)
try:
ipautil.run(["/usr/sbin/userdel", DS_USER])
except ipautil.CalledProcessError, e:
diff --git a/ipaserver/install/installutils.py b/ipaserver/install/installutils.py
index 4192024d3..fd978e713 100644
--- a/ipaserver/install/installutils.py
+++ b/ipaserver/install/installutils.py
@@ -30,10 +30,14 @@ import fcntl
import netaddr
import time
import tempfile
+import shutil
from ConfigParser import SafeConfigParser
from ipapython import ipautil, dnsclient, sysrestore
+# Used to determine install status
+IPA_MODULES = ['httpd', 'kadmin', 'dirsrv', 'pki-cad', 'pkids', 'install', 'krb5kdc', 'ntpd', 'named']
+
class HostnameLocalhost(Exception):
pass
@@ -509,3 +513,48 @@ def check_server_configuration():
server_fstore = sysrestore.FileStore('/var/lib/ipa/sysrestore')
if not server_fstore.has_files():
raise RuntimeError("IPA is not configured on this system.")
+
+def remove_file(filename):
+ """
+ Remove a file and log any exceptions raised.
+ """
+ try:
+ if os.path.exists(filename):
+ os.unlink(filename)
+ except Exception, e:
+ logging.error('Error removing %s: %s' % (filename, str(e)))
+
+def rmtree(path):
+ """
+ Remove a directory structure and log any exceptions raised.
+ """
+ try:
+ if os.path.exists(path):
+ shutil.rmtree(path)
+ except Exception, e:
+ logging.error('Error removing %s: %s' % (path, str(e)))
+
+def is_ipa_configured():
+ """
+ Using the state and index install files determine if IPA is already
+ configured.
+ """
+ installed = False
+
+ sstore = sysrestore.StateFile('/var/lib/ipa/sysrestore')
+ fstore = sysrestore.FileStore('/var/lib/ipa/sysrestore')
+
+ for module in IPA_MODULES:
+ if sstore.has_state(module):
+ logging.debug('%s is configured' % module)
+ installed = True
+ else:
+ logging.debug('%s is not configured' % module)
+
+ if fstore.has_files():
+ logging.debug('filestore has files')
+ installed = True
+ else:
+ logging.debug('filestore is tracking no files')
+
+ return installed