安装oslo.config模块
pip install oslo.config
python oslo.config读取配置文件
创建代码目录
mkdir /python/cinder/
复制一个cinder的配置文件
cp /etc/cinder/cinder.conf /python/cinder/
cat /python/cinder/cinder.conf
[keystone_authtoken]
memcached_servers = localhost:11211
signing_dir = /var/cache/cinder
cafile = /opt/stack/data/ca-bundle.pem
project_domain_name = Default
project_name = service
user_domain_name = Default
password = secret
username = cinder
auth_url = http://192.168.56.3/identity
auth_type = password
[DEFAULT]
cinder_internal_tenant_user_id = c2a6fd5dc41f42b3b85387c9a2e7a327
cinder_internal_tenant_project_id = 14dd8b649a624dc794a5047b8cbaa26a
graceful_shutdown_timeout = 5
glance_api_version = 2
glance_api_servers = http://192.168.56.3/image
osapi_volume_workers = 2
logging_exception_prefix = ERROR %(name)s %(instance)s
logging_default_format_string = %(color)s%(levelname)s %(name)s [-%(color)s] %(instance)s%(color)s%(message)s
logging_context_format_string = %(color)s%(levelname)s %(name)s [%(global_request_id)s %(request_id)s %(project_name)s %(user_name)s%(color)s] %(instance)s%(color)s%(message)s
logging_debug_format_suffix = {
{
(pid=%(process)d) %(funcName)s %(pathname)s:%(lineno)d}}
transport_url = rabbit://stackrabbit:secret@192.168.56.3:5672/
default_volume_type = lvmdriver-1
enabled_backends = lvmdriver-1
my_ip = 192.168.56.3
periodic_interval = 60
state_path = /opt/stack/data/cinder
osapi_volume_listen = 0.0.0.0
osapi_volume_extension = cinder.api.contrib.standard_extensions
rootwrap_config = /etc/cinder/rootwrap.conf
api_paste_config = /etc/cinder/api-paste.ini
iscsi_helper = lioadm
debug = True
auth_strategy = keystone
[database]
connection = mysql+pymysql://root:secret@192.168.56.3/cinder?charset=utf8
[oslo_concurrency]
lock_path = /opt/stack/data/cinder
[key_manager]
fixed_key = a410bdf9db41db63895265624958ac5e
backend = cinder.keymgr.conf_key_mgr.ConfKeyManager
[lvmdriver-1]
image_volume_cache_enabled = True
volume_clear = zero
lvm_type = auto
iscsi_helper = lioadm
volume_group = stack-volumes-lvmdriver-1
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
volume_backend_name = lvmdriver-1
[nova]
region_name = RegionOne
memcached_servers = localhost:11211
signing_dir = /var/cache/cinder
cafile = /opt/stack/data/ca-bundle.pem
project_domain_name = Default
project_name = service
user_domain_name = Default
password = secret
username = nova
auth_url = http://192.168.56.3/identity
auth_type = password
[coordination]
backend_url = etcd3+http://192.168.56.3:2379
python读取配置文件
cat /python/cinder/cinder.py
#!/usr/bin/env python
#coding:utf8
#from __future__ import print_function
from oslo_config import cfg
#声明参数选项
opt_group=cfg.OptGroup('keystone_authtoken')
auth_opts=[
cfg.StrOpt('memcached_servers',
default = 'localhost:11211',
choices=("localhost:11211", "0.0.0.0:11211"),
help = ('localhost local','0.0.0.0 So listen')
),
cfg.StrOpt('signing_dir',
default='/var/cache/cinder',
choices=("/var/cache/cinder", "/var/cache/cinder"),
),
]
token_opts=[
cfg.StrOpt('project_domain_name'),
cfg.StrOpt('project_name'),
]
CINDER_OPTS=(auth_opts+
token_opts)
#注册参数选项
CONF=cfg.CONF
CONF.register_group(opt_group)
CONF.register_opts(CINDER_OPTS,group=opt_group)
if __name__ == "__main__":
#要读取哪个配置文件
CONF(default_config_files = [ 'cinder.conf'])
print('keystone_authtoken部分,memcached_servers参数值为%s'% (CONF.keystone_authtoken.memcached_servers))
print('keystone_authtoken部分,signing_dir参数值为%s'%(CONF.keystone_authtoken.signing_dir))
print('keystone_authtoken部分,project_domain_name参数值为%s'%(CONF.keystone_authtoken.project_domain_name))
print('keystone_authtoken部分,project_name参数值为%s'%(CONF.keystone_authtoken.project_name))
print('配置组为%s'%(opt_group))
print('配置选项为%s'%(CINDER_OPTS))
执行
[root@localhost cinder]# python cinder.py
keystone_authtoken部分,memcached_servers参数值为localhost:11211
keystone_authtoken部分,signing_dir参数值为/var/cache/cinder
keystone_authtoken部分,project_domain_name参数值为Default
keystone_authtoken部分,project_name参数值为service
配置组为keystone_authtoken
配置选项为[<oslo_config.cfg.StrOpt object at 0x7f4f4f665590>, <oslo_config.cfg.StrOpt object at 0x7f4f4f66d990>, <oslo_config.cfg.StrOpt object at 0x7f4f4f66da10>, <oslo_config.cfg.StrOpt object at 0x7f4f4f66dbd0>]
python oslo.config 解析命令行参数
创建代码目录
mkdir /python/cli/
python 解析命令行参数
cat /python/cli/cli.py
#!/usr/bin/env python
#coding:utf8
# 声明参数选项
from oslo_config import cfg
import sys
cli_opts = [
cfg.StrOpt('ip_address',
default='88.88.88.88',
help='just ip address'),
]
# 注册命令行参数选项
cfg.CONF.register_cli_opts(cli_opts)
# 解析命令行参数选项
cfg.CONF(args=sys.argv[1:])
# 读取解析后的参数选项
print cfg.CONF.items()
for name, values in cfg.CONF.items():
print "%s : %s" % (name, values)
执行
不传入参数值,用默认值
[root@localhost cli]# python cli.py
[('config_file', []), ('config_dir', []), ('ip_address', '88.88.88.88'), ('config_source', [])]
config_file : []
config_dir : []
ip_address : 88.88.88.88
config_source : []
传入参数,指定值
[root@localhost cli]# python cli.py --ip_address 10.0.0.0
[('config_file', []), ('config_dir', []), ('ip_address', '10.0.0.0'), ('config_source', [])]
config_file : []
config_dir : []
ip_address : 10.0.0.0
config_source : []
config_file和config_dir是模块中默认会自动注册的两个项目,用来指定模块读取的配置文件的存放路径,既然注册了,自然也可以通过命令参数传入。
python cli.py --config-file /etc/cinder/cinder.conf --ip_address 10.0.0.0
[('config_file', ['/etc/cinder/cinder.conf']), ('config_dir', []), ('ip_address', '10.0.0.0'), ('config_source', [])]
config_file : ['/etc/cinder/cinder.conf']
config_dir : []
ip_address : 10.0.0.0
config_source : []
[root@localhost cli]# python cli.py --config-file /etc/cinder/cinder.conf
[('config_file', ['/etc/cinder/cinder.conf']), ('config_dir', []), ('ip_address', '88.88.88.88'), ('config_source', [])]
config_file : ['/etc/cinder/cinder.conf']
config_dir : []
ip_address : 88.88.88.88
config_source : []
python oslo.config读取配置文件
编辑配置文件
cat /python/cli/cli.conf
[DEFAULT]
app_name = cinder
debug = true
extern = message
[database]
ip = 192.168.229.121
port = 8776
python读取配置文件
cat /python/cli/cli.py
#!/bin/python
# -*- coding: utf-8 -*-
from oslo_config import cfg
import sys
# 声明配置项
conf_opts = [
cfg.StrOpt('app_name',
default='unknown_app',
help='app name'),
cfg.BoolOpt('debug',
default=False,
help='open debug log')
]
# 注册配置项
cfg.CONF.register_opts(conf_opts)
# 解析配置文件
cfg.CONF(default_config_files=['/python/cli/cli.conf'])
# 读取解析后的配置
for name, values in cfg.CONF.items():
print "%s : %s" % (name, values)
执行
python cli.py
debug : True
config_dir : []
config_file : ['/python/cli/cli.conf']
app_name : cinder
config_source : []