in azurelinuxagent/ga/exthandlers.py [0:0]
def _update_extension_handler_and_return_if_failed(old_ext_handler_i, ext_handler_i, extension=None):
def execute_old_handler_command_and_return_if_succeeds(func):
"""
Created a common wrapper to execute all commands that need to be executed from the old handler
so that it can have a common exception handling mechanism
:param func: The command to be executed on the old handler
:return: True if command execution succeeds and False if it fails
"""
continue_on_update_failure = False
exit_code = 0
try:
continue_on_update_failure = ext_handler_i.load_manifest().is_continue_on_update_failure()
func()
except ExtensionError as e:
# Reporting the event with the old handler and raising a new ExtensionUpdateError to set the
# handler status on the new version
msg = "%s; ContinueOnUpdate: %s" % (ustr(e), continue_on_update_failure)
old_ext_handler_i.report_event(message=msg, is_success=False)
if not continue_on_update_failure:
raise ExtensionUpdateError(msg)
exit_code = e.code
if isinstance(e, ExtensionOperationError):
exit_code = e.exit_code # pylint: disable=E1101
logger.info("Continue on Update failure flag is set, proceeding with update")
return exit_code
disable_exit_codes = defaultdict(lambda: NOT_RUN)
# We only want to disable the old handler if it is currently enabled; no other state makes sense.
if old_ext_handler_i.get_handler_state() == ExtHandlerState.Enabled:
# Corner case - If the old handler is a Single config Handler with no extensions at all,
# we should just disable the handler
if not old_ext_handler_i.supports_multi_config and not any(old_ext_handler_i.extensions):
disable_exit_codes[
old_ext_handler_i.ext_handler.name] = execute_old_handler_command_and_return_if_succeeds(
func=partial(old_ext_handler_i.disable, extension=None))
# Else we disable all enabled extensions of this handler
# Note: If MC is supported this will disable only enabled_extensions else it will disable all extensions
for old_ext in old_ext_handler_i.enabled_extensions:
disable_exit_codes[old_ext.name] = execute_old_handler_command_and_return_if_succeeds(
func=partial(old_ext_handler_i.disable, extension=old_ext))
ext_handler_i.copy_status_files(old_ext_handler_i)
if ext_handler_i.version_gt(old_ext_handler_i):
ext_handler_i.update(disable_exit_codes=disable_exit_codes,
updating_from_version=old_ext_handler_i.ext_handler.version,
extension=extension)
else:
updating_from_version = ext_handler_i.ext_handler.version
old_ext_handler_i.update(handler_version=updating_from_version,
disable_exit_codes=disable_exit_codes, updating_from_version=updating_from_version,
extension=extension)
uninstall_exit_code = execute_old_handler_command_and_return_if_succeeds(
func=partial(old_ext_handler_i.uninstall, extension=extension))
old_ext_handler_i.remove_ext_handler()
ext_handler_i.update_with_install(uninstall_exit_code=uninstall_exit_code, extension=extension)
return uninstall_exit_code