OpenStack源码调试之路(2)——initialize_application模块概括

通过上一篇我们知道了keystone的调试入口,现在我们就跟踪下去,看看在服务启动起来的时候,openstack到底做了一些什么事。首先说明,因为我采用手动apt安装的方式,所以openstack代码均在/usr/lib/python2.7/dist-packages/下,没有特殊说明,我所说的目录都是在这个相对目录下。

进入/keystone/server/wsgi.py,可以找到两个initialize函数:

def initialize_admin_application():
    return initialize_application(name='admin',
                                  config_files=_get_config_files())


def initialize_public_application():
    return initialize_application(name='main',
                                  config_files=_get_config_files())

可以看到,两个函数最终都会调用initialize_application函数,只是name参数传进去的名字不同。那么在相同脚本中找到initialize_application函数

def initialize_application(name,
                           post_log_configured_function=lambda: None,
                           config_files=None):
    #possible_topdir指向/usr/lib/python2.7/dist-packages
	possible_topdir = os.path.normpath(os.path.join(
                                       os.path.abspath(__file__),
                                       os.pardir,
                                       os.pardir,
                                       os.pardir))
	#dev_conf='/usr/lib/python2.7/dist-packages/etc/keystone.conf'
    dev_conf = os.path.join(possible_topdir,
                            'etc',
                            'keystone.conf')
    if not config_files:
        config_files = None
        if os.path.exists(dev_conf):
            config_files = [dev_conf]

    common.configure(config_files=config_files)

    # Log the options used when starting if we're in debug mode...
    if CONF.debug:
        CONF.log_opt_values(log.getLogger(CONF.prog), log.DEBUG)

    post_log_configured_function()

    def loadapp():
        return keystone_service.loadapp(
            'config:%s' % find_paste_config(), name)

    _unused, application = common.setup_backends(
        startup_application_fn=loadapp)

    # setup OSprofiler notifier and enable the profiling if that is configured
    # in Keystone configuration file.
    profiler.setup(name)

    return application

我们先根据其各个调用的名字判断,这个模块应该大致做了四件事,首先获取一些目录,这里很简单,我就直接说了possible_topdir就是我上面所说的安装目录/usr/lib/python2.7/dist-packages/,然后dev_conf目录下不存在keystone.conf文件,所以config_files是None。然后剩下的三件事应该是配置文件,设置后端(即加载application),根据配置文件启动profile。

以一张图来说明initialize_application函数的主要工作:


总的来说,initialize_application就做了四件事,下篇,我们将追踪conf,看看它做了一些什么。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值