예제 #1
0
def create_consumers(endpoints, prefix, topic_details, start_listening=True):
    """Create agent RPC consumers.

    :param endpoints: The list of endpoints to process the incoming messages.
    :param prefix: Common prefix for the plugin/agent message queues.
    :param topic_details: A list of topics. Each topic has a name, an
                          operation, and an optional host param keying the
                          subscription to topic.host for plugin calls.
    :param start_listening: if True, it starts the processing loop

    :returns: A common Connection.
    """

    connection = n_rpc.Connection()
    for details in topic_details:
        topic, operation, node_name = itertools.islice(
            itertools.chain(details, [None]), 3)

        topic_name = topics.get_topic_name(prefix, topic, operation)
        connection.create_consumer(topic_name, endpoints, fanout=True)
        if node_name:
            node_topic_name = '%s.%s' % (topic_name, node_name)
            connection.create_consumer(node_topic_name,
                                       endpoints,
                                       fanout=False)
    if start_listening:
        connection.consume_in_threads()
    return connection
예제 #2
0
파일: rpc.py 프로젝트: igordcard/neutron
 def __init__(self, topic=topics.AGENT):
     self.topic = topic
     self.topic_l2pop_update = topics.get_topic_name(topic,
                                                     topics.L2POPULATION,
                                                     topics.UPDATE)
     target = oslo_messaging.Target(topic=topic, version='1.0')
     self.client = n_rpc.get_client(target)
예제 #3
0
    def __init__(self, topic):
        self.topic = topic
        self.topic_network_delete = topics.get_topic_name(topic,
                                                          topics.NETWORK,
                                                          topics.DELETE)
        self.topic_port_update = topics.get_topic_name(topic,
                                                       topics.PORT,
                                                       topics.UPDATE)
        self.topic_port_delete = topics.get_topic_name(topic,
                                                       topics.PORT,
                                                       topics.DELETE)
        self.topic_network_update = topics.get_topic_name(topic,
                                                          topics.NETWORK,
                                                          topics.UPDATE)

        target = oslo_messaging.Target(topic=topic, version='1.0')
        self.client = n_rpc.get_client(target)
예제 #4
0
 def ask_agent_to_delete_flow_rules(self, context, flow_rule):
     LOG.debug('Ask agent on the specific host to delete flows ')
     LOG.debug('flow_rule: %s', flow_rule)
     host = flow_rule.get('host')
     cctxt = self.client.prepare(
         topic=topics.get_topic_name(
             self.topic, sfc_topics.PORTFLOW, topics.DELETE),
         server=host)
     cctxt.cast(context, 'delete_flow_rules', flowrule_entries=flow_rule)
 def test_enhanced_sg_provider_updated(self):
     rpcapi = ovsvapp_rpc.OVSvAppAgentNotifyAPI(topics.AGENT)
     self._test_rpc_api(rpcapi,
                        topics.get_topic_name(topics.AGENT,
                                              self.sg_topic,
                                              topics.UPDATE),
                        'enhanced_sg_provider_updated', rpc_method='cast',
                        fanout=True,
                        network_id=FAKE_NETWORK_ID)
예제 #6
0
 def security_groups_rule_updated(self, context, security_groups):
     sg_topic = ovsvapp_const.OVSVAPP + '_' + topics.SECURITY_GROUP
     cctxt = self.client.prepare(
         topic=topics.get_topic_name(self.topic,
                                     sg_topic,
                                     topics.UPDATE),
         fanout=True)
     cctxt.cast(context, 'security_groups_rule_updated',
                security_groups=security_groups)
예제 #7
0
파일: test_rpc.py 프로젝트: cubeek/neutron
 def test_port_delete(self):
     rpcapi = plugin_rpc.AgentNotifierApi(topics.AGENT)
     self._test_rpc_api(
         rpcapi,
         topics.get_topic_name(topics.AGENT,
                               topics.PORT,
                               topics.DELETE),
         'port_delete', rpc_method='cast',
         fanout=True, port_id='fake_port')
예제 #8
0
 def enhanced_sg_provider_updated(self, context, network_id):
     sg_topic = ovsvapp_const.OVSVAPP + '_' + topics.SECURITY_GROUP
     cctxt = self.client.prepare(
         topic=topics.get_topic_name(self.topic,
                                     sg_topic,
                                     topics.UPDATE),
         fanout=True)
     cctxt.cast(context, 'enhanced_sg_provider_updated',
                network_id=network_id)
예제 #9
0
파일: test_rpc.py 프로젝트: cubeek/neutron
 def test_delete_network(self):
     rpcapi = plugin_rpc.AgentNotifierApi(topics.AGENT)
     self._test_rpc_api(
             rpcapi,
             topics.get_topic_name(topics.AGENT,
                                   topics.NETWORK,
                                   topics.DELETE),
             'network_delete', rpc_method='cast',
             fanout=True, network_id='fake_request_spec')
