def findTnsnamesOra(localClient, p2pDict, dbDict, isWindows, installLocs): try: ## Locals searchLocations = [] # Try locations in the database dictionary if len(dbDict) > 0: logger.debug('dbDict locations') for sid in dbDict.keys(): if (dbDict[sid])[dbconnect_utils.PATH_INDEX] != dbconnect_utils.UNKNOWN: path = (dbDict[sid])[dbconnect_utils.PATH_INDEX].lower() if path in searchLocations: dbconnect_utils.debugPrint(3, '[' + SCRIPT_NAME + ':findTnsnamesOra] [1] <%s> already in search locations' % path) continue elif path.find('\\') > 0 or path.find('/') >= 0: dbconnect_utils.debugPrint(2, '[' + SCRIPT_NAME + ':findTnsnamesOra] [1] Adding <%s> to search locations' % path) searchLocations.append(path) else: dbconnect_utils.debugPrint(3, '[' + SCRIPT_NAME + ':findTnsnamesOra] [1] <%s> is not a valid path' % path) continue # Try locations in the p2p dictionary if len(p2pDict) > 0: logger.debug('p2pDict locations') for pid in p2pDict.keys(): processName = (p2pDict[pid])[dbconnect_utils.PROCESSNAME_INDEX].lower() path = (p2pDict[pid])[dbconnect_utils.PATH_INDEX].lower() if re.search('tns', processName) or re.search('dbconsole', processName) or re.search('jobscheduler', processName) or re.search('oradb', processName) or re.search('oracle', processName) or re.search('ora_', processName): ## Remove /bin/tnslsnr from TNS process path if re.search('/bin/tnslsnr', path): path = path[:path.find('/bin/tnslsnr')] if path in searchLocations: dbconnect_utils.debugPrint(3, '[' + SCRIPT_NAME + ':findTnsnamesOra] [2] <%s> already in search locations' % path) continue elif path.find('\\') > 0 or path.find('/') >= 0: dbconnect_utils.debugPrint(3, '[' + SCRIPT_NAME + ':findTnsnamesOra] [2] Adding <%s> to search locations' % path) searchLocations.append(path) else: dbconnect_utils.debugPrint(3, '[' + SCRIPT_NAME + ':findTnsnamesOra] [2] <%s> is not a valid path' % path) continue # If we have no search locations so far, try some known/standard ones if 1: #len(searchLocations) < 1: if isWindows == 'true': logger.debug('additional locations') searchLocations.append('%HOMEDRIVE%\oracle') searchLocations.append('%SYSTEMDRIVE%\oracle') searchLocations.append('%PROGRAMFILES%\oracle') searchLocations.append('%PROGRAMFILES(x86)%\oracle') searchLocations.append('%ORA_HOME%') searchLocations.append('%ORACLE_HOME%') #searchLocations.append('%ORACLE_HOME%\\network\\admin') else: searchLocations.append('/u01') searchLocations.append('/u02') searchLocations.append('/opt') searchLocations.append('/usr/local') searchLocations.append('$ORACLE_HOME') #searchLocations.append('$ORACLE_HOME/network/admin') searchLocations.append('$ORA_HOME') searchLocations.append('$ORACLE_BASE') # Add oracle paths found from other sources if installLocs and len(installLocs) > 0: logger.debug('other locations') for installLoc in installLocs: if installLoc and len(installLoc) > 0: dbconnect_utils.debugPrint(3, '[' + SCRIPT_NAME + ':findTnsnamesOra] [3] Adding <%s> to search locations' % installLoc) searchLocations.append(installLoc) logger.debug('list of locations...') for location in searchLocations: logger.debug('*** location: ', location) # Search filesystem and parse tnsnames.ora entries for location in searchLocations: tnsnamesLocations = dbconnect_utils.findFile(localClient, 'tnsnames.ora', location, isWindows) if tnsnamesLocations == None: dbconnect_utils.debugPrint(3, '[' + SCRIPT_NAME + ':findTnsnamesOra] No tnsnames.ora found in <%s>' % location) continue for tnsnamesLocation in tnsnamesLocations: # We don't want the sample TNSNAMES.ORA which is # installed by default if re.search('sample', tnsnamesLocation.lower()): dbconnect_utils.debugPrint(3, '[' + SCRIPT_NAME + ':findTnsnamesOra] Skipping sample tnsnames.ora in <%s>' % tnsnamesLocation) continue tnsnamesContent = dbconnect_utils.getFileContent(localClient, tnsnamesLocation, isWindows) dbconnect_utils.debugPrint(4, '[' + SCRIPT_NAME + ':findTnsnamesOra] Got content of <%s>: <%s>' % (tnsnamesLocation, tnsnamesContent)) if tnsnamesContent != None or tnsnamesContent != '' or len(tnsnamesContent) <1: tnsEntries = dbutils.parseTNSNames(tnsnamesContent, '') for tnsEntry in tnsEntries: sidFound = tnsEntry[3].strip().lower() ## Truncate domain name if this is fully qualified SID if sidFound.find('.') > 0: shortSID = sidFound[:sidFound.find('.')] dbconnect_utils.debugPrint(4, '[' + SCRIPT_NAME + ':findTnsnamesOra] Stripping domain from SID <%s> to <%s>' % (sidFound, shortSID)) sidFound = shortSID tnslsnrPort = tnsEntry[2].strip().lower() ipAddress = dbconnect_utils.fixIP(tnsEntry[5].strip().lower(), localClient.getIpAddress()) if ipAddress == dbconnect_utils.UNKNOWN: dbconnect_utils.debugPrint('[' + SCRIPT_NAME + ':findTnsnamesOra] Skipping instance <%s> listening at port <%s> because it\'s IP address is not valid' % (sidFound, tnslsnrPort)) continue if sidFound in dbDict.keys(): installPath = (dbDict[sidFound])[dbconnect_utils.PATH_INDEX] version = (dbDict[sidFound])[dbconnect_utils.VERSION_INDEX] statusFlag = (dbDict[sidFound])[dbconnect_utils.STATUS_INDEX] # If port and IP are already populated, don't overwrite them # because this information from active processes (above) is # guaranteed to be correct and tnsnames.ora may not be up-to-date ## Vinay 01/04/2010 - Commenting out conditional update below ## because the port and IP for an Oracle instance is not on the Oracle ## process but on the TNS listener process which may be listening for ## multiple instances on different ports. This makes associating an ## Oracle instance to its corresponding port impossible. ## So any ports found in TNSnames.ora will be used to overwrite ## previously found ports # if (dbDict[sidFound])[dbconnect_utils.PORT_INDEX] != dbconnect_utils.UNKNOWN: # tnslsnrPort = (dbDict[sidFound])[dbconnect_utils.PORT_INDEX] # if (dbDict[sidFound])[dbconnect_utils.IP_INDEX] != dbconnect_utils.UNKNOWN: # ipAddress = (dbDict[sidFound])[dbconnect_utils.IP_INDEX] dbDict[sidFound] = ['oracle', tnslsnrPort, ipAddress, installPath, version, statusFlag] dbconnect_utils.debugPrint(3, '[' + SCRIPT_NAME + ':findTnsnamesOra] Found known Oracle instance <%s> listening at port <%s> on <%s>' % (sidFound, tnslsnrPort, ipAddress)) # Don't want to add non running databases - Daniel La # else: # dbDict[sidFound] = ['oracle', tnslsnrPort, ipAddress, dbconnect_utils.UNKNOWN, dbconnect_utils.UNKNOWN, dbconnect_utils.UNKNOWN] # dbconnect_utils.debugPrint(3, '[' + SCRIPT_NAME + ':findTnsnamesOra] Added Oracle instance <%s> listening at port <%s> on <%s>' % (sidFound, tnslsnrPort, ipAddress)) else: logger.debug('[' + SCRIPT_NAME + ':findTnsnamesOra] Invalid TNSNAMES.ORA at <%s>: <%s>' % (tnsnamesLocation, tnsnamesContent)) except: excInfo = logger.prepareJythonStackTrace('') dbconnect_utils.debugPrint('[' + SCRIPT_NAME + ':findTnsnamesOra] Exception: <%s>' % excInfo) pass
def findTnsnamesOra(localClient, p2pDict, dbDict, isWindows, installLocs): try: ## Locals searchLocations = [] # Try locations in the database dictionary if len(dbDict) > 0: for sid in dbDict.keys(): if (dbDict[sid])[dbconnect_utils.PATH_INDEX] != dbconnect_utils.UNKNOWN: path = (dbDict[sid])[dbconnect_utils.PATH_INDEX].lower() if path in searchLocations: dbconnect_utils.debugPrint(3, '[' + SCRIPT_NAME + ':findTnsnamesOra] [1] <%s> already in search locations' % path) continue elif path.find('\\') > 0 or path.find('/') >= 0: dbconnect_utils.debugPrint(2, '[' + SCRIPT_NAME + ':findTnsnamesOra] [1] Adding <%s> to search locations' % path) searchLocations.append(path) else: dbconnect_utils.debugPrint(3, '[' + SCRIPT_NAME + ':findTnsnamesOra] [1] <%s> is not a valid path' % path) continue # Try locations in the p2p dictionary if len(p2pDict) > 0: for pid in p2pDict.keys(): processName = (p2pDict[pid])[dbconnect_utils.PROCESSNAME_INDEX].lower() path = (p2pDict[pid])[dbconnect_utils.PATH_INDEX].lower() if re.search('tns', processName) or re.search('dbconsole', processName) or re.search('jobscheduler', processName) or re.search('oradb', processName) or re.search('oracle', processName) or re.search('ora_', processName): ## Remove /bin/tnslsnr from TNS process path if re.search('/bin/tnslsnr', path): path = path[:path.find('/bin/tnslsnr')] if path in searchLocations: dbconnect_utils.debugPrint(3, '[' + SCRIPT_NAME + ':findTnsnamesOra] [2] <%s> already in search locations' % path) continue elif path.find('\\') > 0 or path.find('/') >= 0: dbconnect_utils.debugPrint(3, '[' + SCRIPT_NAME + ':findTnsnamesOra] [2] Adding <%s> to search locations' % path) searchLocations.append(path) else: dbconnect_utils.debugPrint(3, '[' + SCRIPT_NAME + ':findTnsnamesOra] [2] <%s> is not a valid path' % path) continue # If we have no search locations so far, try some known/standard ones if 1: #len(searchLocations) < 1: if isWindows == 'true': searchLocations.append('%HOMEDRIVE%\oracle') searchLocations.append('%SYSTEMDRIVE%\oracle') searchLocations.append('%PROGRAMFILES%\oracle') searchLocations.append('%PROGRAMFILES(x86)%\oracle') searchLocations.append('%ORA_HOME%') searchLocations.append('%ORACLE_HOME%') #searchLocations.append('%ORACLE_HOME%\\network\\admin') else: searchLocations.append('/u01') searchLocations.append('/u02') searchLocations.append('/opt') searchLocations.append('/usr/local') searchLocations.append('$ORACLE_HOME') #searchLocations.append('$ORACLE_HOME/network/admin') searchLocations.append('$ORA_HOME') searchLocations.append('$ORACLE_BASE') # Add oracle paths found from other sources if installLocs and len(installLocs) > 0: for installLoc in installLocs: if installLoc and len(installLoc) > 0: dbconnect_utils.debugPrint(3, '[' + SCRIPT_NAME + ':findTnsnamesOra] [3] Adding <%s> to search locations' % installLoc) searchLocations.append(installLoc) # Search filesystem and parse tnsnames.ora entries for location in searchLocations: tnsnamesLocations = dbconnect_utils.findFile(localClient, 'tnsnames.ora', location, isWindows) if tnsnamesLocations == None: dbconnect_utils.debugPrint(3, '[' + SCRIPT_NAME + ':findTnsnamesOra] No tnsnames.ora found in <%s>' % location) continue for tnsnamesLocation in tnsnamesLocations: # We don't want the sample TNSNAMES.ORA which is # installed by default if re.search('sample', tnsnamesLocation.lower()): dbconnect_utils.debugPrint(3, '[' + SCRIPT_NAME + ':findTnsnamesOra] Skipping sample tnsnames.ora in <%s>' % tnsnamesLocation) continue tnsnamesContent = dbconnect_utils.getFileContent(localClient, tnsnamesLocation, isWindows) dbconnect_utils.debugPrint(4, '[' + SCRIPT_NAME + ':findTnsnamesOra] Got content of <%s>: <%s>' % (tnsnamesLocation, tnsnamesContent)) if tnsnamesContent != None or tnsnamesContent != '' or len(tnsnamesContent) <1: tnsEntries = dbutils.parseTNSNames(tnsnamesContent, '') for tnsEntry in tnsEntries: sidFound = tnsEntry[3].strip().lower() ## Truncate domain name if this is fully qualified SID if sidFound.find('.') > 0: shortSID = sidFound[:sidFound.find('.')] dbconnect_utils.debugPrint(4, '[' + SCRIPT_NAME + ':findTnsnamesOra] Stripping domain from SID <%s> to <%s>' % (sidFound, shortSID)) sidFound = shortSID tnslsnrPort = tnsEntry[2].strip().lower() ipAddress = dbconnect_utils.fixIP(tnsEntry[5].strip().lower(), localClient.getIpAddress()) if ipAddress == dbconnect_utils.UNKNOWN: dbconnect_utils.debugPrint('[' + SCRIPT_NAME + ':findTnsnamesOra] Skipping instance <%s> listening at port <%s> because it\'s IP address is not valid' % (sidFound, tnslsnrPort)) continue if sidFound in dbDict.keys(): installPath = (dbDict[sidFound])[dbconnect_utils.PATH_INDEX] version = (dbDict[sidFound])[dbconnect_utils.VERSION_INDEX] statusFlag = (dbDict[sidFound])[dbconnect_utils.STATUS_INDEX] # If port and IP are already populated, don't overwrite them # because this information from active processes (above) is # guaranteed to be correct and tnsnames.ora may not be up-to-date ## Vinay 01/04/2010 - Commenting out conditional update below ## because the port and IP for an Oracle instance is not on the Oracle ## process but on the TNS listener process which may be listening for ## multiple instances on different ports. This makes associating an ## Oracle instance to its corresponding port impossible. ## So any ports found in TNSnames.ora will be used to overwrite ## previously found ports # if (dbDict[sidFound])[dbconnect_utils.PORT_INDEX] != dbconnect_utils.UNKNOWN: # tnslsnrPort = (dbDict[sidFound])[dbconnect_utils.PORT_INDEX] # if (dbDict[sidFound])[dbconnect_utils.IP_INDEX] != dbconnect_utils.UNKNOWN: # ipAddress = (dbDict[sidFound])[dbconnect_utils.IP_INDEX] dbDict[sidFound] = ['oracle', tnslsnrPort, ipAddress, installPath, version, statusFlag] dbconnect_utils.debugPrint(3, '[' + SCRIPT_NAME + ':findTnsnamesOra] Found known Oracle instance <%s> listening at port <%s> on <%s>' % (sidFound, tnslsnrPort, ipAddress)) else: dbDict[sidFound] = ['oracle', tnslsnrPort, ipAddress, dbconnect_utils.UNKNOWN, dbconnect_utils.UNKNOWN, dbconnect_utils.UNKNOWN] dbconnect_utils.debugPrint(3, '[' + SCRIPT_NAME + ':findTnsnamesOra] Added Oracle instance <%s> listening at port <%s> on <%s>' % (sidFound, tnslsnrPort, ipAddress)) else: logger.debug('[' + SCRIPT_NAME + ':findTnsnamesOra] Invalid TNSNAMES.ORA at <%s>: <%s>' % (tnsnamesLocation, tnsnamesContent)) except: excInfo = logger.prepareJythonStackTrace('') dbconnect_utils.debugPrint('[' + SCRIPT_NAME + ':findTnsnamesOra] Exception: <%s>' % excInfo) pass
def parseEtcFiles(localClient, p2pDict, dbDict, isWindows): try: pathsFound = [] ## Windows doesn't have /etc/oratab or /etc/oraInst.loc if isWindows == 'true': return else: ## Process oratab if found oratabLocation = dbconnect_utils.findFile(localClient, 'oratab', '/etc/', isWindows) if oratabLocation == None: dbconnect_utils.debugPrint(3, '[' + SCRIPT_NAME + ':parseEtcFiles] oratab not found in /etc/') else: oratabContent = dbconnect_utils.getFileContent(localClient, oratabLocation[0], isWindows) if oratabContent: oratabLines = dbconnect_utils.splitCommandOutput(oratabContent) if oratabLines and len(oratabLines) > 0: for oratabLine in oratabLines: ## Ignore comment line or lines with nothing if len(oratabLine.strip()) < 1 or oratabLine.strip()[0] == '#': continue dbconnect_utils.debugPrint(4, '[' + SCRIPT_NAME + ':parseEtcFiles] [1] Processing oratab line <%s>' % oratabLine) oratabLineSplit = oratabLine.strip().split(':') ## Ignore lines if the format is not sid:path:startup if len(oratabLineSplit) < 3: dbconnect_utils.debugPrint(4, '[' + SCRIPT_NAME + ':parseEtcFiles] [1] Ignoring oratab line <%s>' % oratabLine) continue ## We should have an instance and its path sidFound = oratabLineSplit[0].strip().lower() pathFound = oratabLineSplit[1].strip().lower() ipAddress = localClient.getIpAddress() ## If the SID is "*", ignore it and use the path if sidFound == "*": dbconnect_utils.debugPrint(4, '[' + SCRIPT_NAME + ':parseEtcFiles] [1] Ignoring oracle SID <%s>' % sidFound) if pathFound not in pathsFound: dbconnect_utils.debugPrint(4, '[' + SCRIPT_NAME + ':parseEtcFiles] [1] Adding path <%s> to return array' % pathFound) pathsFound.append(pathFound) else: dbconnect_utils.debugPrint(4, '[' + SCRIPT_NAME + ':parseEtcFiles] [1] Found known path <%s>' % pathFound) continue ## If this SID already exists in the dbDict, overwrite the install path ## associated with it. If not, add and entry and path if sidFound in dbDict.keys(): (dbDict[sidFound])[dbconnect_utils.PATH_INDEX] = pathFound dbconnect_utils.debugPrint(3, '[' + SCRIPT_NAME + ':parseEtcFiiles] [1] Found known Oracle instance <%s> with path <%s> on <%s>' % (sidFound, pathFound, ipAddress)) else: dbDict[sidFound] = ['oracle', dbconnect_utils.UNKNOWN, ipAddress, pathFound, dbconnect_utils.UNKNOWN, dbconnect_utils.UNKNOWN] dbconnect_utils.debugPrint(3, '[' + SCRIPT_NAME + ':parseEtcFiles] [1] Added Oracle instance <%s> with path <%s> on <%s>' % (sidFound, pathFound, ipAddress)) else: dbconnect_utils.debugPrint(3, '[' + SCRIPT_NAME + ':parseEtcFiles] [1] Invalid entries /etc/oratab: <%s>!' % oratabContent) else: dbconnect_utils.debugPrint(3, '[' + SCRIPT_NAME + ':parseEtcFiles] [1] Empty or invalid /etc/oratab!') ## Process oraInst.loc if found oraInstLocation = dbconnect_utils.findFile(localClient, 'oraInst.loc', '/etc/', isWindows) if oraInstLocation == None: dbconnect_utils.debugPrint(3, '[' + SCRIPT_NAME + ':parseEtcFiles] oraInst.loc not found in /etc/') else: oraInstContent = dbconnect_utils.getFileContent(localClient, oraInstLocation[0], isWindows) if oraInstContent: oraInstLines = dbconnect_utils.splitCommandOutput(oraInstContent) if oraInstLines and len(oraInstLines) > 0: for oraInstLine in oraInstLines: ## Ignore comment line or lines with nothing if len(oraInstLine.strip()) < 1 or oraInstLine.strip()[0] == '#': continue dbconnect_utils.debugPrint(4, '[' + SCRIPT_NAME + ':parseEtcFiles] [2] Processing oraInst line <%s>' % oraInstLine) oraInstLineSplit = oraInstLine.strip().split('=') ## Ignore lines if the format is not inventory_loc=<path> if len(oraInstLineSplit) < 2 or oraInstLineSplit[0].strip() != 'inventory_loc': dbconnect_utils.debugPrint(4, '[' + SCRIPT_NAME + ':parseEtcFiles] [2] Ignoring oraInst line <%s>' % oraInstLine) continue ## We should have an install path pathFound = oraInstLineSplit[1].strip().lower() dbconnect_utils.debugPrint(3, '[' + SCRIPT_NAME + ':parseEtcFiles] [2] Found oracle installation path <%s>' % pathFound) if pathFound not in pathsFound: dbconnect_utils.debugPrint(4, '[' + SCRIPT_NAME + ':parseEtcFiles] [2] Adding path <%s> to return array' % pathFound) pathsFound.append(pathFound) else: dbconnect_utils.debugPrint(4, '[' + SCRIPT_NAME + ':parseEtcFiles] [2] Found known path <%s>' % pathFound) else: dbconnect_utils.debugPrint(3, '[' + SCRIPT_NAME + ':parseEtcFiles] [2] Invalid entries /etc/oraInst.loc: <%s>' % oraInstContent) else: dbconnect_utils.debugPrint(3, '[' + SCRIPT_NAME + ':parseEtcFiles] [2] Empty or invalid /etc/oraInst.loc!') return pathsFound except: excInfo = logger.prepareJythonStackTrace('') dbconnect_utils.debugPrint('[' + SCRIPT_NAME + ':parseEtcFiles] Exception: <%s>' % excInfo) pass
def parseEtcFiles(localClient, p2pDict, dbDict, isWindows): try: pathsFound = [] ## Windows doesn't have /etc/oratab or /etc/oraInst.loc if isWindows == 'true': return else: ## Process oratab if found oratabLocation = dbconnect_utils.findFile(localClient, 'oratab', '/etc/', isWindows) if oratabLocation == None: dbconnect_utils.debugPrint(3, '[' + SCRIPT_NAME + ':parseEtcFiles] oratab not found in /etc/') else: oratabContent = dbconnect_utils.getFileContent(localClient, oratabLocation[0], isWindows) if oratabContent: oratabLines = dbconnect_utils.splitCommandOutput(oratabContent) if oratabLines and len(oratabLines) > 0: for oratabLine in oratabLines: ## Ignore comment line or lines with nothing if len(oratabLine.strip()) < 1 or oratabLine.strip()[0] == '#': continue if oratabLine.strip().lower().endswith(":n"): #we do not want to process potentially non running instances continue dbconnect_utils.debugPrint(4, '[' + SCRIPT_NAME + ':parseEtcFiles] [1] Processing oratab line <%s>' % oratabLine) oratabLineSplit = oratabLine.strip().split(':') ## Ignore lines if the format is not sid:path:startup if len(oratabLineSplit) < 3: dbconnect_utils.debugPrint(4, '[' + SCRIPT_NAME + ':parseEtcFiles] [1] Ignoring oratab line <%s>' % oratabLine) continue ## We should have an instance and its path sidFound = oratabLineSplit[0].strip().lower() pathFound = oratabLineSplit[1].strip().lower() ipAddress = localClient.getIpAddress() ## If the SID is "*", ignore it and use the path if sidFound == "*": dbconnect_utils.debugPrint(4, '[' + SCRIPT_NAME + ':parseEtcFiles] [1] Ignoring oracle SID <%s>' % sidFound) if pathFound not in pathsFound: dbconnect_utils.debugPrint(4, '[' + SCRIPT_NAME + ':parseEtcFiles] [1] Adding path <%s> to return array' % pathFound) pathsFound.append(pathFound) else: dbconnect_utils.debugPrint(4, '[' + SCRIPT_NAME + ':parseEtcFiles] [1] Found known path <%s>' % pathFound) continue ## If this SID already exists in the dbDict, overwrite the install path ## associated with it. If not, add and entry and path if sidFound in dbDict.keys(): (dbDict[sidFound])[dbconnect_utils.PATH_INDEX] = pathFound dbconnect_utils.debugPrint(3, '[' + SCRIPT_NAME + ':parseEtcFiiles] [1] Found known Oracle instance <%s> with path <%s> on <%s>' % (sidFound, pathFound, ipAddress)) else: dbDict[sidFound] = ['oracle', dbconnect_utils.UNKNOWN, ipAddress, pathFound, dbconnect_utils.UNKNOWN, dbconnect_utils.UNKNOWN] dbconnect_utils.debugPrint(3, '[' + SCRIPT_NAME + ':parseEtcFiles] [1] Added Oracle instance <%s> with path <%s> on <%s>' % (sidFound, pathFound, ipAddress)) else: dbconnect_utils.debugPrint(3, '[' + SCRIPT_NAME + ':parseEtcFiles] [1] Invalid entries /etc/oratab: <%s>!' % oratabContent) else: dbconnect_utils.debugPrint(3, '[' + SCRIPT_NAME + ':parseEtcFiles] [1] Empty or invalid /etc/oratab!') ## Process oraInst.loc if found oraInstLocation = dbconnect_utils.findFile(localClient, 'oraInst.loc', '/etc/', isWindows) if oraInstLocation == None: dbconnect_utils.debugPrint(3, '[' + SCRIPT_NAME + ':parseEtcFiles] oraInst.loc not found in /etc/') else: oraInstContent = dbconnect_utils.getFileContent(localClient, oraInstLocation[0], isWindows) if oraInstContent: oraInstLines = dbconnect_utils.splitCommandOutput(oraInstContent) if oraInstLines and len(oraInstLines) > 0: for oraInstLine in oraInstLines: ## Ignore comment line or lines with nothing if len(oraInstLine.strip()) < 1 or oraInstLine.strip()[0] == '#': continue dbconnect_utils.debugPrint(4, '[' + SCRIPT_NAME + ':parseEtcFiles] [2] Processing oraInst line <%s>' % oraInstLine) oraInstLineSplit = oraInstLine.strip().split('=') ## Ignore lines if the format is not inventory_loc=<path> if len(oraInstLineSplit) < 2 or oraInstLineSplit[0].strip() != 'inventory_loc': dbconnect_utils.debugPrint(4, '[' + SCRIPT_NAME + ':parseEtcFiles] [2] Ignoring oraInst line <%s>' % oraInstLine) continue ## We should have an install path pathFound = oraInstLineSplit[1].strip().lower() dbconnect_utils.debugPrint(3, '[' + SCRIPT_NAME + ':parseEtcFiles] [2] Found oracle installation path <%s>' % pathFound) if pathFound not in pathsFound: dbconnect_utils.debugPrint(4, '[' + SCRIPT_NAME + ':parseEtcFiles] [2] Adding path <%s> to return array' % pathFound) pathsFound.append(pathFound) else: dbconnect_utils.debugPrint(4, '[' + SCRIPT_NAME + ':parseEtcFiles] [2] Found known path <%s>' % pathFound) else: dbconnect_utils.debugPrint(3, '[' + SCRIPT_NAME + ':parseEtcFiles] [2] Invalid entries /etc/oraInst.loc: <%s>' % oraInstContent) else: dbconnect_utils.debugPrint(3, '[' + SCRIPT_NAME + ':parseEtcFiles] [2] Empty or invalid /etc/oraInst.loc!') return pathsFound except: excInfo = logger.prepareJythonStackTrace('') dbconnect_utils.debugPrint('[' + SCRIPT_NAME + ':parseEtcFiles] Exception: <%s>' % excInfo) pass