1、通过命令行
选项
--config-file
指定
任意文件为配置文件(当然前提是有读写权限)
。
例如:
/usr/bin/python /usr/bin/nova-compute--config-file=/etc/nova/nova.conf--config-file=/etc/nova/nova-compute.conf
2、如果在服务启动时,没有通过--config-file指定配置文件,那么nova会在几个特定的目录按照先后顺序下寻找配置文件。在每个服务启动时,会按照以下顺序寻找配置文件:
[~/.nova/, ~/, /etc/nova/,/etc/]
例如,启动nova-compute时,它会在这些目录下分别寻找nova.conf和nova-compute.conf,如果~/.nova/nova.conf存在,那么就不会再寻找其它目录下的nova.conf了。对于nova-compute.conf文件也是一样。
nova配置文件内容格式如下:
[DEFAULT]
dhcpbridge_flagfile=/etc/nova/nova.conf
dhcpbridge=/usr/bin/nova-dhcpbridge
libvirt_use_virtio_for_bridges=True
connection_type=libvirt
...…
分析
1)nova是如何寻找配置文件,配置文件存放在哪个目录下才能被它读取
2)配置文件的编辑应该遵守什么样的格式,才能被nova正常读取
3)当我们需要在配置文件中添加一个我们自己的选项时,我们应该在哪些地方进行如何修改,才能被nova获取到我们写入配置文件的值
nova有多个服务:nova-cert、nova-consoleauth、nova-manage、nova-novncproxy、nova-scheduler、
nova-api、nova-compute、nova-dhcpbridge、nova-network、nova-rootwrap。各个服务在启动时,读取配置文件的流程都是一样的。下面针对nova-compute的配置读取过程进行分析,其他的服务相同。
compute启动脚本
/usr/bin/nova-compute文件:
第42行调用flags.parse_args(sys.argv)函数,该函数定义于nova/flags.py。它调用CommonConfigOpts实例进行命令行参数和配置文件的读取:
nova/flags.py:
继续查看cfg.CONF
/nova/openstack/common/cfg.py
1654
CONF =CommonConfigOpts()
optparse.OptionParser
optparser库中的OptionParser,用来解析通过命令行指定的参数,该库目前不再更新,将会被argparser代替。但openstack使用该库来解析,所以做个简单介绍:
from optparse import OptionParser
parser = OptionParser()
parser.add_option("-f", "--file", dest="filename",#dest用来明确指定解析参数后对应的属性名,
parser.add_option("-q", "--quiet",
(options, args) = parser.parse_args(['-f', 'test.txt', 'ddd','ffff'])
该脚本执行过后,options.filename=test.txt、options.verbose=True。args=[
'ddd','ffff'],它是用于返回不能被OptionParser识别的参数。
optparse.OptionGroup
当参数较多时,可利用OptionGroup对其进行分类,这样在输出help信息时,能够分类整齐些,所以每一个OptionGroup都必须与一个OptionParser关联(多对一的关系)。在使用上,与OptionParser差不多。如下:
group = OptionGroup(parser, "Dangerous Options",#其中parser为上面定义的类