分享

Glance 源码分析(2) – 配置文件

xioaxu790 发表于 2014-12-22 20:48:06 [显示全部楼层] 只看大图 回帖奖励 阅读模式 关闭右栏 1 19267
问题导读
1、 glance-api 会读取哪些配置文件?
2、glance 中的配置文件通过什么来调用的?
3、 python paste 模块如何使用?





这里我们会分析 glance-api 读取以下两个配置文件
  • glance-api.conf: glance-api 的用户配置文件
  • glance-api-paste.ini: glance-api 的 WSGI 配置文件





Table of Contents
  • glance-api.conf
  • glance-api-paste.ini


glance-api.conf
该配置文件的读取是利用 oslo 模块来实现的, oslo 提供了 .ini 格式的配置 文件的解析, 被所有 OpenStack 模块用来解析配置文件.

oslo 的用法很简单, 下面举个简单的例子:
  1. from oslo.config import cfg
  2. default_opts = [
  3.     cfg.StrOpt('bind_host',
  4.                default='0.0.0.0',
  5.                help='IP address to listen on'),
  6.     cfg.IntOpt('bind_port',
  7.                default=9292,
  8.                help='Port number to listen on')
  9. ]
  10. app_opt = cfg.StrOpt('name',
  11.                      default='blog',
  12.                      help='name of this app')
  13. # cfg.CONF 是在 oslo.cfg 模块中的一个全局变量, 首先我们需要得到一个它的引用
  14. # 然后调用 register_opt() 注册我们需要解析的配置项, 或者使用 register_opts()
  15. # 同时注册多个配置项
  16. # 如果配置文件中可以找到配置项, 那么使用配置项中的值, 不然使用注册该配置项时指定
  17. # 的默认值
  18. CONF = cfg.CONF
  19. CONF.register_opt(app_opt, group='app')
  20. CONF.register_opts(default_opts)
  21. CONF(default_config_files=['app.conf'])
  22. # 使用的时候可以用 CONF.cfgname 来使用, 如果该 cfgname 不在 [DEFAULT] 段下,
  23. # 那么使用 CONF.section.cfgname 来引用
  24. print CONF.items()
  25. print CONF.app.name
  26. print CONF.bind_host
  27. print CONF.bind_port
复制代码

  1. # file: app.conf
  2. [DEFAULT]
  3. bind_port = 8080
  4. [app]
  5. name = test
复制代码

  1. # python test.py
  2. [('bind_port', 8080), ('config_dir', None), ('config_file', ['app.conf']), ('bind_host', '0.0.0.0'), ('app', <oslo.config.cfg.GroupAttr object at 0x7fa4a3d75c50>)]
  3. 0.0.0.0
  4. 8080
  5. test
复制代码



那么问题来了… 前面讲过, glance 中的配置文件通过 config.parse_args() 来调用的, 也就是所有的配置都是在 glance.common.config:parse_args() 中完成的, 通过上面的分析, 这个函数其实很简单, 这里就不深入探讨了. 总之, 以后, glance 的各个模块在想访问用户提供的配置的时候, 只需要使用类似以下的代码就可以了:
  1. from oslo.config import cfg
  2. CONF = cfg.CONF
  3. print CONF.enable_v2_api
复制代码


glance-api-paste.ini

该内容和 glance 无关, 只要搞懂了 python paste 模块的用法, 就很简单了. 关于 paste 模块的使用说明, 请参考 python paste.deploy 探索

下面把之前在框架那里的内容再贴一份:
1.png



API 框架
  1. [pipeline:glance-api-keystone]
  2. pipeline = versionnegotiation authtoken context rootapp
  3. [filter:versionnegotiation]
  4. paste.filter_factory = glance.api.middleware.version_negotiation:VersionNegotiationFilter.factory
  5. [filter:authtoken]
  6. paste.filter_factory = keystoneclient.middleware.auth_token:filter_factory
  7. delay_auth_decision = true
  8. [filter:context]
  9. paste.filter_factory = glance.api.middleware.context:ContextMiddleware.factory
  10. [composite:rootapp]
  11. paste.composite_factory = glance.api:root_app_factory
  12. /: apiversions
  13. /v1: apiv1app
  14. /v2: apiv2app
复制代码




已有(1)人评论

跳转到指定楼层
355815741 发表于 2014-12-23 09:02:54
好东西,学习学习,谢谢分享~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条