def delete(self, service): """ Delete a new service object """ from agent.lib.agent_thread.service_delete import ServiceDelete try: LOG.info('Got a delete request for service ' + service) path = ServiceController.servicePath(service) if (not os.path.exists(path) and not os.path.isdir(path)): return errorResult(request, response, Errors.SERVICE_NOT_FOUND, "No service(%s) found" % service, controller = self) # see if active manifest exist for the service if manifestutil.hasActiveManifest(service): return errorResult(request, response, Errors.MANIFEST_DELETING_ACTIVE_MANIFEST, 'Active manifest exists for service %s, deactivate the manifest first before deleting service' % (service), controller = self) # start the delete thread appGlobal = config['pylons.app_globals'] deleteThread = ServiceDelete(appGlobal.threadMgr, service, path) self.injectJobCtx(deleteThread) deleteThread.start() deleteThread.threadMgrEvent.wait() return statusResult(request, response, deleteThread, controller = self) except Exception as excep: return errorResult(request, response, error = Errors.UNKNOWN_ERROR, errorMsg = 'Unknown error when deleting service(%s) %s - %s' % (service, str(excep), traceback.format_exc(2)), controller = self)
def __deleteServices(self): """ delete all services except agent itself; clear all manifests in 'agent' itself except current active""" self._updateStatus(progress = 60) services = ServiceController.getServices() #kill all service threads self._threadMgr.stopServiceThread() #remove folder for service in services: if 'agent' == service: self.__delAllExceptActiveManifests(service) continue path = ServiceController.servicePath(service) # retry service cleanup for _ in range(3): if not os.path.exists(path): break ServiceDelete.deleteFolderContents(path) # sleep here a bit to ensure delete is complete time.sleep(1) if os.path.exists(path): msg = 'Could not delete service %s completely even after 3 retries.' % service LOG.error(msg) raise Exception(msg) self._updateStatus(progress = 90)
def __delAllExceptActiveManifests(self, service): ''' Delete all manifests in the given service except active link and corresponding manifest (if one exists). Doesn't delete the corresponding dir in installed-packages (similar to 'delete manifest') ''' manifests = manifestutil.getManifests(service) active = manifestutil.getActiveManifest(service) if active and len(active) != 0: # 'active' can be none manifests.remove(active) for mft in manifests: mf_path = manifestutil.manifestPath(service, mft) ServiceDelete.deleteFolderContents(mf_path)
def cleanupInstalledPkgs(installedPkgPath, orphanPkgs): '''removes folders under installed-packages which does not have any manifest reference''' from agent.lib.agent_thread.service_delete import ServiceDelete import time #import pdb; pdb.set_trace() for pkg in orphanPkgs: if (os.path.exists(pkg) and (time.time() > (os.path.getctime(pkg) + float(pylons.config['packageMgr_install_package_min_age'])))): parentPkg = os.path.dirname(pkg) try : LOG.info('Garbage collecting folder contents of package %s' % pkg) ServiceDelete.deleteFolderContents(pkg) if os.listdir(parentPkg).__len__() <= 0: ServiceDelete.deleteFolderContents(parentPkg) LOG.info('attempting to delete folder contents of package %s' % parentPkg) except Exception as ex: LOG.error('Unable to garbage collect %s - %s' % (pkg, ex)) LOG.info('Completed cleanup Installed pkg %s' % pkg)
def __deleteService(self, service): """ delete all services except agent itself; clear all manifests in 'agent' itself except current active""" self._updateStatus(progress = 60) #remove folder path = manifestutil.servicePath(service) # retry service cleanup for _ in range(3): if not os.path.exists(path): break ServiceDelete.deleteFolderContents(path) # sleep here a bit to ensure delete is complete time.sleep(1) if os.path.exists(path): msg = 'Could not delete service %s completely even after 3 retries.' % service LOG.error(msg) raise Exception(msg) self._updateStatus(progress = 90)
def cleanRogueService(): """ delete rogue services """ try: services = manifestutil.getServices() for service in services: path = manifestutil.servicePath(service) for idx in range(3): if os.path.exists(os.path.join(path, 'manifests')): break time.sleep(2) if idx == 2: appGlobal = pylons.config['pylons.app_globals'] LOG.info('service %s does not have manifests folder, cleanup the rogue service' % service) deleteThread = ServiceDelete(appGlobal.threadMgr, service, path) deleteThread.run() LOG.info('service %s cleaned up' % service) break except Exception: LOG.error('failed to check and cleanup rogue service' + traceback.format_exc(5))
def cleanupPackages(orphanpkgs): '''removes folders under installed-packages which does not have any manifest reference. Age is not a factor for cleanup. All orphans are cleaned-up Need to check for packages of interest(packages for which create is going on etc. ''' from agent.lib.agent_thread.service_delete import ServiceDelete import time for pkg in orphanpkgs: LOG.debug('attempting to cleanup Installed pkg %s' % pkg) if (os.path.exists(pkg) and (time.time() > (os.path.getctime(pkg) + float(pylons.config['packageMgr_install_package_min_age'])))): parentPkg = os.path.dirname(pkg) try : LOG.debug('attempting to delete folder contents of package %s' % pkg) ServiceDelete.deleteFolderContents(pkg) if os.listdir(parentPkg).__len__() <= 0: ServiceDelete.deleteFolderContents(parentPkg) LOG.debug('attempting to delete folder contents of package %s' % parentPkg) except Exception as ex: LOG.error('Unable to garbage collect %s - %s' % (pkg, ex))
def cleanupInstalledPkgs(installedPkgPath, orphanPkgs): '''removes folders under installed-packages which does not have any manifest reference''' from agent.lib.agent_thread.service_delete import ServiceDelete import time #import pdb; pdb.set_trace() for pkg in orphanPkgs: if (os.path.exists(pkg) and (time.time() > (os.path.getctime(pkg) + float( pylons.config['packageMgr_install_package_min_age'])))): parentPkg = os.path.dirname(pkg) try: LOG.info( 'Garbage collecting folder contents of package %s' % pkg) ServiceDelete.deleteFolderContents(pkg) if os.listdir(parentPkg).__len__() <= 0: ServiceDelete.deleteFolderContents(parentPkg) LOG.info( 'attempting to delete folder contents of package %s' % parentPkg) except Exception as ex: LOG.error('Unable to garbage collect %s - %s' % (pkg, ex)) LOG.info('Completed cleanup Installed pkg %s' % pkg)
def __cleanupShareFolder(self): """ cleanup all files in share folder, """ shareFolder = ServiceController.shareFolderPath() ServiceDelete.deleteFolderContents(shareFolder, onlyChildren=True)
def __deletePackages(self): """ delete all packages from pakcage directory """ package_path = PackageMgr.packagePath() ServiceDelete.deleteFolderContents(package_path, onlyChildren=True)
def __deletePackages(self): """ delete all packages from pakcage directory """ package_path = PackageMgr.packagePath() ServiceDelete.deleteFolderContents(package_path, onlyChildren = True)
def __cleanupShareFolder(self): """ cleanup all files in share folder, """ shareFolder = ServiceController.shareFolderPath() ServiceDelete.deleteFolderContents(shareFolder, onlyChildren = True)