示例#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._notifier = n_rpc.get_notifier('network')
        # use plugin's dhcp notifier, if this is already instantiated
        agent_notifiers = getattr(plugin, 'agent_notifiers', {})
        self._dhcp_agent_notifier = (agent_notifiers.get(
            const.AGENT_TYPE_DHCP) or dhcp_rpc_agent_api.DhcpAgentNotifyAPI())
        if cfg.CONF.notify_nova_on_port_data_changes:
            from neutron.notifiers import nova
            self._nova_notifier = nova.Notifier()
        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 exceptions.Invalid(
                    _("Native pagination depend on native sorting"))
            if not self._allow_sorting:
                LOG.info(
                    _LI("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)
示例#2
0
 def _nova_notify(self, action, resource, *args):
     action_resource = '%s_%s' % (action, resource)
     if not hasattr(self, '_nova_notifier'):
         # this is scoped to avoid a dependency on nova client when nova
         # notifications aren't enabled
         from neutron.notifiers import nova
         self._nova_notifier = nova.Notifier()
     self._nova_notifier.send_network_change(action_resource, *args)
示例#3
0
    def test_endpoint_types(self, mock_client):
        nova.Notifier()
        mock_client.assert_called_once_with(
                                        nova.NOVA_API_VERSION,
                                        session=mock.ANY,
                                        region_name=cfg.CONF.nova.region_name,
                                        endpoint_type='public',
                                        extensions=mock.ANY)

        mock_client.reset_mock()
        cfg.CONF.set_override('endpoint_type', 'internal', 'nova')
        nova.Notifier()
        mock_client.assert_called_once_with(
                                        nova.NOVA_API_VERSION,
                                        session=mock.ANY,
                                        region_name=cfg.CONF.nova.region_name,
                                        endpoint_type='internal',
                                        extensions=mock.ANY)
示例#4
0
    def setUp(self, plugin=None):
        super(TestNovaNotify, self).setUp()

        class FakePlugin(object):
            def get_port(self, context, port_id):
                device_id = '32102d7b-1cf4-404d-b50a-97aae1f55f87'
                return {'device_id': device_id, 'device_owner': 'compute:None'}

        self.nova_notifier = nova.Notifier()
        self.nova_notifier._plugin_ref = FakePlugin()
示例#5
0
    def setUp(self, plugin=None):
        super(TestNovaNotify, self).setUp()

        class FakePlugin(object):
            def get_port(self, context, port_id):
                return {'device_id': 'instance_uuid',
                        'device_owner': 'compute:None'}

        self.nova_notifier = nova.Notifier()
        self.nova_notifier._plugin_ref = FakePlugin()
示例#6
0
 def __init__(self):
     if cfg.CONF.notify_nova_on_port_status_changes:
         from neutron.notifiers import nova
         # NOTE(arosen) These event listeners are here to hook into when
         # port status changes and notify nova about their change.
         self.nova_notifier = nova.Notifier()
         event.listen(models_v2.Port, 'after_insert',
                      self.nova_notifier.send_port_status)
         event.listen(models_v2.Port, 'after_update',
                      self.nova_notifier.send_port_status)
         event.listen(models_v2.Port.status, 'set',
                      self.nova_notifier.record_port_status_changed)
示例#7
0
    def setUp(self, plugin=None):
        super(TestNovaNotify, self).setUp()

        class FakePlugin(object):
            def get_port(self, context, port_id):
                device_id = '32102d7b-1cf4-404d-b50a-97aae1f55f87'
                return {
                    'device_id': device_id,
                    'device_owner': DEVICE_OWNER_COMPUTE
                }

        self.nova_notifier = nova.Notifier()
        directory.add_plugin(n_const.CORE, FakePlugin())
示例#8
0
    def setUp(self, plugin=None):
        super(TestNovaNotify, self).setUp()
        self.ctx = n_ctx.get_admin_context()
        self.port_uuid = uuidutils.generate_uuid()

        class FakePlugin(object):
            def get_port(self, context, port_id):
                device_id = '32102d7b-1cf4-404d-b50a-97aae1f55f87'
                return {'device_id': device_id,
                        'device_owner': DEVICE_OWNER_COMPUTE,
                        'id': port_id}

        self.nova_notifier = nova.Notifier()
        directory.add_plugin(plugin_constants.CORE, FakePlugin())
示例#9
0
 def _nova_notifier(self):
     return nova.Notifier()
    def __init__(self,
                 plugin,
                 collection,
                 resource,
                 attr_info,
                 allow_bulk=False,
                 member_actions=None,
                 parent=None,
                 allow_pagination=False,
                 allow_sorting=False):
        """  控制器初始化 add by ;luoyibing
       :param  allowbulk 是否允许批量?
       :param  collection  "subnet"
       :param  resource  "subnet"
       :param  attr_info
       :param plugin   插件信息
                {
                 agent_notifters:{"DHCP agent":"DHCCPAgent***","L3 agent":"***","Loadbalancer agent":“**”}
                 ,extension_manager:
                 ,mechaism manager 含义指 ?
                 ,network schedule......
        :param member_actions
        resource
        """
        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._notifier = n_rpc.get_notifier(
            'network'
        )  #建立根据network.controller 名称通知的发布者:具体过程调用notifier.py中prepare方法实现
        # use plugin's dhcp notifier, if this is already instantiated
        agent_notifiers = getattr(plugin, 'agent_notifiers',
                                  {})  #从插件中获取agent_notitfiers
        self._dhcp_agent_notifier = (  #agent_notifiers中获取dhcp agent或者 DhcpAgentNotifyAPI
            agent_notifiers.get(const.AGENT_TYPE_DHCP)
            or dhcp_rpc_agent_api.DhcpAgentNotifyAPI())
        if cfg.CONF.notify_nova_on_port_data_changes:  #neutron.conf配置文件中配置项
            from neutron.notifiers import nova
            self._nova_notifier = nova.Notifier()  #引入通知计算节点的Notifier
        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 exceptions.Invalid(
                    _("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)  #??创建对应的资源handers
示例#11
0
def _get_client():
    global client
    if client is None:
        client = n_nova.Notifier().nclient
    return client
示例#12
0
 def __init__(self):
     self.nclient = n_nova.Notifier().nclient