Beispiel #1
0
    def __init__(self,
                 plugin,
                 collection,
                 resource,
                 attr_info,
                 allow_bulk=False,
                 member_actions=None,
                 parent=None,
                 allow_pagination=False,
                 allow_sorting=False):
        if member_actions is None:
            member_actions = []
        self._plugin = plugin
        self._collection = collection.replace('-', '_')
        self._resource = resource.replace('-', '_')
        self._attr_info = attr_info
        self._allow_bulk = allow_bulk
        self._allow_pagination = allow_pagination
        self._allow_sorting = allow_sorting
        self._native_bulk = self._is_native_bulk_supported()
        self._native_pagination = self._is_native_pagination_supported()
        self._native_sorting = self._is_native_sorting_supported()
        self._policy_attrs = [
            name for (name, info) in self._attr_info.items()
            if info.get('required_by_policy')
        ]
        self._publisher_id = notifier_api.publisher_id('network')
        self._dhcp_agent_notifier = dhcp_rpc_agent_api.DhcpAgentNotifyAPI()
        self._member_actions = member_actions
        self._primary_key = self._get_primary_key()
        if self._allow_pagination and self._native_pagination:
            # Native pagination need native sorting support
            if not self._native_sorting:
                raise Exception(
                    _("Native pagination depend on native "
                      "sorting"))
            if not self._allow_sorting:
                LOG.info(
                    _("Allow sorting is enabled because native "
                      "pagination requires native sorting"))
                self._allow_sorting = True

        if parent:
            self._parent_id_name = '%s_id' % parent['member_name']
            parent_part = '_%s' % parent['member_name']
        else:
            self._parent_id_name = None
            parent_part = ''
        self._plugin_handlers = {
            self.LIST: 'get%s_%s' % (parent_part, self._collection),
            self.SHOW: 'get%s_%s' % (parent_part, self._resource)
        }
        for action in [self.CREATE, self.UPDATE, self.DELETE]:
            self._plugin_handlers[action] = '%s%s_%s' % (action, parent_part,
                                                         self._resource)
Beispiel #2
0
 def _setup_rpc(self):
     self.notifier = rpc.AgentNotifierApi(topics.AGENT)
     self.dhcp_agent_notifier = dhcp_rpc_agent_api.DhcpAgentNotifyAPI()
     self.l3_agent_notifier = l3_rpc_agent_api.L3AgentNotify
     self.callbacks = rpc.RpcCallbacks(self.notifier)
     self.topic = topics.PLUGIN
     self.conn = c_rpc.create_connection(new=True)
     self.dispatcher = self.callbacks.create_rpc_dispatcher()
     self.conn.create_consumer(self.topic, self.dispatcher,
                               fanout=False)
     self.conn.consume_in_thread()
Beispiel #3
0
 def setUp(self):
     self.dhcp_notifier = dhcp_rpc_agent_api.DhcpAgentNotifyAPI()
     self.dhcp_notifier_cls_p = mock.patch(
         'quantum.api.rpc.agentnotifiers.dhcp_rpc_agent_api.'
         'DhcpAgentNotifyAPI')
     self.dhcp_notifier_cls = self.dhcp_notifier_cls_p.start()
     self.dhcp_notifier_cls.return_value = self.dhcp_notifier
     super(OvsDhcpAgentNotifierTestCase, self).setUp(self.plugin_str)
     ext_mgr = extensions.PluginAwareExtensionManager.get_instance()
     self.ext_api = test_extensions.setup_extensions_middleware(ext_mgr)
     self.adminContext = context.get_admin_context()
     self.addCleanup(self.dhcp_notifier_cls_p.stop)
Beispiel #4
0
 def setup_rpc(self):
     # RPC support
     self.topic = topics.PLUGIN
     self.conn = rpc.create_connection(new=True)
     self.notifier = AgentNotifierApi(topics.AGENT)
     self.dhcp_agent_notifier = dhcp_rpc_agent_api.DhcpAgentNotifyAPI()
     self.l3_agent_notifier = l3_rpc_agent_api.L3AgentNotify
     self.callbacks = OVSRpcCallbacks(self.notifier)
     self.dispatcher = self.callbacks.create_rpc_dispatcher()
     self.conn.create_consumer(self.topic, self.dispatcher, fanout=False)
     # Consume from all consumers in a thread
     self.conn.consume_in_thread()
 def _setup_rpc(self):
     # RPC support
     self.topic = topics.PLUGIN
     self.rpc_context = context.RequestContext('quantum',
                                               'quantum',
                                               is_admin=False)
     self.conn = rpc.create_connection(new=True)
     self.callbacks = BridgeRpcCallbacks()
     self.dispatcher = self.callbacks.create_rpc_dispatcher()
     self.conn.create_consumer(self.topic, self.dispatcher, fanout=False)
     # Consume from all consumers in a thread
     self.conn.consume_in_thread()
     self.notifier = AgentNotifierApi(topics.AGENT)
     self.dhcp_agent_notifier = dhcp_rpc_agent_api.DhcpAgentNotifyAPI()
     self.l3_agent_notifier = l3_rpc_agent_api.L3AgentNotify
