예제 #1
0
 def _synchronize_lrouters(self, ctx, lr_uuids, scan_missing=False):
     if not lr_uuids and not scan_missing:
         return
     # TODO(salvatore-orlando): Deal with the case the tag
     # has been tampered with
     neutron_router_mappings = {}
     for lr_uuid in lr_uuids:
         lrouter = (self._nsx_cache[lr_uuid].get('data') or
                    self._nsx_cache[lr_uuid].get('data_bk'))
         tags = self._get_tag_dict(lrouter['tags'])
         neutron_router_id = tags.get('q_router_id')
         if neutron_router_id:
             neutron_router_mappings[neutron_router_id] = (
                 self._nsx_cache[lr_uuid])
         else:
             LOG.warning("Unable to find Neutron router id for "
                         "NSX logical router: %s", lr_uuid)
     # Fetch neutron routers from database
     filters = ({} if scan_missing else
                {'id': neutron_router_mappings.keys()})
     routers = model_query.get_collection(
         ctx, l3_db.Router, self._plugin._make_router_dict,
         filters=filters)
     for router in routers:
         lrouter = neutron_router_mappings.get(router['id'])
         self.synchronize_router(
             ctx, router, lrouter and lrouter.get('data'))
예제 #2
0
    def _synchronize_lswitches(self, ctx, ls_uuids, scan_missing=False):
        if not ls_uuids and not scan_missing:
            return
        neutron_net_ids = set()
        neutron_nsx_mappings = {}
        # TODO(salvatore-orlando): Deal with the case the tag
        # has been tampered with
        for ls_uuid in ls_uuids:
            # If the lswitch has been deleted, get backup copy of data
            lswitch = (self._nsx_cache[ls_uuid].get('data') or
                       self._nsx_cache[ls_uuid].get('data_bk'))
            tags = self._get_tag_dict(lswitch['tags'])
            neutron_id = tags.get('quantum_net_id')
            neutron_net_ids.add(neutron_id)
            neutron_nsx_mappings[neutron_id] = (
                neutron_nsx_mappings.get(neutron_id, []) +
                [self._nsx_cache[ls_uuid]])
        # Fetch neutron networks from database
        filters = {'router:external': [False]}
        if not scan_missing:
            filters['id'] = neutron_net_ids

        networks = model_query.get_collection(
            ctx, models_v2.Network, self._plugin._make_network_dict,
            filters=filters)

        for network in networks:
            lswitches = neutron_nsx_mappings.get(network['id'], [])
            lswitches = [lsw.get('data') for lsw in lswitches]
            self.synchronize_network(ctx, network, lswitches)
예제 #3
0
 def _synchronize_lswitchports(self, ctx, lp_uuids, scan_missing=False):
     if not lp_uuids and not scan_missing:
         return
     # Find Neutron port id by tag - the tag is already
     # loaded in memory, no reason for doing a db query
     # TODO(salvatore-orlando): Deal with the case the tag
     # has been tampered with
     neutron_port_mappings = {}
     for lp_uuid in lp_uuids:
         lport = (self._nsx_cache[lp_uuid].get('data') or
                  self._nsx_cache[lp_uuid].get('data_bk'))
         tags = self._get_tag_dict(lport['tags'])
         neutron_port_id = tags.get('q_port_id')
         if neutron_port_id:
             neutron_port_mappings[neutron_port_id] = (
                 self._nsx_cache[lp_uuid])
     # Fetch neutron ports from database
     # At the first sync we need to fetch all ports
     filters = ({} if scan_missing else
                {'id': neutron_port_mappings.keys()})
     # TODO(salv-orlando): Work out a solution for avoiding
     # this query
     ext_nets = [net['id'] for net in ctx.session.query(
         models_v2.Network).join(
             external_net_db.ExternalNetwork,
             (models_v2.Network.id ==
              external_net_db.ExternalNetwork.network_id))]
     ports = model_query.get_collection(
         ctx, models_v2.Port, self._plugin._make_port_dict,
         filters=filters)
     for port in ports:
         lswitchport = neutron_port_mappings.get(port['id'])
         self.synchronize_port(
             ctx, port, lswitchport and lswitchport.get('data'),
             ext_networks=ext_nets)
