Record a little code fragment of Neutron server (IceHouse)

来源:互联网 发布:教育部直属高校 知乎 编辑:程序博客网 时间:2024/04/30 14:41

class APIRouter(wsgi.Router):

    @classmethod
    def factory(cls, global_config, **local_config):
        return cls(**local_config)

    def __init__(self, **local_config):
        mapper = routes_mapper.Mapper()
        plugin = manager.NeutronManager.get_plugin()
        ext_mgr = extensions.PluginAwareExtensionManager.get_instance()
        ext_mgr.extend_resources("2.0", attributes.RESOURCE_ATTRIBUTE_MAP)

 

 

extensions.py#616

    @classmethod
    def get_instance(cls):
        if cls._instance is None:
            cls._instance = cls(get_extensions_path(),
                                manager.NeutronManager.get_service_plugins())
        return cls._instance

 

#neutron.conf
#service_plugins =
#neutron.services.l3_router.l3_router_plugin.L3RouterPlugin,
#neutron.services.loadbalancer.plugin.LoadBalancerPlugin,
#neutron.services.vpn.plugin.VPNDriverPlugin,
#neutron.services.firewall.fwaas_plugin.FirewallPlugin
   

manager.NeutronManager.get_service_plugins()
#{'L3_ROUTER_NAT':<neutron.services.l3_router.l3_router_plugin.L3RouterPlugin object at 0x2c91850>,
#'CORE': <neutron.plugins.ml2.plugin.Ml2Plugin object at 0x3715f50>,

#'VPN': <neutron.services.vpn.plugin.VPNDriverPlugin object at 0x40c9c50>,
#'LOADBALANCER': <neutron.services.loadbalancer.plugin.LoadBalancerPlugin object at 0x3bf33d0>,
#'FIREWALL': <neutron.services.firewall.fwaas_plugin.FirewallPlugin object at 0x420b690>}

 

 

====================

#db.l3_db.py

def create_router(self, context, router):

.................router_db=Router(..)  #Router class....

return self._make_router_dict(router_db, process_extensions=False)

 

#db.l3_db.py

    def _make_router_dict(self, router, fields=None,
                          process_extensions=True):
        res = {'id': router['id'],
               'name': router['name'],
               'tenant_id': router['tenant_id'],
               'admin_state_up': router['admin_state_up'],
               'status': router['status'],
               EXTERNAL_GW_INFO: None,
               'gw_port_id': router['gw_port_id']}
        if router['gw_port_id']:
            nw_id = router.gw_port['network_id']
            res[EXTERNAL_GW_INFO] = {'network_id': nw_id}
        # NOTE(salv-orlando): The following assumes this mixin is used in a
        # class inheriting from CommonDbMixin, which is true for all existing
        # plugins.
        if process_extensions:
            self._apply_dict_extend_functions(
                l3.ROUTERS, res, router)
        return self._fields(res, fields)

 #db.db_base_plugin_v2.py

    def _apply_dict_extend_functions(self, resource_type,
                                     response, db_object): #routers,res, router
        for func in self._dict_extend_functions.get(
            resource_type, []):
            args = (response, db_object)
            if isinstance(func, basestring):
                func = getattr(self, func, None)
            else:
                # must call unbound method - use self as 1st argument
                args = (self,) + args
            if func:
                func(*args)

 

#db.db_base_plugin_v2.py    ----> _dict_extend_functions={} init in CommonDbMixin class

    @classmethod
    def register_dict_extend_funcs(cls, resource, funcs):
        cur_funcs = cls._dict_extend_functions.get(resource, [])
        cur_funcs.extend(funcs)
        cls._dict_extend_functions[resource] = cur_funcs



1.0 #db.extraoute_db.py

class ExtraRoute_db_mixin(l3_db.L3_NAT_db_mixin):
    """Mixin class to support extra route configuration on router."""


    def _extend_router_dict_extraroute(self, router_res, router_db):
        router_res['routes'] = (ExtraRoute_db_mixin.
                                _make_extra_route_list(
                                    router_db['route_list']
                                ))


    db_base_plugin_v2.NeutronDbPluginV2.register_dict_extend_funcs(
        l3.ROUTERS, ['_extend_router_dict_extraroute']) 


#2.0 db.l3_gwmode_db.py

class L3_NAT_db_mixin(l3_db.L3_NAT_db_mixin):
    """Mixin class to add configurable gateway modes."""


    # Register dict extend functions for ports and networks
    db_base_plugin_v2.NeutronDbPluginV2.register_dict_extend_funcs(
        l3.ROUTERS, ['_extend_router_dict_gw_mode'])


 

0 0
原创粉丝点击