openstack源码阅读笔记2 配置与oslo_config

原创 2016年08月30日 00:10:42

Openstack提取了一些在多数项目中经常使用的功能,做成了共公的包,这些公共包同样在nova中的各个服务模块大量使用。这此公共包都以oslo开头。

在分析具体代码之前,必须先熟悉这些公共包,以下先对这些共公包结合nova做一下分析,以便在分析具体的服务模块代码时,不必再解释公共包的功能。

Oslo_config包用于解析命令行和配置文件中的配置选项。

 

Oslo_config包是对python标准库中argparse包的增强和包装,要理解oslo_config必须理解argparse包。

argparse分为三个步骤,定义选项,解释命令行,反回解释的结果对象。用户利用结果对象就可以查看选项的具体值,结果对象把它看成是一个普通的对象即可,这个对象的属性就是选项名称,值就是解释出来的具体值。

 

而oslo_config包是对argparse的增强,定义选项方面,用Opt类做了包装,更面向对象,并且用一个容器类(ConfigOpts)来包含选项。

解释选项值方面,除了能从命令行中解释出选项的值外,还能从配置文件中解释出选项的值。而解释出来的结果对象,直接存放在ConfigOpts中,并利用ConfigOpts是类dict的对象,使得可以直接像操作字典一样的操作选项值。所以在openstack中,可以直接用CONF.port这样来获取得port这个选项的值。

 

简单结合nova解释一下:

nova.conf包中,

导入了oslo_config包中的cfg模块,并定义了:

CONF = cfg.CONF
api.register_opts(CONF)
 
#而nova.conf.api模块中
def register_opts(conf):
conf.register_opts(ALL_OPTS)
 
#以上是定义选项。

#在nova.cmd.api中
from nova importconfig
def main():
	config.parse_args(sys.argv)

#在nova.config中
def parse_args(argv, default_config_files=None, configure_db=True,
               init_rpc=True):

    #省略部分
   CONF(argv[1:],
         project='nova',
         version=version.version_string(),
        default_config_files=default_config_files)

#以上是解释选项,直接对命令行做解释,且带了配置文件进去。


CONF(…)直接调用CONFCONF是类ConfigOpts的实例,且类定义有__call__方法,CONF(…)就是调用__call__方法。解释完后,会把结果放在CONF._namespace中。

 

引用选项值,我们是直接用:

CONF.optname 或是CONF.groupname.optname

对于这样的引用,会调用类ConfigOpts中的__getattr__方法,最终就是对CONF._namespace中值的提取。

 

补充说明一下:

cfg.CONF是类cfg.ConfigOpts的一个实例。

cfg中有定义:

CONF=ConfigOpts()

从中可知,cfg.CONF是一个模块单例模式的一个应用。在nova运行的过程中,只会存在一个ConfigOpts实例。

再看ConfigOpts类,是一个继承了collections.Mapping的一个类,即你可以把它当成一个dict看待和操作。

 

 

以下是nova对于配置方面的代码结构

nova.conf包,定义了所有相关服务的选项,每个服务一个模块,如api的选项放在

api.py这个模块下,非常清楚,也集中管理。

nova.cmd包,是所有服务的入口点,必然的,会在这里对具体的配置项做解释,从命令行中,从配置文件中取得配置值,然后解释进CONF实例中,后面即可直接用CONF实例引用配置项的值.

 

配置方面相关的代码就是以上部分,非常容易仿照使用。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

(二)、Openstack 之 oslo.config

今天给大家介绍OpenStack中负责CLI和CONF配置项解析的组件—— Oslo.config。E版本前,这个功能是放在cfg模块中的,后来社区中考虑将OpenStack中共性的组件都剥离出来,统...

openstack 配置文件的读取

http://pudge.cn/2013/03/16/openstack-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E7%9A%84%E8%AF%BB%E5%8F%96...

openstack oslo.config配置解析模块

什么是oslo.config     oslo.config是openstack解析命令行(CLI)或者配置文件(.conf)中配置信息的库.官网地址点击打开链接     安装: $ sudo p...

openstack nova 基础知识——cfg

纠结了两天,才把nova中的配置文件的管理和命令行的解析了解了一个大概,在nova中,很多地方都用到了cfg这个模块。 现在的分析,只是还在表面上,没有深入到实质性的内容,而且,有很多不清楚的地方,...

Openstack Manila源码阅读笔记(一)manilaclient调用过程

Openstack Manila源码阅读笔记(一)manilaclient调用过程

OpenStack配置解析库oslo.config的使用方法

OpenStack的oslo项目旨在独立出系统中可重用的基础功能,Oslo.config组件,主要是来负责CLI和CONF配置项的解析。在老版本之前,这个功能都是是放在cfg模块中的,但是后来社区老大...

OpenStack配置解析库——oslo.config

OpenStack的oslo项目旨在独立出系统中可重用的基础功能,oslo.config就是其中一个被广泛使用的库,该项工作的主要目的就是解析OpenStack中命令行(CLI)或配置文件(.conf...
  • rdstwww
  • rdstwww
  • 2016年01月04日 00:01
  • 293

OpenStack开发基础-oslo.config

The cfg Modulecfg Module来自于OpenStack中的重要的基础组件oslo.config,通过cfg Module可以用来通过命令行或者是配置文件来配置一些options,对于...

openstack通用库Oslo之config

oslo config库用于解析命令行和配置文件中的配置(config)选项(opts)。
  • lyjshen
  • lyjshen
  • 2017年03月10日 10:55
  • 268

OpenStack 实现技术分解 (7) 通用库 — oslo_config

目录目录 前文列表 扩展阅读 osloconfig argparse cfgpy class Opt class ConfigOpts CONF 对象的单例模式前文列表OpenStack 实现技术分解...
  • Jmilk
  • Jmilk
  • 2017年03月30日 23:52
  • 983
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:openstack源码阅读笔记2 配置与oslo_config
举报原因:
原因补充:

(最多只允许输入30个字)