コード例 #1
0
ファイル: modulelog.py プロジェクト: anzarafaq/cronusagent
    def doManifestLogFile(action):
        """ do manifest log file """
        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 parameter from request'
            c.errorCode = Errors.LOG_PARAM_REQUIRED
            return render('/derived/error.html')
        print 'service/package/manifest ', service, package, manifest
        packagePathStr = packagePath(service, package, manifest)
        print 'package path ', packagePathStr
        pkgInit = PkgInitConfig(service, package, manifest)
        pkgConfig = pkgInit.getConfigs()
        if not pkgConfig:
            c.errorMsg = 'cronus.ini does not exist, view log needs cronus.ini to know log location, please check your cronus package to make sure cronus.ini exist and have property logAppDir'
            c.errorCode = Errors.CRONUS_INI_EMPTY_NOT_FOUND
            return render('/derived/error.html')
        print '*** packageConfig ', pkgConfig
        manifestFileName = pkgConfig['logManifestFile']
        if (action == 'download'):
            return downloadFile(os.path.join(packagePathStr, manifestFileName))
        if (action == 'tail'):
            lines = request.params.get('size', '100')
            return tailFile(os.path.join(packagePathStr, manifestFileName),
                            lines)
        if (action == 'list'):
            return manifestFileName
コード例 #2
0
ファイル: modulelog.py プロジェクト: anzarafaq/cronusagent
    def doManifestLogFile(action):
        """ do manifest log file """
        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 parameter from request'
            c.errorCode = Errors.LOG_PARAM_REQUIRED
            return render('/derived/error.html')
        print 'service/package/manifest ', service, package, manifest
        packagePathStr = packagePath(service, package, manifest)
        print 'package path ', packagePathStr
        pkgInit = PkgInitConfig(service, package, manifest)
        pkgConfig = pkgInit.getConfigs()
        if not pkgConfig:
            c.errorMsg = 'cronus.ini does not exist, view log needs cronus.ini to know log location, please check your cronus package to make sure cronus.ini exist and have property logAppDir'
            c.errorCode = Errors.CRONUS_INI_EMPTY_NOT_FOUND
            return render('/derived/error.html')
        print '*** packageConfig ', pkgConfig
        manifestFileName = pkgConfig['logManifestFile']
        if (action == 'download'):
            return downloadFile(os.path.join(packagePathStr, manifestFileName))
        if (action == 'tail'):
            lines = request.params.get('size', '100')
            return tailFile(os.path.join(packagePathStr, manifestFileName), lines)
        if (action == 'list'):
            return manifestFileName
コード例 #3
0
    def _obtainCmdExecThreads(self, exeName, service, manifest, activateFlow):
        """start the threads to execute cmd in each package in the service/manifest"""

        execThreads = []
        packages = ManifestController.getPackages(service,
                                                  os.path.basename(manifest))
        # Executing the deactivate in reversed order where the last package is first deactivated.
        if (not activateFlow):
            packages.reverse()

        # make sure there's something to do, otherwise just return here
        if (len(packages) == 0):
            return execThreads

        for package in packages:

            pkgPath = manifestutil.packagePath(service, manifest, package)
            pkgInit = PkgInitConfig(pkgPath)
            pkgConfig = pkgInit.getConfigs()

            # check command type and package startup process
            if (exeName == 'reboot' or exeName == 'restart'):

                # default action for reboot is to startup, noop for restart agent
                action = 'startup' if 'reboot' == exeName else 'noop'

                if exeName == 'reboot' and pkgConfig and pkgConfig.has_key(
                        'lcm_on_system_reboot'):
                    action = pkgConfig['lcm_on_system_reboot']

                if (exeName == 'restart' and pkgConfig
                        and pkgConfig.has_key('lcm_on_agent_restart')):
                    action = pkgConfig['lcm_on_agent_restart']

                if action == 'reset':
                    execThread, dummy = self._getBuiltThread(
                        service, manifest, package, "shutdown")
                    execThreads.append([execThread, dummy])
                    execThread, dummy = self._getBuiltThread(
                        service, manifest, package, "deactivate")
                    execThreads.append([execThread, dummy])
                    execThread, dummy = self._getBuiltThread(
                        service, manifest, package, "activate")
                    execThreads.append([execThread, dummy])

                if (action == 'reset' or action == 'startup'):
                    execThread, dummy = self._getBuiltThread(
                        service, manifest, package, 'startup')
                    execThreads.append([execThread, dummy])

            else:
                execThread, dummy = self._getBuiltThread(
                    service, manifest, package, exeName)
                execThreads.append([execThread, dummy])

        return execThreads
