예제 #1
0
 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)
예제 #2
0
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
예제 #3
0
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
예제 #4
0
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
예제 #5
0
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)