参考 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