Exemple #1
0
 def testOnlyOne(self):
     '''
     only_one - only and only one element in the list has boolean == True
     '''
     TO_TEST = [((True, False, False), True),
                ((False, True, True), False),
                ((True, True, True), False),
                ((False, False, False), False),
                (('hello', False, False), True),
                ((False, 42, False), True),
                ((False, False, ['hello', 42]), True),
                (('hello', 42, False), False)]
     for arg, expected in TO_TEST:
         self.assertEqual(U.only_one(arg), expected)
Exemple #2
0
    def run(self,
            name,
            poller,
            snmp_communities,
            nodes=None,
            subnets=None,
            ip_ranges=None,
            no_icmp_only=True,
            auto_import=False):
        """
        Create and Start Discovery process in Orion.

        Returns:
         - ProfileID that was created (or error from Orion).
        """
        results = {}

        # Orion must have the un-used varabiles to be certain values.
        BulkList = None
        IpRanges = []
        Subnets = None

        results['label'] = self.connect()

        if not only_one(nodes, subnets, ip_ranges):
            msg = "Need only one out of nodes, ip_ranges or subnets!"
            send_user_error(msg)
            raise ValueError(msg)

        if nodes is not None:
            BulkList = []
            for node in nodes:
                BulkList.append({'Address': node})
        elif ip_ranges is not None:
            for ip_range in ip_ranges:
                (start_ip, end_ip) = ip_range.split(':')
                IpRanges.append({
                    'StartAddress': start_ip,
                    'EndAddress': end_ip
                })
        elif subnets is not None:
            Subnets = []
            for subnet in subnets:
                (SubnetIP, SubnetMask) = subnet.split('/')
                Subnets.append({
                    'SubnetIP': SubnetIP,
                    'SubnetMask': SubnetMask
                })

        CredID_order = 1
        CredIDs = []
        for snmp in snmp_communities:
            CredIDs.append({
                'CredentialID': self.get_snmp_cred_id(snmp),
                'Order': CredID_order
            })
            CredID_order += 1

        CorePluginConfiguration = self.invoke(
            'Orion.Discovery', 'CreateCorePluginConfiguration', {
                'BulkList': BulkList,
                'IpRanges': IpRanges,
                'Subnets': Subnets,
                'Credentials': CredIDs,
                'WmiRetriesCount': 0,
                'WmiRetryIntervalMiliseconds': 1000
            })

        # engineID if happens to be None, default to the primary (aka 1).
        if poller is not None:
            engineID = self.get_engine_id(poller)
        else:
            engineID = 1

        self.logger.info("Adding '{}' Discovery profile to Orion: {}".format(
            name, results['label']))

        disco = self.invoke(
            'Orion.Discovery', 'StartDiscovery', {
                'Name':
                name,
                'EngineId':
                engineID,
                'JobTimeoutSeconds':
                3600,
                'SearchTimeoutMiliseconds':
                2000,
                'SnmpTimeoutMiliseconds':
                2000,
                'SnmpRetries':
                4,
                'RepeatIntervalMiliseconds':
                1800,
                'SnmpPort':
                161,
                'HopCount':
                0,
                'PreferredSnmpVersion':
                'SNMP2c',
                'DisableIcmp':
                no_icmp_only,
                'AllowDuplicateNodes':
                False,
                'IsAutoImport':
                auto_import,
                'IsHidden':
                False,
                'PluginConfigurations': [{
                    'PluginConfigurationItem':
                    CorePluginConfiguration
                }]
            })

        # FIX ME Check job created....

        return disco
    def run(self,
            name,
            platform,
            poller,
            snmp_communities,
            nodes=None,
            subnets=None,
            ip_ranges=None,
            no_icmp_only=True,
            auto_import=False):
        """
        Create and Start Discovery process in Orion.

        Returns:
         - ProfileID that was created (or error from Orion).
        """
        results = {}

        # Orion must have the un-used varabiles to be certain values.
        BulkList = None
        IpRanges = []
        Subnets = None

        results['platform'] = self.connect(platform)

        if not only_one(nodes, subnets, ip_ranges):
            msg = "Need only one out of nodes, ip_ranges or subnets!"
            send_user_error(msg)
            raise ValueError(msg)

        if nodes is not None:
            BulkList = []
            for node in nodes:
                BulkList.append({'Address': node})
        elif ip_ranges is not None:
            for ip_range in ip_ranges:
                (start_ip, end_ip) = ip_range.split(':')
                IpRanges.append({'StartAddress': start_ip,
                                 'EndAddress': end_ip})
        elif subnets is not None:
            Subnets = []
            for subnet in subnets:
                (SubnetIP, SubnetMask) = subnet.split('/')
                Subnets.append({'SubnetIP': SubnetIP,
                                'SubnetMask': SubnetMask})

        CredID_order = 1
        CredIDs = []
        for snmp in snmp_communities:
            CredIDs.append(
                {'CredentialID': self.get_snmp_cred_id(snmp),
                 'Order': CredID_order}
            )
            CredID_order += 1

        CorePluginConfiguration = self.invoke('Orion.Discovery',
                                              'CreateCorePluginConfiguration',
                                              {'BulkList': BulkList,
                                               'IpRanges': IpRanges,
                                               'Subnets': Subnets,
                                               'Credentials': CredIDs,
                                               'WmiRetriesCount': 0,
                                               'WmiRetryIntervalMiliseconds':
                                               1000})

        # engineID if happens to be None, default to the primary (aka 1).
        if poller is not None:
            engineID = self.get_engine_id(poller)
        else:
            engineID = 1

        self.logger.info(
            "Adding '{}' Discovery profile to Orion Platform {}".format(
                name, platform))

        disco = self.invoke('Orion.Discovery', 'StartDiscovery',
                            {
                                'Name': name,
                                'EngineId': engineID,
                                'JobTimeoutSeconds': 3600,
                                'SearchTimeoutMiliseconds': 2000,
                                'SnmpTimeoutMiliseconds': 2000,
                                'SnmpRetries': 4,
                                'RepeatIntervalMiliseconds': 1800,
                                'SnmpPort': 161,
                                'HopCount': 0,
                                'PreferredSnmpVersion': 'SNMP2c',
                                'DisableIcmp': no_icmp_only,
                                'AllowDuplicateNodes': False,
                                'IsAutoImport': auto_import,
                                'IsHidden': False,
                                'PluginConfigurations': [
                                    {'PluginConfigurationItem':
                                     CorePluginConfiguration}
                                ]
                            })

        # FIX ME Check job created....

        return disco