예제 #4
0
 def get_nuage_l2bridges(self,
                         context,
                         filters=None,
                         fields=None,
                         sorts=None,
                         limit=None,
                         marker=None,
                         page_reverse=False):
     marker_obj = lib_db_utils.get_marker_obj(self, context,
                                              'nuage_l2bridges', limit,
                                              marker)
     l2bridges = lib_model_query.get_collection(context,
                                                nuage_models.NuageL2bridge,
                                                self._make_l2bridges_dict,
                                                filters=filters,
                                                fields=fields,
                                                sorts=sorts,
                                                limit=limit,
                                                marker_obj=marker_obj,
                                                page_reverse=page_reverse)
     if not fields or 'physnets' in fields:
         for l2bridge in l2bridges:
             physnets = nuagedb.get_nuage_l2bridge_physnet_mappings(
                 context.session, l2bridge_id=l2bridge['id'])
             l2bridge['physnets'] = self._make_physnet_mapping_dict(
                 physnets)
     if not fields or 'networks' in fields:
         for l2bridge in l2bridges:
             networks = nuagedb.get_networks_for_nuage_l2bridge(
                 context.session, l2bridge['id'])
             networks = [n['id'] for n in networks]
             l2bridge['networks'] = networks
     return l2bridges
예제 #5
0
 def get_tap_flows(self, context, filters=None, fields=None,
                   sorts=None, limit=None, marker=None,
                   page_reverse=False):
     LOG.debug("get_tap_flows() called")
     return model_query.get_collection(context, TapFlow,
                                       self._make_tap_flow_dict,
                                       filters=filters, fields=fields)
예제 #6
0
 def get_ipsec_site_connections(self, context, filters=None, fields=None):
     return model_query.get_collection(
         context,
         vpn_models.IPsecSiteConnection,
         self._make_ipsec_site_connection_dict,
         filters=filters,
         fields=fields)
예제 #7
0
 def get_port_assocs(self, context, bgpvpn_id, filters=None, fields=None):
     if not filters:
         filters = {}
     filters['bgpvpn_id'] = [bgpvpn_id]
     return model_query.get_collection(context, BGPVPNPortAssociation,
                                       self._make_port_assoc_dict, filters,
                                       fields)
예제 #8
0
 def _get_collection(context, model, dict_func,
                     filters=None, fields=None, sorts=None,
                     limit=None, marker_obj=None,
                     page_reverse=False):
     return model_query.get_collection(context, model, dict_func,
                                       filters, fields, sorts,
                                       limit, marker_obj,
                                       page_reverse)
예제 #9
0
파일: api.py 프로젝트: igordcard/neutron
def get_objects(obj_cls, context, _pager=None, **kwargs):
    with obj_cls.db_context_reader(context):
        filters = _kwargs_to_filters(**kwargs)
        return model_query.get_collection(
            context, obj_cls.db_model,
            dict_func=None,  # return all the data
            filters=filters,
            **(_pager.to_kwargs(context, obj_cls) if _pager else {}))
예제 #10
0
 def get_firewall_groups(self, context, filters=None, fields=None):
     if context.tenant_id:
         tenant_id = filters.get('tenant_id') if filters else None
         tenant_id = tenant_id[0] if tenant_id else context.tenant_id
         self._ensure_default_firewall_group(context, tenant_id)
     return model_query.get_collection(
         context, FirewallGroup, self._make_firewall_group_dict,
         filters=filters, fields=fields)
예제 #11
0
def get_objects(obj_cls, context, _pager=None, **kwargs):
    with obj_cls.db_context_reader(context):
        filters = _kwargs_to_filters(**kwargs)
        return model_query.get_collection(
            context, obj_cls.db_model,
            dict_func=None,  # return all the data
            filters=filters,
            **(_pager.to_kwargs(context, obj_cls) if _pager else {}))
예제 #12
0
 def _get_port_security_group_bindings(self,
                                       context,
                                       filters=None,
                                       fields=None):
     return model_query.get_collection(
         context,
         sg_models.SecurityGroupPortBinding,
         self._make_security_group_binding_dict,
         filters=filters,
         fields=fields)
예제 #13
0
 def get_network_gateways(self, context, filters=None, fields=None,
                          sorts=None, limit=None, marker=None,
                          page_reverse=False):
     marker_obj = db_utils.get_marker_obj(self,
         context, 'network_gateway', limit, marker)
     return model_query.get_collection(context, nsx_models.NetworkGateway,
                                       self._make_network_gateway_dict,
                                       filters=filters, fields=fields,
                                       sorts=sorts, limit=limit,
                                       marker_obj=marker_obj,
                                       page_reverse=page_reverse)
