solo.config是一个用于从命令行和配置文件中解析配置项的OpenStack通用库
一、从配置文件中读取
目录结构:
-- src |-- resolve.py |-- myconf.cfg
myconf.cfg
要解析的配置文件,有三个组[DEFAULT] name = default age = 20 [pql] name = pengqinglan age = 22 ip = 10.0.0.1 port = 888 [wcr] name = wuchunrong age = 23 ip = 10.0.0.2 port = 8888
resolve.py:
首先引入cfg,得到CONF(cfg.py 中 ConfigOpts的实例)from oslo_config import cfg CONF = cfg.CONF
然后定义要匹配的配置项和配置组
# default_opts用于匹配[default]组 default_opts = [ cfg.StrOpt('name', default='default', help='default name'), cfg.IntOpt('age', default=20, help='default name'), ] # opts用于匹配[pql]组和[wcr] opts = [ cfg.StrOpt('name', default='dog', help='name'), cfg.IntOpt('age', default=1, help='age'), cfg.IPOpt('ip', default='0.0.0.0', help='ip'), cfg.IntOpt('port', default=1, help='port'), ] # 定义配置组 group1 用于匹配pql组,group2 用于匹配wcr组 group1 = cfg.OptGroup(name='pql', title='t1') group2 = cfg.OptGroup(name='wcr', title='t2')
接着注册配置组和配置项
conf.register_group(group1) conf.register_opts(opts, group=group1) conf.register_group(group2) conf.register_opts(opts, group=group2) # 注册时默认组为deault组 conf.register_opts(default_opts)
最后测试结果
# 配置要解析的文件 conf(default_config_files=['setup.cfg']) print conf.pql.name print conf.pql.age print conf.pql.ip print conf.pql.port print conf.wcr.name print conf.wcr.age print conf.pql.ip print conf.pql.port print conf.name print conf.age
输出
pengqinglan 22 10.0.0.1 888 wuchunrong 23 10.0.0.1 888 default 20
二、从命令行中读取
引入cfg,定义匹配项
from oslo_config import cfg CONF = cfg.CONF cli_opts = [ cfg.StrOpt('name', default='name', help='This is name'), cfg.IntOpt('age', default=1, help='This is age'), ]
注册配置项,注入命令参数
CONF.register_cli_opts(cli_opts); CONF(sys.argv[1:]) # 打印解析结果 print CONF.name print CONF.age
测试
$ python oslo_config_cli_test.py --name pengqinglan --age 22 pengqinglan 22
查看用法,已经可以发现参数 –name 与 –age
$ python oslo_config_cli_test.py -h usage: oslo_config_cli_test [-h] [--age AGE] [--config-dir DIR] [--config-file PATH] [--name NAME] optional arguments: -h, --help show this help message and exit --age AGE This is age --config-dir DIR Path to a config directory to pull *.conf files from. This file set is sorted, so as to provide a predictable parse order if individual options are over-ridden. The set is parsed after the file(s) specified via previous --config-file, arguments hence over-ridden options in the directory take precedence. --config-file PATH Path to a config file to use. Multiple config files can be specified, with values in later files taking precedence. Defaults to None. --name NAME This is name