openstack之ml2源码分析-Ml2Plugin初始化(一)

博客围绕OpenStack中的ML2插件展开,先从ML2Plugin类的__init__初始化方法入手,介绍加载驱动、初始化数据库等过程,还提及读取配置文件完成初始化操作。ML2作为核心插件,主要进行network/subnet/port的增删改查,后续将以port为例做源码分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ml2入口:

ml2 = neutron.plugins.ml2.plugin:Ml2Plugin

首先看下ML2Plugin这个类,从__init__初始化方法看起:

    def __init__(self):
        # First load drivers, then initialize DB, then initialize drivers
        self.type_manager = managers.TypeManager()
        self.extension_manager = managers.ExtensionManager()
        self.mechanism_manager = managers.MechanismManager()
        super(Ml2Plugin, self).__init__()
        self.type_manager.initialize()
        self.extension_manager.initialize()
        self.mechanism_manager.initialize()
        self._setup_dhcp()
        self._start_rpc_notifiers()
        self.add_agent_status_check_worker(self.agent_health_check)
        self.add_workers(self.mechanism_manager.get_workers())
        self._verify_service_plugins_requirements()
        LOG.info("Modular L2 Plugin initialization complete")

从第一行的注册就可以看懂这个方法了,“加载驱动,初始化数据库,初始化驱动”;以type为例,可以跟踪源码看一下大概过程:

进入这个方法:

self.type_manager = managers.TypeManager()

这个managers是import的,返回了一个typemanager对象实例,看下TypeManage这个类的初始化:

    def __init__(self):
        # Mapping from type name to DriverManager
        self.drivers = {}

        LOG.info("Configured type driver names: %s",
                 cfg.CONF.ml2.type_drivers)
        super(TypeManager, self).__init__('neutron.ml2.type_drivers',
                                          cfg.CONF.ml2.type_drivers,
                                          invoke_on_load=True)
        LOG.info("Loaded type driver names: %s", self.names())
        self._register_types()
        self._check_tenant_network_types(cfg.CONF.ml2.tenant_network_types)
        self._check_external_network_type(cfg.CONF.ml2.external_network_type)

首先是调用父类,完成插件的加载,简单说就是通过cfg.CONF.ml2.type_drivers将配置文件(etc/neutorn/plugins/ml2/ml2_conf.ini)中的配置项type_drivers读入;继而完成注册,检查配置文件中的tenant_network_types(需同type_drivers的类型一致,不能出现额外type)和external_network_type(默认为none)。

现在返回Ml2Plugin类,_setup_dhcp()初始化组件,支持DHCP代理功能;以及开启RPC通知机制......

总之是读取两个配置文件(ml2_conf.ini和neutron.conf)的配置项完成初始化操作,详细可参考各配置项的注解。

ml2作为openstack中的core plugin,主要完成network/subnet/port的增删改查系列操作,接下来会以port为例,进行源码分析。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值