def discoverDo(self, vertex, parentDo=None): r'@types: hana_topology.VertexDescriptor[C] -> DO[C] or None' discoverer = self.discovererRegistry.get(vertex.name) if discoverer: if parentDo: return flow.discover_or_warn(vertex.name, discoverer, parentDo, protocol_name=self.protocolName) return flow.discover_or_warn(vertex.name, discoverer, protocol_name=self.protocolName) logger.debug('Failed to find discoverer for ', vertex)
def DiscoveryMain(discoverer, dnsresolver, installpath, config): context = get_common_topology_context(discoverer, dnsresolver, installpath, config) discovererRegistry, pdoBuilderRegistry, topologyBuilderRegistry = context topology_descriptor = COMMON_TOPOLOGY_DESCRIPTOR is_replicated, warning = discover_or_warn('is_replicated', discoverer.isReplicationEnabled, protocol_name=config.Protocol) if is_replicated: context_ = get_hsr_topology_context(discoverer, dnsresolver, installpath, config) discovererRegistry_, pdoBuilderRegistry_, topologyBuilderRegistry_ = context_ discovererRegistry.update(discovererRegistry_) pdoBuilderRegistry.update(pdoBuilderRegistry_) topologyBuilderRegistry.update(topologyBuilderRegistry_) topology_descriptor_ = HSR_ENABLED_TOPOLOGY_DESCRIPTOR topology_descriptor = topology_descriptor.merge(topology_descriptor_) scenario = hana_topology.Discoverer(discovererRegistry, pdoBuilderRegistry, topologyBuilderRegistry, topology_descriptor, config.Protocol) oshs, warnings = scenario.discover() warning and warnings.append(warning) return oshs, warnings
def triggered_on_ipse_only(discoverer, pdadmin, http_executor, dnsresolver, destination_address, protocol, credential_id, ipse_id): oshs = [] warnings = [] reporter = webseal_topology.Reporter() webseal_osh_by_name, warning = flow.discover_or_warn( 'webseal servers', discover_webseal_topology, discoverer, reporter, dnsresolver, credential_id, protocol_name=protocol) if not warning: endpoint_osh = modeling.createOshByCmdbIdString( 'ip_service_endpoint', ipse_id) for webseal_osh, _, _, oshs_ in webseal_osh_by_name.values(): oshs.extend(oshs_) oshs.append( reporter.link_reporter.report_usage(webseal_osh, endpoint_osh)) else: warnings.append(warning) return oshs, warnings
def triggered_on_isam_with_https_ipse(discoverer, pdadmin, http_executor, dnsresolver, destination_address, protocol, credential_id, isam_id): oshs = [] warnings = [] reporter = webseal_topology.Reporter() _, warning = flow.discover_or_warn('webseal servers', discover_webseal_topology, discoverer, reporter, dnsresolver, credential_id, protocol_name=protocol) if not warning: # update cred dict reference only webseal_osh = modeling.createOshByCmdbIdString('isam_web', isam_id) RunningSoftwareBuilder.update_credential_id(webseal_osh, credential_id) oshs.append(webseal_osh) else: warnings.append(warning) return oshs, warnings
def DiscoveryMain(Framework): OSHVResult = ObjectStateHolderVector() client = None try: client = createWmiClient(Framework) if client: protocol = Framework.getDestinationAttribute('Protocol') hostId = Framework.getDestinationAttribute('hostId') hostOsh = modeling.createOshByCmdbIdString('nt', hostId) _, warning = discover_or_warn('fibre channel HBAs', discover_fc_hbas, Framework, hostOsh, protocol, OSHVResult, protocol_name=protocol) if warning: logger.reportWarningObject(warning) discoverUsers = Boolean.parseBoolean( Framework.getParameter('discoverUsers')) if discoverUsers: try: wmi_dis_user_lib.executeWmiQuery(client, Framework, OSHVResult, hostOsh) except: errobj = errorobject.createError( errorcodes. FAILED_DISCOVERING_RESOURCE_WITH_CLIENT_TYPE, ['users', 'wmi'], 'Failed to discover users by wmi') logger.reportErrorObject(errobj) logger.errorException('Failed to discover users by wmi') discoverShares = Boolean.parseBoolean( Framework.getParameter('discoverShares')) if discoverShares: try: wmi_dis_share_lib.executeWmiQuery(client, OSHVResult, hostOsh) except: errobj = errorobject.createError( errorcodes. FAILED_DISCOVERING_RESOURCE_WITH_CLIENT_TYPE, ['shares', 'wmi'], 'Failed to discover shares by wmi') logger.reportErrorObject(errobj) logger.errorException('Failed to discover shares by wmi') discoverProcesses = Boolean.parseBoolean( Framework.getParameter('discoverProcesses')) processes = [] try: processDiscoverer = process_discoverer.getDiscovererByWmi( client) processes = processDiscoverer.discoverAllProcesses() if not processes: raise ValueError() except: errobj = errorobject.createError( errorcodes.FAILED_DISCOVERING_RESOURCE_WITH_CLIENT_TYPE, ['processes', 'wmi'], 'Failed to discover processes by wmi') logger.reportErrorObject(errobj) logger.errorException('Failed to discover processes by wmi') if processes: # save processes to DB process_discoverer.saveProcessesToProbeDb( processes, hostId, Framework) # report processes if discoverProcesses: processReporter = process.Reporter() for processObject in processes: processesVector = processReporter.reportProcess( hostOsh, processObject) OSHVResult.addAll(processesVector) discoverMemory = Boolean.parseBoolean( Framework.getParameter('discoverMemory')) if discoverMemory: try: wmi_dis_memory_lib.executeWmiQuery(client, OSHVResult, hostOsh) except: errobj = errorobject.createError( errorcodes. FAILED_DISCOVERING_RESOURCE_WITH_CLIENT_TYPE, ['memory', 'wmi'], 'Failed to discover memory by wmi') logger.reportErrorObject(errobj) logger.errorException('Failed to discover memory by wmi') discoverDisks = Boolean.parseBoolean( Framework.getParameter('discoverDisks')) if discoverDisks: try: containerOsh = hostOsh or modeling.createHostOSH( client.getIpAddress()) NTCMD_HR_Dis_Disk_Lib.discoverDiskByWmic( client, OSHVResult, containerOsh) NTCMD_HR_Dis_Disk_Lib.discoverPhysicalDiskByWmi( client, OSHVResult, containerOsh) except: errobj = errorobject.createError( errorcodes. FAILED_DISCOVERING_RESOURCE_WITH_CLIENT_TYPE, ['disks', 'wmi'], 'Failed to discover disks by wmi') logger.reportErrorObject(errobj) logger.errorException('Failed to discover disks by wmi') discoverDrivers = Boolean.parseBoolean( Framework.getParameter('discoverDrivers')) if discoverDrivers: try: containerOsh = hostOsh or modeling.createHostOSH( client.getIpAddress()) HR_Dis_Driver_Lib.discoverDriverByWmi( client, OSHVResult, containerOsh) except: errobj = errorobject.createError( errorcodes. FAILED_DISCOVERING_RESOURCE_WITH_CLIENT_TYPE, ['drivers', 'wmi'], 'Failed to discover drivers by wmi') logger.reportErrorObject(errobj) logger.errorException('Failed to discover drivers by wmi') discoveriSCSIInfo = Boolean.parseBoolean( Framework.getParameter('discoveriSCSIInfo')) if discoveriSCSIInfo: try: NTCMD_HR_Dis_Disk_Lib.discoveriSCSIInfo( client, OSHVResult, containerOsh) except: logger.warn( 'Failed to connect with namespace Root\Microsoft\Windows\Storage' ) discoverCPUs = Boolean.parseBoolean( Framework.getParameter('discoverCPUs')) if discoverCPUs: try: wmi_dis_cpu_lib.executeWmiQuery(client, OSHVResult, hostOsh) except: errobj = errorobject.createError( errorcodes. FAILED_DISCOVERING_RESOURCE_WITH_CLIENT_TYPE, ['cpus', 'wmi'], 'Failed to discover cpus by wmi') logger.reportErrorObject(errobj) logger.errorException('Failed to discover cpus by wmi') discoverServices = Boolean.parseBoolean( Framework.getParameter('discoverServices')) servicesByCmd = Hashtable() if discoverServices: try: servOSHV = wmi_dis_service_lib.executeWmiQuery( client, OSHVResult, servicesByCmd, hostOsh) OSHVResult.addAll(servOSHV) except: errobj = errorobject.createError( errorcodes. FAILED_DISCOVERING_RESOURCE_WITH_CLIENT_TYPE, ['services', 'wmi'], 'Failed to discover services by wmi') logger.reportErrorObject(errobj) logger.errorException('Failed to discover services by wmi') #NOTE: software discovery had to be the last in discovery chain discoverSoftware = Boolean.parseBoolean( Framework.getParameter('discoverInstalledSoftware')) softNameToInstSoftOSH = {} if discoverSoftware: (softNameToInstSoftOSH, client) = __discoverInstalledSoftware(Framework, OSHVResult, client) if not client: logger.warn( "Application Signature will not be run since the client is not initialized" ) if client: appSign = applications.createApplicationSignature( Framework, client) if processes: appSign.setProcessesManager( applications.ProcessesManager(processes, [])) servicesInfo = applications.ServicesInfo(servicesByCmd) appSign.setServicesInfo(servicesInfo) softwareInfo = applications.InstalledSoftwareInfo( None, softNameToInstSoftOSH) appSign.setInstalledSoftwareInfo(softwareInfo) appSign.getApplicationsTopology(hostId) finally: if client != None: client.close() return OSHVResult
def DiscoveryMain(discoverer, pdadmin, http_executor, dnsresolver, config): reporter = webseal_topology.Reporter() warnings = [] oshs = [] ldap_osh = None result, warning = flow.discover_or_warn('ldap server', discover_ldap_topology, discoverer, reporter, dnsresolver, protocol_name=config.Protocol) if result: ldap_osh, ldap_container, endpoint_oshs, oshs_ = result oshs.extend(oshs_) warning and warnings.append(warning) policy_server, warning = flow.discover_or_warn( 'policy server', discover_policy_server_topology, discoverer, reporter, dnsresolver, config.ip_address, ldap_osh, protocol_name=config.Protocol) policy_server_osh = None if not warning: policy_server_osh, container, endpoint_oshs, oshs_ = policy_server oshs.extend(oshs_) else: warnings.append(warning) servers, warning = flow.discover_or_warn('webseal servers', discover_webseal_topology, discoverer, reporter, dnsresolver, None, ldap_osh, policy_server_osh, protocol_name=config.Protocol) webseal_osh_by_name = {} if not warning: restored_isam_osh = modeling.createOshByCmdbIdString( 'isam_web', config.cmdbid) restored_container = modeling.createOshByCmdbIdString( 'node', config.container_cmdbid) for name, (webseal_server_osh, container, _, oshs_) in servers.items(): if name == config.name: webseal_server_osh = restored_isam_osh container = restored_container oshs_ = [ restored_isam_osh, ] webseal_osh_by_name[name] = (webseal_server_osh, container) oshs.extend(oshs_) else: warnings.append(warning) for item in webseal_osh_by_name.iteritems(): name, _ = item junctions, warning = flow.discover_or_warn( 'junctions for %s' % name, discover_webseal_junctions_topology, discoverer, reporter, dnsresolver, item, protocol_name=config.Protocol) if not warning: _, oshs_ = junctions oshs.extend(oshs_) else: warnings.append(warning) return (oshs, warnings)