in azurelinuxagent/ga/exthandlers.py [0:0]
def _cleanup_outdated_handlers(self):
# Skip cleanup if the previous GS was Unsupported
if self.__last_gs_unsupported():
return
handlers = []
pkgs = []
ext_handlers_in_gs = [ext_handler.name for ext_handler in self.ext_handlers]
# Build a collection of uninstalled handlers and orphaned packages
# Note:
# -- An orphaned package is one without a corresponding handler
# directory
for item, path in list_agent_lib_directory(skip_agent_package=True):
try:
handler_instance = ExtHandlersHandler.get_ext_handler_instance_from_path(name=item,
path=path,
protocol=self.protocol,
skip_handlers=ext_handlers_in_gs)
if handler_instance is not None:
# Since this handler name doesn't exist in the GS, marking it for deletion
handlers.append(handler_instance)
continue
except Exception:
continue
if os.path.isfile(path) and \
not os.path.isdir(path[0:-len(HANDLER_PKG_EXT)]):
if not re.match(_HANDLER_PKG_PATTERN, item):
continue
pkgs.append(path)
# Then, remove the orphaned packages
for pkg in pkgs:
try:
os.remove(pkg)
logger.verbose("Removed orphaned extension package {0}".format(pkg))
except OSError as e:
logger.warn("Failed to remove orphaned package {0}: {1}".format(pkg, e.strerror))
# Finally, remove the directories and packages of the orphaned handlers, i.e. Any extension directory that
# is still in the FileSystem but not in the GoalState
for handler in handlers:
handler.remove_ext_handler()
pkg = os.path.join(conf.get_lib_dir(), handler.get_full_name() + HANDLER_PKG_EXT)
if os.path.isfile(pkg):
try:
os.remove(pkg)
logger.verbose("Removed extension package {0}".format(pkg))
except OSError as e:
logger.warn("Failed to remove extension package {0}: {1}".format(pkg, e.strerror))