mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
Server Upgrade: handle errors better
* Prevent to continue with upgrade if a fatal error happened * Use exceptions to handle failures https://fedorahosted.org/freeipa/ticket/4904 Reviewed-By: David Kupka <dkupka@redhat.com>
This commit is contained in:
parent
f6e3088b87
commit
78baeeb77c
@ -506,7 +506,11 @@ class DsInstance(service.Service):
|
|||||||
|
|
||||||
def apply_updates(self):
|
def apply_updates(self):
|
||||||
data_upgrade = upgradeinstance.IPAUpgrade(self.realm)
|
data_upgrade = upgradeinstance.IPAUpgrade(self.realm)
|
||||||
data_upgrade.create_instance()
|
try:
|
||||||
|
data_upgrade.create_instance()
|
||||||
|
except Exception as e:
|
||||||
|
# very fatal errors only will raise exception
|
||||||
|
raise RuntimeError("Update failed: %s" % e)
|
||||||
installutils.store_version()
|
installutils.store_version()
|
||||||
|
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ from ipalib import api
|
|||||||
from ipapython import ipautil, admintool
|
from ipapython import ipautil, admintool
|
||||||
from ipaplatform.paths import paths
|
from ipaplatform.paths import paths
|
||||||
from ipaserver.install import installutils, dsinstance, schemaupdate
|
from ipaserver.install import installutils, dsinstance, schemaupdate
|
||||||
from ipaserver.install.ldapupdate import LDAPUpdate, UPDATES_DIR
|
from ipaserver.install.ldapupdate import LDAPUpdate, UPDATES_DIR, BadSyntax
|
||||||
from ipaserver.install.upgradeinstance import IPAUpgrade
|
from ipaserver.install.upgradeinstance import IPAUpgrade
|
||||||
|
|
||||||
|
|
||||||
@ -108,17 +108,19 @@ class LDAPUpdater_Upgrade(LDAPUpdater):
|
|||||||
realm = krbV.default_context().default_realm
|
realm = krbV.default_context().default_realm
|
||||||
upgrade = IPAUpgrade(realm, self.files,
|
upgrade = IPAUpgrade(realm, self.files,
|
||||||
schema_files=options.schema_files)
|
schema_files=options.schema_files)
|
||||||
upgrade.create_instance()
|
|
||||||
|
|
||||||
if upgrade.badsyntax:
|
try:
|
||||||
|
upgrade.create_instance()
|
||||||
|
except BadSyntax:
|
||||||
raise admintool.ScriptError(
|
raise admintool.ScriptError(
|
||||||
'Bad syntax detected in upgrade file(s).', 1)
|
'Bad syntax detected in upgrade file(s).', 1)
|
||||||
elif upgrade.upgradefailed:
|
except RuntimeError:
|
||||||
raise admintool.ScriptError('IPA upgrade failed.', 1)
|
raise admintool.ScriptError('IPA upgrade failed.', 1)
|
||||||
elif upgrade.modified:
|
|
||||||
self.log.info('Update complete')
|
|
||||||
else:
|
else:
|
||||||
self.log.info('Update complete, no data were modified')
|
if upgrade.modified:
|
||||||
|
self.log.info('Update complete')
|
||||||
|
else:
|
||||||
|
self.log.info('Update complete, no data were modified')
|
||||||
|
|
||||||
|
|
||||||
class LDAPUpdater_NonUpgrade(LDAPUpdater):
|
class LDAPUpdater_NonUpgrade(LDAPUpdater):
|
||||||
|
@ -11,6 +11,7 @@ from ipaplatform.paths import paths
|
|||||||
from ipapython import admintool, ipautil
|
from ipapython import admintool, ipautil
|
||||||
from ipaserver.install import installutils
|
from ipaserver.install import installutils
|
||||||
from ipaserver.install.upgradeinstance import IPAUpgrade
|
from ipaserver.install.upgradeinstance import IPAUpgrade
|
||||||
|
from ipaserver.install.ldapupdate import BadSyntax
|
||||||
|
|
||||||
|
|
||||||
class ServerUpgrade(admintool.AdminTool):
|
class ServerUpgrade(admintool.AdminTool):
|
||||||
@ -73,17 +74,19 @@ class ServerUpgrade(admintool.AdminTool):
|
|||||||
|
|
||||||
realm = krbV.default_context().default_realm
|
realm = krbV.default_context().default_realm
|
||||||
data_upgrade = IPAUpgrade(realm)
|
data_upgrade = IPAUpgrade(realm)
|
||||||
data_upgrade.create_instance()
|
|
||||||
|
|
||||||
if data_upgrade.badsyntax:
|
try:
|
||||||
|
data_upgrade.create_instance()
|
||||||
|
except BadSyntax:
|
||||||
raise admintool.ScriptError(
|
raise admintool.ScriptError(
|
||||||
'Bad syntax detected in upgrade file(s).', 1)
|
'Bad syntax detected in upgrade file(s).', 1)
|
||||||
elif data_upgrade.upgradefailed:
|
except RuntimeError:
|
||||||
raise admintool.ScriptError('IPA upgrade failed.', 1)
|
raise admintool.ScriptError('IPA upgrade failed.', 1)
|
||||||
elif data_upgrade.modified:
|
|
||||||
self.log.info('Data update complete')
|
|
||||||
else:
|
else:
|
||||||
self.log.info('Data update complete, no data were modified')
|
if data_upgrade.modified:
|
||||||
|
self.log.info('Update complete')
|
||||||
|
else:
|
||||||
|
self.log.info('Update complete, no data were modified')
|
||||||
|
|
||||||
# store new data version after upgrade
|
# store new data version after upgrade
|
||||||
installutils.store_version()
|
installutils.store_version()
|
||||||
|
@ -167,8 +167,6 @@ class IPAUpgrade(service.Service):
|
|||||||
self.savefilename = '%s/%s.ipa.%s' % (paths.ETC_DIRSRV_SLAPD_INSTANCE_TEMPLATE % serverid, DSE, ext)
|
self.savefilename = '%s/%s.ipa.%s' % (paths.ETC_DIRSRV_SLAPD_INSTANCE_TEMPLATE % serverid, DSE, ext)
|
||||||
self.files = files
|
self.files = files
|
||||||
self.modified = False
|
self.modified = False
|
||||||
self.badsyntax = False
|
|
||||||
self.upgradefailed = False
|
|
||||||
self.serverid = serverid
|
self.serverid = serverid
|
||||||
self.schema_files = schema_files
|
self.schema_files = schema_files
|
||||||
self.realm = realm_name
|
self.realm = realm_name
|
||||||
@ -307,13 +305,11 @@ class IPAUpgrade(service.Service):
|
|||||||
if len(self.files) == 0:
|
if len(self.files) == 0:
|
||||||
self.files = ld.get_all_files(ldapupdate.UPDATES_DIR)
|
self.files = ld.get_all_files(ldapupdate.UPDATES_DIR)
|
||||||
self.modified = (ld.update(self.files) or self.modified)
|
self.modified = (ld.update(self.files) or self.modified)
|
||||||
except ldapupdate.BadSyntax, e:
|
except ldapupdate.BadSyntax as e:
|
||||||
root_logger.error('Bad syntax in upgrade %s' % str(e))
|
root_logger.error('Bad syntax in upgrade %s', e)
|
||||||
self.modified = False
|
raise
|
||||||
self.badsyntax = True
|
except Exception as e:
|
||||||
except Exception, e:
|
|
||||||
# Bad things happened, return gracefully
|
# Bad things happened, return gracefully
|
||||||
self.modified = False
|
root_logger.error('Upgrade failed with %s', e)
|
||||||
self.upgradefailed = True
|
|
||||||
root_logger.error('Upgrade failed with %s' % str(e))
|
|
||||||
root_logger.debug('%s', traceback.format_exc())
|
root_logger.debug('%s', traceback.format_exc())
|
||||||
|
raise RuntimeError(e)
|
||||||
|
Loading…
Reference in New Issue
Block a user