예제 #1
0
    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)
예제 #2
0
    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)