Beispiel #6
0
    def setup_rpc(self):
        self.topic = topics.PLUGIN
        self.conn = rpc.create_connection(new=True)
        self.notifier = NECPluginV2AgentNotifierApi(topics.AGENT)
        self.dhcp_agent_notifier = dhcp_rpc_agent_api.DhcpAgentNotifyAPI()
        self.l3_agent_notifier = l3_rpc_agent_api.L3AgentNotify

        # NOTE: callback_sg is referred to from the sg unit test.
        self.callback_sg = SecurityGroupServerRpcCallback()
        callbacks = [
            NECPluginV2RPCCallbacks(self),
            DhcpRpcCallback(),
            L3RpcCallback(), self.callback_sg,
            agents_db.AgentExtRpcCallback()
        ]
        self.dispatcher = q_rpc.PluginRpcDispatcher(callbacks)
        self.conn.create_consumer(self.topic, self.dispatcher, fanout=False)
        # Consume from all consumers in a thread
        self.conn.consume_in_thread()
Beispiel #7
0
 def _destroy_metadata_access_network(self, context, router_id, ports):
     # This will still ensure atomicity on Quantum DB
     with context.session.begin(subtransactions=True):
         if ports:
             meta_port = self._find_metadata_port(context, ports)
             if not meta_port:
                 return
             meta_net_id = meta_port['network_id']
             self.remove_router_interface(context, router_id,
                                          {'port_id': meta_port['id']})
             # Remove network (this will remove the subnet too)
             self.delete_network(context, meta_net_id)
             if cfg.CONF.dhcp_agent_notification:
                 # We need to send a notification to the dhcp agent in
                 # order to stop the metadata agent proxy
                 dhcp_notifier = dhcp_rpc_agent_api.DhcpAgentNotifyAPI()
                 dhcp_notifier.notify(context,
                                      {'network': {
                                          'id': meta_net_id
                                      }}, 'network.delete.end')
Beispiel #8
0
 def _create_metadata_access_network(self, context, router_id):
     # This will still ensure atomicity on Quantum DB
     with context.session.begin(subtransactions=True):
         # Add network
         # Network name is likely to be truncated on NVP
         net_data = {
             'name': 'meta-%s' % router_id,
             'tenant_id': '',  # intentionally not set
             'admin_state_up': True,
             'port_security_enabled': False,
             'shared': False,
             'status': constants.NET_STATUS_ACTIVE
         }
         meta_net = self.create_network(context, {'network': net_data})
         # Add subnet
         subnet_data = {
             'network_id': meta_net['id'],
             'tenant_id': '',  # intentionally not set
             'name': 'meta-%s' % router_id,
             'ip_version': 4,
             'shared': False,
             'cidr': METADATA_SUBNET_CIDR,
             'enable_dhcp': True,
             # Ensure default allocation pool is generated
             'allocation_pools': attributes.ATTR_NOT_SPECIFIED,
             'gateway_ip': METADATA_GATEWAY_IP,
             'dns_nameservers': [],
             'host_routes': []
         }
         meta_sub = self.create_subnet(context, {'subnet': subnet_data})
         self.add_router_interface(context, router_id,
                                   {'subnet_id': meta_sub['id']})
         if cfg.CONF.dhcp_agent_notification:
             # We need to send a notification to the dhcp agent in
             # order to start the metadata agent proxy
             dhcp_notifier = dhcp_rpc_agent_api.DhcpAgentNotifyAPI()
             dhcp_notifier.notify(context, {'network': meta_net},
                                  'network.create.end')
Beispiel #9
0
 def setUp(self):
     self.dhcp_notifier = dhcp_rpc_agent_api.DhcpAgentNotifyAPI()
     self.dhcp_notifier_cls_p = mock.patch(
         'quantum.api.rpc.agentnotifiers.dhcp_rpc_agent_api.'
         'DhcpAgentNotifyAPI')
     self.dhcp_notifier_cls = self.dhcp_notifier_cls_p.start()
     self.dhcp_notifier_cls.return_value = self.dhcp_notifier
     # Save the global RESOURCE_ATTRIBUTE_MAP
     self.saved_attr_map = {}
     for resource, attrs in attributes.RESOURCE_ATTRIBUTE_MAP.iteritems():
         self.saved_attr_map[resource] = attrs.copy()
     super(OvsDhcpAgentNotifierTestCase, self).setUp(self.plugin_str)
     ext_mgr = extensions.PluginAwareExtensionManager.get_instance()
     self.ext_api = test_extensions.setup_extensions_middleware(ext_mgr)
     self.adminContext = context.get_admin_context()
     # Add the resources to the global attribute map
     # This is done here as the setup process won't
     # initialize the main API router which extends
     # the global attribute map
     attributes.RESOURCE_ATTRIBUTE_MAP.update(
         agent.RESOURCE_ATTRIBUTE_MAP)
     self.agentscheduler_dbMinxin = manager.QuantumManager.get_plugin()
     self.addCleanup(self.dhcp_notifier_cls_p.stop)
     self.addCleanup(self.restore_attribute_map)
Beispiel #10
0
 def _send_subnet_update_end(self, context, subnet_id):
     updated_subnet = self.get_subnet(context, subnet_id)
     dhcp_notifier = dhcp_rpc_agent_api.DhcpAgentNotifyAPI()
     dhcp_notifier.notify(context, {'subnet': updated_subnet},
                          'subnet.update.end')