Exemple #1
0
    def test_find_in_list_by_condition(self):
        self.assertRaises(ValueError,
                          utils.find_in_list_by_condition, None, None)
        self.assertRaises(ValueError,
                          utils.find_in_list_by_condition, 'key', [])
        self.assertEqual(None,
                         utils.find_in_list_by_condition({'key': 'val'}, []))

        search_list = [{'key1': 'val1', 'key2': 'val2', 'key3': 'val3'},
                       {'key1': 'val11', 'key2': 'val22', 'key3': 'val33'},
                       {'key1': 'val1', 'key2': 'val2', 'key3': 'val333'}]

        search_condition = {'key2': 'val33'}
        expected = []
        actual = utils.find_in_list_by_condition(search_condition, search_list)
        self.assertEqual(expected, actual)

        search_condition = {'key2': 'val22'}
        expected = {'key1': 'val11', 'key2': 'val22', 'key3': 'val33'}
        actual = utils.find_in_list_by_condition(search_condition, search_list)
        self.assertEqual(expected, actual[0])

        search_condition = {'key1': 'val1', 'key3': 'val3'}
        expected = {'key1': 'val1', 'key2': 'val2', 'key3': 'val3'}
        actual = utils.find_in_list_by_condition(search_condition, search_list)
        self.assertEqual(expected, actual[0])

        search_condition = {'key1': 'val1', 'key2': 'val2'}
        expected = [{'key1': 'val1', 'key2': 'val2', 'key3': 'val3'},
                    {'key1': 'val1', 'key2': 'val2', 'key3': 'val333'}]
        actual = utils.find_in_list_by_condition(search_condition, search_list)
        self.assertEqual(expected, actual)
Exemple #2
0
    def _find_mapping(self):
        session = self.context.session
        netview_id = None
        netview_name = None
        netview_shared = False

        # First check if mapping already exists
        network_id = self.subnet.get('network_id')
        subnet_id = self.subnet.get('id')
        netview_mappings = dbi.get_network_view_mappings(session,
                                                         network_id=network_id,
                                                         subnet_id=subnet_id)
        if netview_mappings:
            netview_id = netview_mappings[0].network_view_id
            netview_row = utils.find_one_in_list('id', netview_id,
                                                 self.discovered_network_views)
            self.mapping.network_view_id = netview_id
            self.mapping.network_view = netview_row.network_view
            self.mapping.authority_member = self._get_authority_member(
                netview_row.authority_member_id)
            self.mapping.shared = netview_row.shared
            self.mapping.dns_view = self._get_dns_view()
            self._update_service_member_mapping()
            LOG.info(
                _LI("Network view %(netview)s mapping found for "
                    "network %(network)s and subnet %(subnet)s"),
                dict(netview=netview_row.network_view,
                     network=network_id,
                     subnet=subnet_id))
            return

        # No mapping so find mapping
        mapping_attrs = self._get_mapping_attributes()
        matching_netviews = []

        # find mapping matches on common cases
        mapping_filters = self._get_mapping_filters(mapping_attrs)
        for mf in mapping_filters:
            if list(mf.values())[0] is None:
                continue
            matches = utils.find_in_list_by_condition(
                mf, self.discovered_mapping_conditions)
            if matches:
                netview_ids = [m.network_view_id for m in matches]
                matching_netviews += netview_ids

        # find network view id and name pair
        if matching_netviews:
            # get most matched network view id
            netview_id = Counter(matching_netviews).most_common(1)[0][0]
            netview_row = utils.find_one_in_list('id', netview_id,
                                                 self.discovered_network_views)
            netview_name = netview_row.network_view
            netview_shared = netview_row.shared
        else:
            # no matching found; use default network view scope
            netview_scope = self.grid_config.default_network_view_scope
            netview_name = self._get_network_view_by_scope(
                netview_scope, mapping_attrs)
            netview_row = utils.find_one_in_list('network_view', netview_name,
                                                 self.discovered_network_views)
            if netview_row:
                netview_id = netview_row.id
                netview_shared = netview_row.shared

        self.mapping.network_view_id = netview_id
        self.mapping.network_view = netview_name
        if self.mapping.network_view_id:
            self.mapping.authority_member = self._get_authority_member()
            self.mapping.shared = netview_shared
        self.mapping.dns_view = self._get_dns_view()
    def _find_mapping(self):
        session = self.context.session
        netview_id = None
        netview_name = None
        netview_shared = False

        # First check if mapping already exists
        network_id = self.subnet.get('network_id')
        subnet_id = self.subnet.get('id')
        netview_mappings = dbi.get_network_view_mappings(
            session, network_id=network_id, subnet_id=subnet_id)
        if netview_mappings:
            netview_id = netview_mappings[0].network_view_id
            netview_row = utils.find_one_in_list(
                'id', netview_id, self.discovered_network_views)
            self.mapping.network_view_id = netview_id
            self.mapping.network_view = netview_row.network_view
            self.mapping.authority_member = self._get_authority_member(
                netview_row.authority_member_id)
            self.mapping.shared = netview_row.shared
            self.mapping.dns_view = self._get_dns_view()
            self._update_service_member_mapping()
            LOG.info(_LI("Network view %(netview)s mapping found for "
                         "network %(network)s and subnet %(subnet)s"),
                     dict(netview=netview_row.network_view, network=network_id,
                          subnet=subnet_id))
            return

        # No mapping so find mapping
        mapping_attrs = self._get_mapping_attributes()
        matching_netviews = []

        # find mapping matches on common cases
        mapping_filters = self._get_mapping_filters(mapping_attrs)
        for mf in mapping_filters:
            if mf.values()[0] is None:
                continue
            matches = utils.find_in_list_by_condition(
                mf, self.discovered_mapping_conditions)
            if matches:
                netview_ids = [m.network_view_id for m in matches]
                matching_netviews += netview_ids

        # find network view id and name pair
        if matching_netviews:
            # get most matched network view id
            netview_id = Counter(matching_netviews).most_common(1)[0][0]
            netview_row = utils.find_one_in_list('id', netview_id,
                                                 self.discovered_network_views)
            netview_name = netview_row.network_view
            netview_shared = netview_row.shared
        else:
            # no matching found; use default network view scope
            netview_scope = self.grid_config.default_network_view_scope
            netview_name = self._get_network_view_by_scope(netview_scope,
                                                           mapping_attrs)
            netview_row = utils.find_one_in_list('network_view', netview_name,
                                                 self.discovered_network_views)
            if netview_row:
                netview_id = netview_row.id
                netview_shared = netview_row.shared

        self.mapping.network_view_id = netview_id
        self.mapping.network_view = netview_name
        if self.mapping.network_view_id:
            self.mapping.authority_member = self._get_authority_member()
            self.mapping.shared = netview_shared
        self.mapping.dns_view = self._get_dns_view()