def __postActivation(self, service, manifest, curProg): """ place to run post activation operations 1. customize application configuration files based on metadata 2. install upstart service """ # replace application config files based on lcm_meta.env, "env" valeu set in post request for package in packagesInManifest(service, manifest): self._LOG.info('check map config files in %s' % (package)) pkgRoot = packagePath(service, ACTIVE_MANIFEST, package) pkgCfg = PkgInitConfig(pkgRoot) # read cfgfilemap from cronus.ini env = serviceutil.getEnv(service) if env: cfgFiles = pkgCfg.getConfig(PkgInitConfig.KEY_CFGFILES, []) for cfgFile in cfgFiles: srcFile = os.path.join(pkgRoot, '%s.%s' % (cfgFile, env.lower())) destFile = os.path.join(pkgRoot, cfgFile) if os.path.exists(srcFile): self._LOG.info('copy cfg file %s to %s' % (srcFile, destFile)) cmd = utils.sudoCmd(['cp', '-f', srcFile, destFile], configutil.getAppUser()) execThread = ExecThread(self._threadMgr, cmd, None, self.getUuid()) self._runExecThreads([execThread], curProg, curProg+1) # install daemon based on metadata.lcm_meta.daemon isDaemon, daemonType = serviceutil.isDaemonServiceWisb(service) if isDaemon: installed = False self._LOG.info('daemon enabled, setup service in %s' % daemonType) for package in packagesInManifest(service, manifest): pkgRoot = packagePath(service, ACTIVE_MANIFEST, package) appUser = configutil.getAppUser() if (os.path.exists(os.path.join(pkgRoot, 'cronus', 'upstart.conf')) or os.path.exists(os.path.join(pkgRoot, 'cronus', 'systemd.service'))): self._LOG.info('found daemon config in %s' % (package)) script = manifestutil.getActiveScriptPath('agent', 'agent', 'setupserviced') cmd = utils.sudoCmd([script, pkgRoot, appUser, service, daemonType]) execThread = ExecThread(self._threadMgr, cmd, None, self.getUuid()) self._runExecThreads([execThread], curProg+1, curProg+2) installed = True break if not installed: self._LOG.info('daemon config not found, service not installed') serviceutil.setDaemonServiceWisb(service, None)
def doAppLogFile(): """ listAppLog """ service = request.params.get('service', '') package = request.params.get('package', '') manifest = request.params.get('manifest', 'active') if (service == '' or package == ''): c.errorMsg = 'Missing service or package from request' c.errorCode = Errors.LOG_PARAM_REQUIRED return render('/derived/error.html') packagePathStr = packagePath(service, manifest, package) if (not os.path.isdir(packagePathStr)): c.errorMsg = 'Invalid service, manifest, or package from request' c.errorCode = Errors.LOG_PARAM_REQUIRED return render('/derived/error.html') LOG.debug('In ApplogController doAppLogFile ' + packagePathStr) pkgPath = packagePath(service, manifest, package) pkgInit = PkgInitConfig(pkgPath) logDirList = pkgInit.getConfig(PkgInitConfig.KEY_LOGDIRS) if not logDirList: c.errorMsg = 'No cronus.ini in package, please check your cronus package to make sure cronus.ini exist and have property logDirs' c.errorCode = Errors.CRONUS_INI_EMPTY_NOT_FOUND return render('/derived/error.html') dirName = request.params.get('dirName', '') fileName = request.params.get('fileName', '') if (fileName != '' and dirName != ''): dirName = os.path.join(dirName, fileName) if (dirName != ''): return ApplogController.listAppLogDir(service, manifest, package, dirName, os.path.join(packagePathStr, dirName)) else: return ApplogController.listAllAppLogDir(service, manifest, package, dirName, packagePathStr, logDirList)