예제 #10
0
 def security_groups_provider_updated(self, context,
                                      devices_to_update=None):
     sg_topic = ovsvapp_const.OVSVAPP + '_' + topics.SECURITY_GROUP
     cctxt = self.client.prepare(
         topic=topics.get_topic_name(self.topic,
                                     sg_topic,
                                     topics.UPDATE),
         fanout=True)
     cctxt.cast(context, 'security_groups_provider_updated',
                devices_to_update=devices_to_update)
예제 #11
0
파일: test_rpc.py 프로젝트: cubeek/neutron
 def test_tunnel_delete(self):
     rpcapi = plugin_rpc.AgentNotifierApi(topics.AGENT)
     self._test_rpc_api(
             rpcapi,
             topics.get_topic_name(topics.AGENT,
                                   type_tunnel.TUNNEL,
                                   topics.DELETE),
             'tunnel_delete', rpc_method='cast',
             fanout=True,
             tunnel_ip='fake_ip', tunnel_type='gre')
 def test_device_update(self):
     rpcapi = ovsvapp_rpc.OVSvAppAgentNotifyAPI(topics.AGENT)
     self._test_rpc_api(rpcapi,
                        topics.get_topic_name(topics.AGENT,
                                              self.cluster_device_topic,
                                              topics.UPDATE),
                        'device_update', rpc_method='cast',
                        fanout=True,
                        device_data='fake_device_data',
                        cluster_id=FAKE_CLUSTER_ID)
 def test_device_delete(self):
     rpcapi = ovsvapp_rpc.OVSvAppAgentNotifyAPI(topics.AGENT)
     self._test_rpc_api(rpcapi,
                        topics.get_topic_name(topics.AGENT,
                                              self.cluster_device_topic,
                                              topics.DELETE),
                        'device_delete', rpc_method='cast',
                        fanout=True,
                        network_info='fake_network_info',
                        host=FAKE_HOST,
                        cluster_id=FAKE_CLUSTER_ID)
예제 #14
0
파일: test_rpc.py 프로젝트: cubeek/neutron
 def test_port_update(self):
     rpcapi = plugin_rpc.AgentNotifierApi(topics.AGENT)
     self._test_rpc_api(
             rpcapi,
             topics.get_topic_name(topics.AGENT,
                                   topics.PORT,
                                   topics.UPDATE),
             'port_update', rpc_method='cast',
             fanout=True, port='fake_port',
             network_type='fake_network_type',
             segmentation_id='fake_segmentation_id',
             physical_network='fake_physical_network')
 def test_device_create(self):
     rpcapi = ovsvapp_rpc.OVSvAppAgentNotifyAPI(topics.AGENT)
     self._test_rpc_api(rpcapi,
                        topics.get_topic_name(topics.AGENT,
                                              self.cluster_device_topic,
                                              topics.CREATE),
                        'device_create', rpc_method='cast',
                        fanout=True,
                        device='fake_device',
                        ports='fake_ports',
                        sg_rules='fake_sg_rules',
                        cluster_id=FAKE_CLUSTER_ID)
예제 #16
0
 def _get_security_group_topic(self, host=None):
     return topics.get_topic_name(topics.AGENT, dvs_const.DVS,
                                  topics.UPDATE, host)
예제 #17
0
 def _get_tunnel_update_topic(self):
     return topics.get_topic_name(self.topic,
                                  TUNNEL,
                                  topics.UPDATE)
예제 #18
0
 def _get_tunnel_delete_topic(self):
     return topics.get_topic_name(self.topic,
                                  TUNNEL,
                                  topics.DELETE)
예제 #19
0
 def _get_tunnel_update_topic(self):
     return topics.get_topic_name(self.topic,
                                  TUNNEL,
                                  topics.UPDATE)
예제 #20
0
 def _get_security_group_topic(self):
     return topics.get_topic_name(self.topic,
                                  topics.SECURITY_GROUP,
                                  topics.UPDATE)
예제 #21
0
 def _get_tunnel_delete_topic(self):
     return topics.get_topic_name(self.topic, TUNNEL, topics.DELETE)
예제 #22
0
 def _get_security_group_topic(self):
     return topics.get_topic_name(self.topic, topics.SECURITY_GROUP,
                                  topics.UPDATE)
예제 #23
0
 def _get_device_topic(self, action, cluster_id):
     cluster_device_topic = ovsvapp_utils.get_cluster_based_topic(
         cluster_id, ovsvapp_const.DEVICE)
     return topics.get_topic_name(self.topic,
                                  cluster_device_topic,
                                  action)
예제 #24
0
 def _get_dvr_update_topic(self):
     return topics.get_topic_name(self.topic, topics.DVR, topics.UPDATE)
예제 #25
0
파일: dvr_rpc.py 프로젝트: huntxu/neutron
 def _get_dvr_update_topic(self):
     return topics.get_topic_name(self.topic,
                                  topics.DVR,
                                  topics.UPDATE)
 def _get_security_group_topic(self, host=None):
     return topics.get_topic_name(topics.AGENT,
                                  dvs_const.DVS,
                                  topics.UPDATE, host)