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配置解析模块

什么是oslo.config     oslo.config是openstack解析命令行(CLI)或者配置文件(.conf)中配置信息的库.官网地址点击打开链接     安装: $ sudo p...
  • shuaijiasanshao
  • shuaijiasanshao
  • 2016年04月22日 10:55
  • 6187

openstack oslo_config 和 oslo_log库

一、oslo.config库的作用和概念理解 openstack中的 oslo.config库用于解析命令行和配置文件中的配置选项,把配置项直接融入代码内。在本文的语境下,有这么几个概念: 配置文件:...
  • li_101357
  • li_101357
  • 2017年04月13日 16:32
  • 770

(三) OPENSTACK 学习之 Oslo Config (oslo.config) 自己动手写项目

阿拉将要自己新建一个项目,来show 一下 oslo config的用法。我用的环境是:配有virtualenv的ubuntu系统。 首先让我们创建一个简单的项目: ...
  • alvine008
  • alvine008
  • 2014年04月23日 15:38
  • 10693

OpenStack源码探秘(二)——Oslo.config

OpenStack源码探秘(一)——Nova-Scheduler OpenStack源码探秘(二)——Oslo.Config 最近因为一直忙于找工作和办理入职离职等相关手续,许久没有更新博...
  • networm3
  • networm3
  • 2013年05月19日 15:20
  • 10077

如何把oslo.config使用到自己的项目中

本文就简单阐述,如何把openstack的子xiang
  • q454684431
  • q454684431
  • 2014年04月15日 10:48
  • 2034

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...
  • wk5113552
  • wk5113552
  • 2013年12月02日 14:53
  • 1394

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

目录目录 前文列表 扩展阅读 osloconfig argparse cfgpy class Opt class ConfigOpts CONF 对象的单例模式前文列表OpenStack 实现技术分解...
  • Jmilk
  • Jmilk
  • 2017年03月30日 23:52
  • 1211

openstack oslo.config组件服务浅析

首先,仍然以compute节点为例,看一下cfg服务的启动过程: 在compute节点的nova-compute服务启动时,调用nova.cmd.compute中的main方法。在此之前会执行模块内...
  • qq_28140617
  • qq_28140617
  • 2017年02月22日 11:33
  • 259

(二)、Openstack 之 oslo.config

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

Openstack Oslo.config 学习(二)

转载:http://www.choudan.net/2013/11/28/OpenStack-Oslo.config-%E5%AD%A6%E4%B9%A0(%E4%BA%8C).html ...
  • yugongpeng_blog
  • yugongpeng_blog
  • 2015年05月19日 16:32
  • 599
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:openstack源码阅读笔记2 配置与oslo_config
举报原因:
原因补充:

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