diff options
author | Patrick Uiterwijk <puiterwijk@redhat.com> | 2015-05-08 18:12:06 +0200 |
---|---|---|
committer | Rob Crittenden <rcritten@redhat.com> | 2015-05-08 16:34:02 -0400 |
commit | 485baf6ee7a315d1af1086fe5b5da8cff6c4ba37 (patch) | |
tree | 80620b1ccf7bcfa052122559a9dddab638420bf4 /ipsilon/install/ipsilon-server-install | |
parent | 9b7f9756d89f0a7908d9b7323f682f34b37d200e (diff) | |
download | ipsilon.git-485baf6ee7a315d1af1086fe5b5da8cff6c4ba37.tar.gz ipsilon.git-485baf6ee7a315d1af1086fe5b5da8cff6c4ba37.tar.xz ipsilon.git-485baf6ee7a315d1af1086fe5b5da8cff6c4ba37.zip |
Implement change registration
This will make it possible for plugins to register what they
have changed during installation, so that they can revert
any changes they made during the uninstallation.
https://fedorahosted.org/ipsilon/ticket/67
Signed-off-by: Patrick Uiterwijk <puiterwijk@redhat.com>
Reviewed-by: Rob Crittenden <rcritten@redhat.com>
Diffstat (limited to 'ipsilon/install/ipsilon-server-install')
-rwxr-xr-x | ipsilon/install/ipsilon-server-install | 46 |
1 files changed, 38 insertions, 8 deletions
diff --git a/ipsilon/install/ipsilon-server-install b/ipsilon/install/ipsilon-server-install index 471fe9a..0677f0e 100755 --- a/ipsilon/install/ipsilon-server-install +++ b/ipsilon/install/ipsilon-server-install @@ -10,6 +10,7 @@ from ipsilon.tools import files import ConfigParser import argparse import cherrypy +import json import logging import os import pwd @@ -154,6 +155,12 @@ def install(plugins, args): # components cherrypy.config.update(ipsilon_conf) + # Prepare to allow plugins to save things changed during install + changes = {'env_helper': {}, + 'login_manager': {}, + 'info_provider': {}, + 'auth_provider': {}} + # Move pre-existing admin db away admin_db = cherrypy.config['admin.config.db'] if os.path.exists(admin_db): @@ -169,8 +176,10 @@ def install(plugins, args): logger.info('Configuring environment helpers') for plugin_name in plugins['Environment Helpers']: plugin = plugins['Environment Helpers'][plugin_name] - if plugin.configure_server(args) == False: + plugin_changes = {} + if plugin.configure_server(args, plugin_changes) == False: logger.info('Configuration of environment helper %s failed' % plugin_name) + changes['env_helper'][plugin_name] = plugin_changes logger.info('Configuring login managers') for plugin_name in args['lm_order']: @@ -178,20 +187,32 @@ def install(plugins, args): plugin = plugins['Login Managers'][plugin_name] except KeyError: sys.exit('Login provider %s not installed' % plugin_name) - if plugin.configure(args) == False: + plugin_changes = {} + if plugin.configure(args, plugin_changes) == False: logger.info('Configuration of login manager %s failed' % plugin_name) + changes['login_manager'][plugin_name] = plugin_changes logger.info('Configuring Info provider') for plugin_name in plugins['Info Provider']: plugin = plugins['Info Provider'][plugin_name] - if plugin.configure(args) == False: + plugin_changes = {} + if plugin.configure(args, plugin_changes) == False: logger.info('Configuration of info provider %s failed' % plugin_name) + changes['info_provider'][plugin_name] = plugin_changes logger.info('Configuring Authentication Providers') for plugin_name in plugins['Auth Providers']: plugin = plugins['Auth Providers'][plugin_name] - if plugin.configure(args) == False: + plugin_changes = {} + if plugin.configure(args, plugin_changes) == False: logger.info('Configuration of auth provider %s failed' % plugin_name) + changes['auth_provider'][plugin_name] = plugin_changes + + # Save any changes that were made + install_changes = os.path.join(instance_conf, 'install_changes') + changes = json.dumps(changes) + with open(install_changes, 'w+') as f: + f.write(changes) # Fixup permissions so only the ipsilon user can read these files files.fix_user_dirs(instance_conf, opts['system_user']) @@ -223,28 +244,37 @@ def uninstall(plugins, args): if sure != 'yes': raise Exception('Aborting') + # Get the details of what we changed during installation + install_changes = os.path.join(instance_conf, 'install_changes') + with open(install_changes, 'r') as f: + changes = json.loads(f.read()) + logger.info('Removing environment helpers') for plugin_name in plugins['Environment Helpers']: plugin = plugins['Environment Helpers'][plugin_name] - if plugin.unconfigure(args) == False: + plugin_changes = changes['env_helper'][plugin_name] + if plugin.unconfigure(args, plugin_changes) == False: logger.info('Removal of environment helper %s failed' % plugin_name) logger.info('Removing login managers') for plugin_name in plugins['Login Managers']: plugin = plugins['Login Managers'][plugin_name] - if plugin.unconfigure(args) == False: + plugin_changes = changes['login_manager'][plugin_name] + if plugin.unconfigure(args, plugin_changes) == False: logger.info('Removal of login manager %s failed' % plugin_name) logger.info('Removing Info providers') for plugin_name in plugins['Info Provider']: plugin = plugins['Info Provider'][plugin_name] - if plugin.unconfigure(args) == False: + plugin_changes = changes['info_provider'][plugin_name] + if plugin.unconfigure(args, plugin_changes) == False: logger.info('Removal of info provider %s failed' % plugin_name) logger.info('Removing Authentication Providers') for plugin_name in plugins['Auth Providers']: plugin = plugins['Auth Providers'][plugin_name] - if plugin.unconfigure(args) == False: + plugin_changes = changes['auth_provider'][plugin_name] + if plugin.unconfigure(args, plugin_changes) == False: logger.info('Removal of auth provider %s failed' % plugin_name) logger.info('Removing httpd configuration') |