OpenStack源码调试之路(3)——配置文件(configure)

前排提示:源码调试中会涉及很多OpenStack的工具库(oslo开头的),建议遇到之后想要了解这些工具库的,请参考这个博主的文章,里面对每个工具库都有介绍

目录

一.keystone.conf.configure模块

二.sql.initialize模块

三.keystone.conf.set_config_defaults模块

四.CONF

五.setup_logging


上一篇我们讲到了initialize_application主要完成四个工作,现在我们进入第一个,也就是common.configure。这个模块在/keystone/server/common.py中

def configure(version=None, config_files=None,
              pre_setup_logging_fn=lambda: None):
    keystone.conf.configure()#此函数在/keystone/conf/__init__.py中
    sql.initialize()
    keystone.conf.set_config_defaults()

    CONF(project='keystone', version=version,
         default_config_files=config_files)

    pre_setup_logging_fn()
    keystone.conf.setup_logging()

    if CONF.insecure_debug:
        LOG.warning(
            'insecure_debug is enabled so responses may include sensitive '
            'information.')

一.keystone.conf.configure模块

首先执行的是keystone.conf.configure模块,此模块在/keystone/conf/__init__.py中,进入此脚本

def configure(conf=None):
	#CONF是一个oslo_config.cfg.ConfigOpts对象
    if conf is None:
        conf = CONF

    conf.register_cli_opt(
        cfg.BoolOpt('standard-threads', default=False,
                    help='Do not monkey-patch threading system modules.'))
    conf.register_cli_opt(
        cfg.StrOpt('pydev-debug-host',
                   help='Host to connect to for remote debugger.'))
    conf.register_cli_opt(
        cfg.PortOpt('pydev-debug-port',
                    help='Port to connect to for remote debugger.'))

    for module in conf_modules:
        module.register_opts(conf)

    # register any non-default auth methods here (used by extensions, etc)
    auth.setup_authentication()

    # add oslo.cache related config options
    cache.configure(conf)

所有的配置工作都是交由oslo_config这个包来完成的,这个包的目的就是作为一个通用工具,专门负责配置文件和命令行给出的参数的处理,具体可以参考一下这篇文章。这个模块源代码也在/usr/lib/python2.7/dist-packages/下。

首先需要说明的就是CONF = cfg.CONF这个对象(所有的OpenStack配置都放于这个全局变量中,论坛中开始也讨论过为什么要使用这个全局变量,后来就成了约定),简单来说,它就是一个全局变量,里面会记录我们所有的配置信息,首先代码会根据命令行和配置文件来设置这个变量,完成以后,就可以通过这个变量获取到我们配置的值。

configure中,首先对命令行输入的参数就行配置,主要由三个register_cli_opt完成,主要是运行线程和调试ip端口的配置。

完成之后便对一系列模块就行配置,这些模块都定义在keystone/conf下,每个模块都代表了一个group,里面定义了这个group包含的配置项,这部分不理解请把上面那篇关于oslo_config的文章看了就明白了。

之后再进行authentication配置,上面循环中对每个模块依次注册时已经有过auth的注册,但都是注册的默认认证方式,这里相当于提供扩展,如果用户需要使用自定义认证方式,就需要在这里注册,同时还需要注册对应的插件,我们安装的OpenStack没有使用第三方认证,所以这里相当于什么也没做。

最后一步执行cache.configure注册与OpenStack缓存相关的东西,OpenStack的缓存由oslo_cache模块负责。

这部分代码如下图所示:

二.sql.initialize模块

接下来是sql.initialize模块,从字面意思来看,应该是初始化数据库了。initialize模块位于/keystone/common/sql/core.py中,如果单从import处看,还真找不到,这就是为什么一定要断点调试的原因了。此模块会调用oslo_db模块来具体处理初始化操作,其中也是首先会注册与配置数据库相关的项,然后会涉及到一个叫osprofiler的模块,这个模块与OpenStack性能调优有关,就是用于采集系统的各种运行状态,然后存入ceilometer、redis、mongodb、elasticsearch等后端,作为系统的监控数据,所以这里就在数据库配置项注册时一起注册了osprofiler相关配置项。这部分代码结构如下图所示:

三.keystone.conf.set_config_defaults模块

keystone.conf.set_config_defaults模块和前面提到的configure模块位于同一脚本中,首先对日志配置项进行注册和设置默认值,然后进行一些额外的设置,包括middleware相关的配置项设置,这里只设置默认值,不注册,注册要等到loadapp才做,不清楚为什么会这样,然后是profiler相关的,这和上面是一样的,最后就是将是否开启cache设置为True。这部分代码如下所示:

四.CONF

此函数的功能就是根据传入的配置文件来设置刚才注册的一堆配置项的值,这里将会覆盖原先设置的默认值。

五.setup_logging

根据配置文件,设置logging,具体会用到oslo工具中的日志工具。

至此,配置完成,整个代码结构图太复杂,放上来看不清,这里放一个百度脑图的架构图:

http://naotu.baidu.com/file/7e182832e790d50c5b8052e6e80a2555?token=34c23af2f25c2bf7

 

 

好了,配置就讲到这里,总的来说,就是读取配置文件keystone.conf和命令行参数,作相应的配置。下篇我们跟踪setup_backends,这应该是最关键的代码,包括了怎么加载application。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值