def unInstallAgent(Framework): protocolName = Framework.getProperty(InventoryUtils.STATE_PROPERTY_CONNECTED_SHELL_PROTOCOL_NAME) logger.debug('Protocal name: ', protocolName) client = Framework.getConnectedClient() uduid = InventoryUtils.getUduid(client) logger.debug('UD_UNIQUE_ID: ', uduid) Framework.setProperty(InventoryUtils.ATTR_UD_UNIQUE_ID, uduid) if protocolName == ClientsConsts.DDM_AGENT_PROTOCOL_NAME: # Should release lock first if there will be no connected credential after agent uninstallation. logger.debug('The connected credential is UDA. Try to release lock first.') LockUtils.releaseScannerLock(Framework) if AgentUtils.isAgentInstalled(Framework): logger.debug('There is an agent in remote machine.') # Run uninstall command. shouldStop = AgentUtils.agentUnInstallRoutine(Framework) if shouldStop != 0: Framework.setStepExecutionStatus(WorkflowStepStatus.FATAL_FAILURE) logger.debug('Failed to uninstall agent.') else: logger.debug('There is no agent in remote machine. The job will be done.') reason = 'There is no agent in remote machine' Framework.setProperty(InventoryUtils.generateSkipStep('Check Agent UnInstalled'), reason) Framework.setStepExecutionStatus(WorkflowStepStatus.SUCCESS)
def unInstallAgent(Framework): protocolName = Framework.getProperty( InventoryUtils.STATE_PROPERTY_CONNECTED_SHELL_PROTOCOL_NAME) logger.debug('Protocal name: ', protocolName) client = Framework.getConnectedClient() uduid = InventoryUtils.getUduid(client) logger.debug('UD_UNIQUE_ID: ', uduid) Framework.setProperty(InventoryUtils.ATTR_UD_UNIQUE_ID, uduid) if protocolName == ClientsConsts.DDM_AGENT_PROTOCOL_NAME: # Should release lock first if there will be no connected credential after agent uninstallation. logger.debug( 'The connected credential is UDA. Try to release lock first.') LockUtils.releaseScannerLock(Framework) if AgentUtils.isAgentInstalled(Framework): logger.debug('There is an agent in remote machine.') # Run uninstall command. shouldStop = AgentUtils.agentUnInstallRoutine(Framework) if shouldStop != 0: Framework.setStepExecutionStatus(WorkflowStepStatus.FATAL_FAILURE) logger.debug('Failed to uninstall agent.') else: logger.debug( 'There is no agent in remote machine. The job will be done.') reason = 'There is no agent in remote machine' Framework.setProperty( InventoryUtils.generateSkipStep('Check Agent UnInstalled'), reason) Framework.setStepExecutionStatus(WorkflowStepStatus.SUCCESS)
def releaseScannerLock(Framework): logger.debug('Starting Unlock Scanner Node step') logger.debug("Start checking ud_unique_id...") client = Framework.getConnectedClient() if client: uduid = InventoryUtils.getUduid( client, InventoryUtils.isStampEnabled(Framework, client.getIpAddress())) Framework.setProperty(InventoryUtils.ATTR_UD_UNIQUE_ID, uduid) if not LockUtils.releaseScannerLock(Framework): Framework.setStepExecutionStatus(WorkflowStepStatus.FAILURE) else: logger.debug('Unlock Scanner Node step finished') Framework.setProperty(LockUtils.ScannerNodeUnSetLock, LockUtils.ScannerNodeUnSetLock) Framework.setStepExecutionStatus(WorkflowStepStatus.SUCCESS) logger.debug('Releasing connection after unlock scan node') InventoryUtils.releaseConnection(Framework)
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()