openstack源码阅读笔记2 配置与oslo_config
来源:互联网 发布:算法工程师需要学什么 编辑:程序博客网 时间:2024/09/21 09:00
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.CONFapi.register_opts(CONF) #而nova.conf.api模块中def register_opts(conf):conf.register_opts(ALL_OPTS) #以上是定义选项。#在nova.cmd.api中from nova importconfigdef 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(…)直接调用CONF,CONF是类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源码阅读笔记2 配置与oslo_config
- openstack模块之oslo_config
- openstack模块之oslo_config
- openstack中的oslo_config
- openstack oslo_config 和 oslo_log库
- Openstack Manila源码阅读笔记(一)manilaclient调用过程
- openstack源码阅读笔记1 开发环境搭建
- Nginx 源码阅读笔记2 原子变量与互斥锁
- x264源码阅读笔记2
- ActiveAndroid 源码阅读笔记 (2)
- flashsim源码阅读笔记2
- android源码阅读笔记1-配置源码路径/阅读源码方法讨论
- 阅读Openstack源码的一些建议
- Openstack+Ceph安装与配置(收集整理笔记)
- OpenStack安装与配置
- openstack安装与配置
- go源码阅读笔记(math.2)
- Netty源码阅读笔记2: 线程模型
- CodeForces 711A Bus to Udayland(水题)
- 存储控制器
- leetcode: reverse-integer
- 口才学习
- 2016.8.29
- openstack源码阅读笔记2 配置与oslo_config
- linux netfilter框架中比较重要的结构体和函数
- STL模版学习(转载)
- 高级Bash脚本编程指南(1): 为什么使用shell编程
- iOS 知识点 - 前奏更新
- Java集合的遍历Iterator的方法
- Learning Spark 笔记(五) -- coalesce、repartition
- GIT命令
- 数据结构哈夫曼树中每次寻找的最小结点和次小结点稳定在二到四个结点中产生