예제 #14
0
 def get_port_pair_groups(self, context, filters=None, fields=None,
                          sorts=None, limit=None, marker=None,
                          page_reverse=False):
     marker_obj = db_utils.get_marker_obj(self, context, 'port_pair_group',
                                          limit, marker)
     return model_query.get_collection(
         context, PortPairGroup,
         self._make_port_pair_group_dict,
         filters=filters, fields=fields,
         sorts=sorts,
         limit=limit, marker_obj=marker_obj,
         page_reverse=page_reverse)
예제 #15
0
 def get_port_chains(self, context, filters=None, fields=None,
                     sorts=None, limit=None,
                     marker=None, page_reverse=False, default_sg=False):
     marker_obj = db_utils.get_marker_obj(self, context, 'port_chain',
                                          limit, marker)
     return model_query.get_collection(
         context, PortChain,
         self._make_port_chain_dict,
         filters=filters, fields=fields,
         sorts=sorts,
         limit=limit, marker_obj=marker_obj,
         page_reverse=page_reverse)
예제 #16
0
 def get_reachabilityquicktests(self,
                                context,
                                filters=None,
                                fields=None,
                                sorts=None,
                                limit=None,
                                marker=None,
                                page_reverse=False):
     reachabilityquicktests = \
         model_query.get_collection(context, ReachabilityQuickTest,
                                    self._make_reachabilityquicktest_dict,
                                    filters=filters, fields=fields)
     return reachabilityquicktests
예제 #17
0
 def get_service_graphs(self, context, filters=None,
                        fields=None, sorts=None, limit=None,
                        marker=None, page_reverse=False):
     """Get Service Graphs."""
     marker_obj = db_utils.get_marker_obj(self, context,
                                          'service_graph', limit, marker)
     return model_query.get_collection(
         context, ServiceGraph,
         self._make_service_graph_dict,
         filters=filters, fields=fields,
         sorts=sorts,
         limit=limit, marker_obj=marker_obj,
         page_reverse=page_reverse)
예제 #18
0
 def get_flow_classifiers(self, context, filters=None, fields=None,
                          sorts=None, limit=None, marker=None,
                          page_reverse=False):
     marker_obj = db_utils.get_marker_obj(self, context, 'flow_classifier',
                                          limit, marker)
     return model_query.get_collection(
         context,
         FlowClassifier,
         self._make_flow_classifier_dict,
         filters=filters, fields=fields,
         sorts=sorts,
         limit=limit, marker_obj=marker_obj,
         page_reverse=page_reverse)
 def get_networktemplates(self,
                          context,
                          filters=None,
                          fields=None,
                          sorts=None,
                          limit=None,
                          marker=None,
                          page_reverse=False):
     networktemplates = \
         model_query.get_collection(context, NetworkTemplate,
                                    self._make_networktemplate_dict,
                                    filters=filters, fields=fields)
     return networktemplates
예제 #20
0
    def get_gateway_devices(self, context, filters=None, fields=None,
                            sorts=None, limit=None, marker=None,
                            page_reverse=False):
        marker_obj = db_utils.get_marker_obj(self, context, 'gateway_device',
                                             limit, marker)

        return model_query.get_collection(context,
                                          GatewayDevice,
                                          self._make_gateway_device_dict,
                                          filters=filters, fields=fields,
                                          sorts=sorts,
                                          limit=limit, marker_obj=marker_obj,
                                          page_reverse=page_reverse)
예제 #21
0
 def get_switchport_mappings(self, context, filters=None, fields=None,
                             sorts=None, limit=None, marker=None,
                             page_reverse=False):
     marker_obj = lib_db_utils.get_marker_obj(self, context,
                                              'switchport_mappings',
                                              limit, marker)
     return lib_model_query.get_collection(
         context,
         nuage_models.NuageSwitchportMapping,
         self._make_switchport_mapping_dict,
         filters=filters, fields=fields,
         sorts=sorts, limit=limit, marker_obj=marker_obj,
         page_reverse=page_reverse)
예제 #22
0
 def get_gateway_device_remote_mac_entries(self, context, gateway_device_id,
                                           filters=None, fields=None,
                                           sorts=None, limit=None,
                                           marker=None, page_reverse=False):
     marker_obj = db_utils.get_marker_obj(self, context, 'remote_mac_entry',
                                          limit, marker)
     filters['device_id'] = [gateway_device_id]
     return model_query.get_collection(context,
                                       GatewayRemoteMacTable,
                                       self._make_remote_mac_dict,
                                       filters=filters, fields=fields,
                                       sorts=sorts,
                                       limit=limit, marker_obj=marker_obj,
                                       page_reverse=page_reverse)
 def get_tenantpolicies(self,
                        context,
                        filters=None,
                        fields=None,
                        sorts=None,
                        limit=None,
                        marker=None,
                        page_reverse=False):
     with db_api.CONTEXT_READER.using(context):
         tenantpolicies = \
             model_query.get_collection(context, TenantPolicy,
                                        self._make_tenantpolicy_dict,
                                        filters=filters, fields=fields)
     return tenantpolicies