コード例 #4
0
ファイル: modulelog.py プロジェクト: anzarafaq/cronusagent
    def doAppLogFile(action):
        """ 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 parameter from request'
            c.errorCode = Errors.LOG_PARAM_REQUIRED
            return render('/derived/error.html')
        packagePathStr = packagePath(service, manifest, package)
        if (not os.path.isdir(packagePathStr)):
            return ModulelogController.listManifests(service)
        LOG.info('In ModuleLogController doAppLogFile ' + packagePathStr)
        pkgInit = PkgInitConfig(service, manifest, package)
        pkgConfig = pkgInit.getConfigs()
        if not pkgConfig:
            c.errorMsg = 'cronus.ini does not exist, view log needs cronus.ini to know log location, please check your cronus package to make sure cronus.ini exist and have property logAppDir'
            c.errorCode = Errors.CRONUS_INI_EMPTY_NOT_FOUND
            return render('/derived/error.html')
        logAppDirList = pkgConfig['logAppDir']

        dirName = request.params.get('dirName', '')
        fileName = request.params.get('fileName', '')

        if (action == 'list'):
            if (fileName != '' and dirName != ''):
                dirName = os.path.join(dirName, fileName)
            if (dirName != ''):
                return ModulelogController.listAppLogDir(
                    service, manifest, package, dirName,
                    os.path.join(packagePathStr, dirName))
            else:
                return ModulelogController.listAllAppLogDir(
                    service, manifest, package, dirName, packagePathStr,
                    logAppDirList)

        if (dirName == '' or fileName == ''):
            c.errorMsg = 'tail/download App log requires dirName & FileName params missing'
            c.errorCode = Errors.NOT_ENOUGH_PARAMS
            return render('/derived/error.html')

        if (action == 'tail'):
            lines = request.params.get('size', '100')
            return tailFile(os.path.join(packagePathStr, dirName, fileName),
                            lines)

        if (action == 'download'):
            return downloadFile(os.path.join(packagePathStr, dirName,
                                             fileName))
コード例 #5
0
    def _obtainCmdExecThreads(self, exeName, service, manifest, activateFlow):
        """start the threads to execute cmd in each package in the service/manifest"""

        execThreads = []
        packages = ManifestController.getPackages(service, os.path.basename(manifest))
        # Executing the deactivate in reversed order where the last package is first deactivated.
        if (not activateFlow):
            packages.reverse()

        # make sure there's something to do, otherwise just return here
        if (len(packages) == 0):
            return execThreads
        
        for package in packages:

            pkgPath = manifestutil.packagePath(service, manifest, package)
            pkgInit = PkgInitConfig(pkgPath)
            pkgConfig = pkgInit.getConfigs()
                
                
            # check command type and package startup process
            if (exeName == 'reboot' or exeName == 'restart'):
                
                # default action for reboot is to startup, noop for restart agent
                action = 'startup' if 'reboot' == exeName else 'noop'
                
                if exeName == 'reboot' and pkgConfig and pkgConfig.has_key('lcm_on_system_reboot'):
                    action = pkgConfig['lcm_on_system_reboot']
                            
                if (exeName == 'restart' and pkgConfig and pkgConfig.has_key('lcm_on_agent_restart')):
                    action = pkgConfig['lcm_on_agent_restart']
                        
                if action == 'reset':
                    execThread, dummy = self._getBuiltThread(service, manifest, package, "shutdown")
                    execThreads.append([execThread, dummy])
                    execThread, dummy = self._getBuiltThread(service, manifest, package, "deactivate")
                    execThreads.append([execThread, dummy])
                    execThread, dummy = self._getBuiltThread(service, manifest, package, "activate")
                    execThreads.append([execThread, dummy])
                    
                if (action == 'reset' or action == 'startup'):
                    execThread, dummy = self._getBuiltThread(service, manifest, package, 'startup')
                    execThreads.append([execThread, dummy])
            
            else:
                execThread, dummy = self._getBuiltThread(service, manifest, package, exeName)
                execThreads.append([execThread, dummy])
                
        return execThreads
コード例 #6
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)
コード例 #7
0
ファイル: applog.py プロジェクト: cronuspaas/cronusagent
    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)
コード例 #8
0
ファイル: modulelog.py プロジェクト: anzarafaq/cronusagent
    def doAppLogFile(action):
        """ 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 parameter from request'
            c.errorCode = Errors.LOG_PARAM_REQUIRED
            return render('/derived/error.html')
        packagePathStr = packagePath(service, manifest, package)
        if (not os.path.isdir(packagePathStr)):
            return ModulelogController.listManifests(service)
        LOG.info('In ModuleLogController doAppLogFile ' + packagePathStr)
        pkgInit = PkgInitConfig(service, manifest, package)
        pkgConfig = pkgInit.getConfigs()
        if not pkgConfig:
            c.errorMsg = 'cronus.ini does not exist, view log needs cronus.ini to know log location, please check your cronus package to make sure cronus.ini exist and have property logAppDir'
            c.errorCode = Errors.CRONUS_INI_EMPTY_NOT_FOUND
            return render('/derived/error.html')
        logAppDirList = pkgConfig['logAppDir']

        dirName = request.params.get('dirName', '')
        fileName = request.params.get('fileName', '')

        if (action == 'list'):
            if (fileName != '' and dirName != ''):
                dirName = os.path.join(dirName, fileName)
            if (dirName != ''):
                return ModulelogController.listAppLogDir(service, manifest, package, dirName, os.path.join(packagePathStr, dirName))
            else:
                return ModulelogController.listAllAppLogDir(service, manifest, package, dirName, packagePathStr, logAppDirList)

        if (dirName == '' or fileName == ''):
            c.errorMsg = 'tail/download App log requires dirName & FileName params missing'
            c.errorCode = Errors.NOT_ENOUGH_PARAMS
            return render('/derived/error.html')

        if (action == 'tail'):
            lines = request.params.get('size', '100')
            return tailFile(os.path.join(packagePathStr, dirName, fileName), lines)
            
        if (action == 'download'):
            return downloadFile(os.path.join(packagePathStr, dirName, fileName))