openstack oslo代码分析

本文详细分析了OpenStack Cinder中的Oslo代码,特别是FLAGS的使用和配置项管理。通过cinder-api的启动过程,探讨了FLAGS如何保存配置信息并在全局中使用。在/cinder/flags.py及组件Oslo代码中,发现配置项被定义并注册到ConfigOpts,分为命令行配置项(cli_opt)和代码内定义的配置项(opt)。ConfigOpt._opts存储非组配置项,_groups存储按组划分的配置项。flags.parse_args()解析命令行参数,初始化配置并检查必要选项是否设置。
摘要由CSDN通过智能技术生成

参考 http://blog.csdn.net/networm3/article/details/8946556


查看代码cinder.2013.1过程  常有类似‘FLAGS.’ 的使用,猜想FLAGS保存配置项的信息,需要的时候可以全局使用

FLAGS 相关的代码 /cinder/flags.py 以及组件 oslo代码

分析过程 cinder-api启动过程,查看flags的工作过程  执行启动命令  python cinder-api --config-file=/etc/cinder/cinder.conf  --log-file=/var/log/cinder/cinder-api.log

1.启动cinder-api时,导入了flags模块

#只截取相关部分
from cinder import flags #导入flags模块
from cinder.openstack.common import log as logging
from cinder import service
from cinder import utils

if __name__ == '__main__':
    flags.parse_args(sys.argv) #解释sys.argv
    logging.setup("cinder")
    utils.monkey_patch()
    server = service.WSGIService('osapi_volume')
    service.serve(server)
    service.wait()
flags.py文件

from oslo.config import cfg

from cinder import version
FLAGS = cfg.CONF #注释1

def parse_args(argv, default_config_files=None):
    FLAGS(argv[1:], project='cinder',
          version=version.version_string(),
          default_config_files=default_config_files)
...
core_opts = [
    cfg.StrOpt('connection_type',
               default=None,
               help='Virtualization api connection type : libvirt, xenapi, '
                    'or fake'),
    cfg.StrOpt('sql_connection',
               default='sqlite:///$state_path/$sqlite_db',
               help='The SQLAlchemy connection string used to connect to the '
                    'database'),
    cfg.IntOpt('sql_connection_debug',
               default=0,
               help='Verbosity of SQL debugging information. 0=None, '
                    '100=Everything'),
 ...] #注释2 

debug_opts = []

FLAGS.register_cli_opts(core_opts) #注释3
FLAGS.register_cli_opts(debug_opts) #注释4

global_opts = [
    cfg.StrOpt('my_ip',
               default=_get_my_ip(),
               help='ip address of this host'),
...]
FLAGS.register_opts(global_opts) #注释5
注释1 : FLAGS = oslo.config.cfg.CONF = ConfigOpts() , ConfigOpts类是配置项管理类

class ConfigOpts(collections.Mapping):
    def __init__(self):
        """Construct a ConfigOpts object."""
        self._opts = {}  #
        self._groups = {} 
        self._args = None 
        self._oparser = None 
        self._cparser = None 
        self._cli_values = {} 
        self.__cache = {} 
        self._config_opts = [] 

注释 2,说明配置项根据其值的类型定义(string,int等)了多种配置项类,通过cfg.py代码,StrOpt,BoolOpt,IntOpt,FloatOpt,ListOpt,MultiStrOpt,SubCommandOpt等

注释3、4、5先定义配置项,然后将其注册到配置项管理对象中,这样可以通过FLAGS访问配置项的值。此外,配置项还分为cli_opt(命令行配置项)以及opt(代码中定义的配置项)。下面看下注释3、5怎么将配置项信息写入ConfigOpts

    @__clear_cache
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值