예제 #24
0
 def get_flow_classifiers(self,
                          context,
                          filters=None,
                          fields=None,
                          sorts=None,
                          limit=None,
                          marker=None,
                          page_reverse=False):
     marker_obj = db_utils.get_marker_obj(self, context, 'flow_classifier',
                                          limit, marker)
     return model_query.get_collection(context,
                                       FlowClassifier,
                                       self._make_flow_classifier_dict,
                                       filters=filters,
                                       fields=fields,
                                       sorts=sorts,
                                       limit=limit,
                                       marker_obj=marker_obj,
                                       page_reverse=page_reverse)
예제 #25
0
 def get_network_gateways(self,
                          context,
                          filters=None,
                          fields=None,
                          sorts=None,
                          limit=None,
                          marker=None,
                          page_reverse=False):
     marker_obj = db_utils.get_marker_obj(self, context, 'network_gateway',
                                          limit, marker)
     return model_query.get_collection(context,
                                       nsx_models.NetworkGateway,
                                       self._make_network_gateway_dict,
                                       filters=filters,
                                       fields=fields,
                                       sorts=sorts,
                                       limit=limit,
                                       marker_obj=marker_obj,
                                       page_reverse=page_reverse)
 def get_project_net_partition_mappings(self,
                                        context,
                                        filters=None,
                                        fields=None,
                                        sorts=None,
                                        limit=None,
                                        marker=None,
                                        page_reverse=False):
     marker_obj = ndb_utils.get_marker_obj(self, context,
                                           'project_net_partition_mapping',
                                           limit, marker)
     return model_query.get_collection(
         context,
         nuage_models.NetPartitionProject,
         functools.partial(self._make_project_net_partition_mapping,
                           context),
         filters=filters,
         fields=fields,
         sorts=sorts,
         limit=limit,
         marker_obj=marker_obj,
         page_reverse=page_reverse)
예제 #27
0
 def _get_collection(self, ctx, model, func):
     return mq.get_collection(ctx, model,
                              models._generate_dict_from_cg_db)
예제 #28
0
 def get_endpoint_groups(self, context, filters=None, fields=None):
     return model_query.get_collection(context,
                                       vpn_models.VPNEndpointGroup,
                                       self._make_endpoint_group_dict,
                                       filters=filters,
                                       fields=fields)
예제 #29
0
 def get_vpnservices(self, context, filters=None, fields=None):
     return model_query.get_collection(context,
                                       vpn_models.VPNService,
                                       self._make_vpnservice_dict,
                                       filters=filters,
                                       fields=fields)
예제 #30
0
 def get_ipsecpolicies(self, context, filters=None, fields=None):
     return model_query.get_collection(context,
                                       vpn_models.IPsecPolicy,
                                       self._make_ipsecpolicy_dict,
                                       filters=filters,
                                       fields=fields)
예제 #31
0
 def get_firewall_policies(self, context, filters=None, fields=None):
     return model_query.get_collection(
         context, FirewallPolicy, self._make_firewall_policy_dict,
         filters=filters, fields=fields)
예제 #32
0
 def get_firewall_rules(self, context, filters=None, fields=None):
     return model_query.get_collection(
         context, FirewallRuleV2, self._make_firewall_rule_dict,
         filters=filters, fields=fields)
예제 #33
0
 def get_bgpvpns(self, context, filters=None, fields=None):
     return model_query.get_collection(context,
                                       BGPVPN,
                                       self._make_bgpvpn_dict,
                                       filters=filters,
                                       fields=fields)
예제 #34
0
 def _get_branches(self, context, filters):
     return model_query.get_collection(
         context, GraphChainAssoc,
         self._make_graph_chain_assoc_dict,
         filters=filters)
예제 #35
0
 def _get_port_security_group_bindings(self, context,
                                       filters=None, fields=None):
     return model_query.get_collection(
         context, sg_models.SecurityGroupPortBinding,
         self._make_security_group_binding_dict,
         filters=filters, fields=fields)