def runScanner(Framework): client = Framework.getConnectedClient() scannersConfigFile = Framework.getConfigFile( CollectorsConstants.SCANNERSBYPLATFORM_FILE_NAME) platform = Framework.getProperty(InventoryUtils.STATE_PROPERTY_PLATFORM) architecture = Framework.getProperty( InventoryUtils.STATE_PROPERTY_ARCHITECTURE) logger.debug('Platform:', platform, ' architecture ', architecture) scannerPlatformConfig = scannersConfigFile.getPlatformConfiguration( platform, architecture) BASEDIR = Framework.getProperty( InventoryUtils.STATE_PROPERTY_RESOLVED_BASEDIR) lockValue = Framework.getProperty(LockUtils.ScannerNodeLock) client_options = LockUtils.getClientOptionsMap(client) logger.debug('Settings agent options') options = HashMap() options.put(InventoryUtils.AGENT_OPTION_DISCOVERY_SCANFILENAME, '') options.put(LockUtils.ScannerNodeLock, lockValue) options.put(InventoryUtils.STATE_PROPERTY_EXECUTION_STARTED, str(System.currentTimeMillis())) logger.debug('Agent option ', InventoryUtils.AGENT_OPTION_DISCOVERY_SCANFILENAME, ':', '') logger.debug('Agent option ', LockUtils.ScannerNodeLock, ':', lockValue) logger.debug('Agent option ', InventoryUtils.STATE_PROPERTY_EXECUTION_STARTED, ':', str(System.currentTimeMillis())) filterOptionsByBlackList( client_options) #filter the options of client by black list client_options.putAll(options) client.setOptionsMap(client_options, 1) shell = shellutils.ShellUtils(client, skip_set_session_locale=True) shell.execCmd('cd ' + BASEDIR) runScannerCommand = scannerPlatformConfig.getRunScannerCommand() logger.debug('Launching scanner on remote machine') commandLine = runScannerCommand.getCommand() commandLine = updateCmdWithLogLevel(commandLine, Framework) commandLine = updateCmdForDeltaScanning(commandLine, Framework) commandLine = InventoryUtils.handleBaseDirPath(Framework, commandLine) commandLine = updateWithPrePostScriptCmd(Framework, commandLine) logger.debug('Scanner execution command:', commandLine) shell.execCmd(commandLine) logger.debug('Scanner Launched on remote machine') Framework.setStepExecutionStatus(WorkflowStepStatus.SUCCESS)
def runScanner(Framework): client = Framework.getConnectedClient() scannersConfigFile = Framework.getConfigFile(CollectorsConstants.SCANNERSBYPLATFORM_FILE_NAME) platform = Framework.getProperty(InventoryUtils.STATE_PROPERTY_PLATFORM) architecture = Framework.getProperty(InventoryUtils.STATE_PROPERTY_ARCHITECTURE) logger.debug('Platform:', platform, ' architecture ', architecture) scannerPlatformConfig = scannersConfigFile.getPlatformConfiguration(platform, architecture) BASEDIR = Framework.getProperty(InventoryUtils.STATE_PROPERTY_RESOLVED_BASEDIR) lockValue = Framework.getProperty(LockUtils.ScannerNodeLock) client_options = LockUtils.getClientOptionsMap(client) logger.debug('Settings agent options') options = HashMap() options.put(InventoryUtils.AGENT_OPTION_DISCOVERY_SCANFILENAME, '') options.put(LockUtils.ScannerNodeLock, lockValue) options.put(InventoryUtils.STATE_PROPERTY_EXECUTION_STARTED, str(System.currentTimeMillis())) logger.debug('Agent option ', InventoryUtils.AGENT_OPTION_DISCOVERY_SCANFILENAME, ':', '') logger.debug('Agent option ', LockUtils.ScannerNodeLock, ':', lockValue) logger.debug('Agent option ', InventoryUtils.STATE_PROPERTY_EXECUTION_STARTED, ':', str(System.currentTimeMillis())) filterOptionsByBlackList(client_options) #filter the options of client by black list client_options.putAll(options) client.setOptionsMap(client_options, 1) shell = shellutils.ShellUtils(client, skip_set_session_locale=True) shell.execCmd('cd ' + BASEDIR) runScannerCommand = scannerPlatformConfig.getRunScannerCommand() logger.debug('Launching scanner on remote machine') commandLine = runScannerCommand.getCommand() commandLine = updateCmdWithLogLevel(commandLine, Framework) commandLine = updateCmdForDeltaScanning(commandLine, Framework) commandLine = InventoryUtils.handleBaseDirPath(Framework, commandLine) commandLine = updateWithPrePostScriptCmd(Framework, commandLine) logger.debug('Scanner execution command:', commandLine) shell.execCmd(commandLine) logger.debug('Scanner Launched on remote machine') Framework.setStepExecutionStatus(WorkflowStepStatus.SUCCESS)
def upgradeScanner(Framework): scannersConfigFile = Framework.getConfigFile(CollectorsConstants.SCANNERSBYPLATFORM_FILE_NAME) platform = Framework.getProperty(InventoryUtils.STATE_PROPERTY_PLATFORM) architecture = Framework.getProperty(InventoryUtils.STATE_PROPERTY_ARCHITECTURE) logger.debug('Platform:', platform, ', architecture ', architecture) scannerPlatformConfig = scannersConfigFile.getPlatformConfiguration(platform, architecture) preUpgradeCmds = scannerPlatformConfig.getPreUpgradeCommands() client = Framework.getConnectedClient() shell = shellutils.ShellUtils(client, skip_set_session_locale=True) shouldScannerBeInstalled = 0 try: shouldScannerBeInstalled = shouldInstallScanner(scannerPlatformConfig, Framework, shell) except: errorMessage = str(sys.exc_info()[1]) if errorMessage.lower().find('timeout') != -1: logger.debug('Failed to check scanner version, scanner may be corrupted') # in some cases, getting timeout exception client persists get TimoutException on every next command # in order to overwhelm this behaviour disconnect and connect again # in this case (if we got timeout excepton) we assume that scanner was corrupted # so we will install/reinstall it anyway shouldScannerBeInstalled = 1 InventoryUtils.releaseConnection(Framework) InventoryUtils.acquireConnection(Framework) client = Framework.getConnectedClient() shell = shellutils.ShellUtils(client, skip_set_session_locale=True) logger.debug('Executing pre upgrade commands') for cmd in preUpgradeCmds: commandLine = cmd.getCommand() commandLine = InventoryUtils.handleBaseDirPath(Framework, commandLine) logger.debug('Running ', commandLine) shell.execCmd(commandLine) if shouldScannerBeInstalled: if not upgradeScannerExecutable(scannerPlatformConfig, Framework, shell): return else: if not ensureScannerExist(scannerPlatformConfig, Framework): return if not upgradeConfigFile(scannerPlatformConfig, Framework): return upgradePrePostScript(scannersConfigFile, scannerPlatformConfig, Framework) postUpgradeCmds = scannerPlatformConfig.getPostUpgradeCommands() logger.debug('Executing post upgrade commands') for cmd in postUpgradeCmds: commandLine = cmd.getCommand() commandLine = InventoryUtils.handleBaseDirPath(Framework, commandLine) logger.debug('Running ', commandLine) shell.execCmd(commandLine) Framework.setStepExecutionStatus(WorkflowStepStatus.SUCCESS)
def checkAgentInstalled(Framework, ignoreError=False): # Ensure we're disconnected InventoryUtils.releaseConnection(Framework) Framework.setProperty(AgentUtils.DOWNLOAD_INSTALL_LOG_FILE, AgentUtils.DOWNLOAD_INSTALL_LOG_FILE) if Framework.getProperty(FIRST_TRY_INSTALL_AGENT) is None: # we don't want immediately check whether agent installed or not, since for sure it is not. go to parking # to let others to install logger.debug('UD agent install command just run, will check after parking') Framework.setProperty(FIRST_TRY_INSTALL_AGENT, FIRST_TRY_INSTALL_AGENT) Framework.setStepExecutionStatus(WorkflowStepStatus.FAILURE) return else: logger.debug('Going to check whether agent already installed or not') # errorCode = AgentUtils.getInstallErrorCode(Framework) # if not errorCode.isSuccess(): # logger.debug('Failed to install agent.') # Framework.reportError(inventoryerrorcodes.INVENTORY_DISCOVERY_FAILED_AGENT_INSTALL, None) # Framework.setStepExecutionStatus(WorkflowStepStatus.FATAL_FAILURE) # return warningsList = [] errorsList = [] # When we migrate ddmi to uda, we already know what cred_id to use ddmiMigrationCredId = AgentUtils.getUdAgentProtocolForMigration(Framework) if ddmiMigrationCredId: conToUse = ddmiMigrationCredId.getIdAsString() else: conToUse = None agent = AgentUtils.agentConnect(Framework, conToUse, warningsList, errorsList) if not agent: if not ignoreError: for errobj in warningsList: logger.reportWarningObject(errobj) for errobj in errorsList: logger.reportErrorObject(errobj) Framework.reportError(inventoryerrorcodes.INVENTORY_DISCOVERY_ENSURE_CONNECTED_FAILED, ['Could not connect to the remote agent']) Framework.setStepExecutionStatus(WorkflowStepStatus.FAILURE) else: try: logger.debug('Connected to agent!!!!') # Check whether the agent is native agentsConfigFile = Framework.getConfigFile(CollectorsConstants.AGENTSSBYPLATFORM_FILE_NAME) platform = Framework.getProperty(InventoryUtils.STATE_PROPERTY_PLATFORM) architecture = Framework.getProperty(InventoryUtils.STATE_PROPERTY_ARCHITECTURE) agentPlatformConfig = agentsConfigFile.getPlatformConfiguration(platform, architecture) isNativeCmd = agentPlatformConfig.getIsNativeCmd() logger.debug('Native command is [' + str(isNativeCmd) + ']') if isNativeCmd and len(isNativeCmd) > 0: isNativeCmd = InventoryUtils.handleBaseDirPath(Framework, isNativeCmd) isNative = agent.executeCmd(isNativeCmd) if isNative != 'true': logger.debug('Could not verify whether the remote agent is native') Framework.reportError(inventoryerrorcodes.INVENTORY_DISCOVERY_ENSURE_CONNECTED_FAILED, ['Remote agent doesnt appear to be natively installed']) Framework.setStepExecutionStatus(WorkflowStepStatus.FAILURE) return # Reporting agent osh to framework Framework.setProperty(AgentUtils.DOWNLOAD_INSTALL_LOG_FILE, '') Framework.setProperty(InventoryUtils.STATE_PROPERTY_AGENT_INSTALLED, InventoryUtils.STATE_PROPERTY_AGENT_INSTALLED) AgentUtils.saveGlobalState(agent, Framework) OSHVResult = ObjectStateHolderVector() ip = Framework.getProperty(InventoryUtils.STATE_PROPERTY_CONNECTED_SHELL_IP) hostOsh = modeling.createHostOSH(ip) uduid = InventoryUtils.getUduid(agent) hostOsh.setStringAttribute(InventoryUtils.ATTR_UD_UNIQUE_ID, uduid) agentOsh = AgentUtils.createAgentOsh(agent, Framework) agentOsh.setContainer(hostOsh) OSHVResult.add(hostOsh) OSHVResult.add(agentOsh) Framework.sendObjects(OSHVResult) Framework.flushObjects() Framework.setStepExecutionStatus(WorkflowStepStatus.SUCCESS) finally: if agent: agent.close()