oslo_config 主要处理用来读取配置项,配置项可以从命令行或者配置文件中读取。但从命令行中获取的配置型需要由register_cli_opts来注册。
配置项都是由Opt类或者其子类定义的。 配置项有多种类型:
- strings
- integers
- floats
- booleans
- lists
- multi strings
- dictionary
读取配置文件中的配置项
如果是在配置文件中指定了配置项的值,oslo_config定义了两个命令行参数--config-file和--config-dir分别来指定配置文件或者配置目录。
编辑conf_test.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| from oslo_config import cfg import sys
opts = [ cfg.IntOpt('o1', default=111), cfg.StrOpt('o2', default='test opt'), ]
CONF = cfg.CONF
CONF.register_opts(opts)
print CONF.o1 print CONF.o2
|
执行配置文件:
可以正确读出默认值。
现在将配置项在一个配置文件中指定相应的值,编辑配置文件test.conf
1 2 3
| [DEFAULT] o1 = 123 o2 = test2
|
编辑脚本conf_file.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| from oslo_config import cfg import sys
opts = [ cfg.IntOpt('o1', default=111), cfg.StrOpt('o2', default='test opt'), ]
CONF = cfg.CONF CONF.register_opts(opts)
CONF(sys.argv[1:])
print CONF.o1 print CONF.o2
|
执行查看结果:
组
这次没有返回配置项的默认值,而是读取到了配置文件中配置项的指定值。配置项可以进行分组,分组后先注册配置组,然后注册配置项,注册配置项的时候讲配置项添加到相应的组中。如果没有指定组的话,配置项默认都是DEFAULT组中的。
编辑conf_group.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| from oslo_config import cfg import sys
opts = [ cfg.IntOpt('o1', default=111), cfg.StrOpt('o2', default='test opt'), ]
opt_o3 = cfg.IntOpt('o3', default=333) opt_o4 = cfg.StrOpt('o4', default='test opt4')
opt_group = cfg.OptGroup(name='Group_test', title='Group 1')
CONF = cfg.CONF
CONF.register_opts(opts)
CONF.register_opt(opt_o3, group = opt_group) CONF.register_opt(opt_o4, group = 'Group_test')
CONF(sys.argv[1:])
print "[DEFAULT]: o1, o2" print CONF.o1 print CONF.o2 print ""
print "[Group_test]: o3, o4" print CONF.Group_test.o3 print CONF.Group_test.o4 print ""
|
添加Group_test组到配置文件test.conf
1 2 3 4 5 6 7
| [DEFAULT] o1 = 123 o2 = test2
[Group_test] o3 = 98 o4 = laksdfa
|
执行:
1 2 3 4 5 6 7 8
| [DEFAULT]: o1, o2 123 test2
[Group_test]: o3, o4 98 laksdfa
|
成功读取配置文件中Group_test组中的配置项的值。不同组中可以有相同的配置项,比如在Group_test中可以添加o1, o2配置项,
编辑test.conf
1 2 3 4 5 6 7 8 9
| [DEFAULT] o1 = 123 o2 = test2
[Group_test] o1 = 234 o2 = test4 o3 = 98 o4 = laksdfa
|
在conf_group.py中添加:
1 2 3 4 5 6 7 8 9
| ...
CONF.register_opts(opts, group = opt_group) ...
print "[Group_test]: o1, o2" print CONF.Group_test.o1 print CONF.Group_test.o2 print ""
|
结果:
1 2 3 4 5 6 7 8 9 10 11 12
| [DEFAULT]: o1, o2 123 test2
[Group_test]: o3, o4 98 laksdfa
[Group_test]: o1, o2 234 test4
|
可以看出,不同组的相同配置项可以指定不同的值,这样使配置更加灵活。
配置目录
除了可以在命令行中指定配置文件,也可以指定一个包含配置文件的目录,比如
1 2 3 4 5 6 7 8 9 10 11 12
| test1.conf test2.conf
[DEFAULT] o1 = 123 o2 = test2
[Group_test] o1 = 234 o2 = test4 o3 = 98 o4 = laksdfa
|
同样用配置组例子中的脚本conf_group.py来执行,不过这次指定配置目录,查看结果:
1 2 3 4 5 6 7 8 9 10 11 12
| [DEFAULT]: o1, o2 123 test2
[Group_test]: o3, o4 98 laksdfa
[Group_test]: o1, o2 234 test4
|
得到的结果和指定配置文件是一样的。
命令行中指定配置项
如果需要在命令行中指定配置项,相应的配置项需要由register_cli_opts进行注册。
编辑conf_cli.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| from oslo_config import cfg import sys
opts = [ cfg.IntOpt('o1', default=111), cfg.StrOpt('o2', default='test opt'), ]
CONF = cfg.CONF
CONF.register_cli_opts(opts)
CONF(sys.argv[1:])
print CONF.o1 print CONF.o2
|
执行:
在命令行中指定o1的值为98,可以看到o1的值被读取,没有指定值的o2读取的默认值。
例子代码:test_example