您的位置:首页 > 运维架构

如何把oslo.config使用到自己的项目中

2014-04-15 10:48 239 查看
本文就简单阐述,如何把openstack的子项目oslo(配置项解析,利用oslo可以很方便做到配置项的敏感项分离,这样带来的好处就不多说了。)运用到自己的项目中,而不用再多个项目中copy重复的代码。本文先介绍如何在自己项目中借用oslo,配置项分离的实现后续介绍。其实oslo也不神秘,就是把common/cfg.py 文件单独拉出来,形成一个通用的Package。其主要功能是完成解析client配置项和普通配置项,下面就进入主题:第一步:因为项目的进程启动时,就需要读取一些配置项,如config_file,verbose,debug,log_dir,log_file,log_config等供加载application使用,在我的项目里此函数为:def load_paste_app(app_name, flavor=None, conf_file=None)第二步:使用register_cli_opts注册以上命令行配置项。第三步:这里很关键,需要修改当前项目中bin/myproject-api的启动脚本,因为是启动脚本嘛,所以一切都是在这里开始了,故保证第一,第二步的文件在此脚本中被首先import,从而把命令行以及其他必备配置项提前加载进来。第四步:如果此项目涉及到project-manage 命令,如db_sync、db_version、do_upgrade、do_downgrade等,这里的命令行参数的解析就不在上面第二步中的client一起加载了,而是需要使用oslo.config.cfg.SubCommandOpt函数来解析,并调用对应命令参数的函数,可以简单理解为钩子函数一样,哈哈,可能描述不太准确,感觉更加类似回调函数了。为了更加清晰,附上一段代码:
from oslo.config import cfgimport otherpackageCONF = cfg.CONFdef do_db_version():"""Print database's current migration level"""print project.db.sqlalchemy.migration.db_version()def do_upgrade():passdef do_downgrade():passdef do_db_sync():passdef add_command_parsers(subparsers):parser = subparsers.add_parser('db_version')parser.set_defaults(func=do_db_version)parser = subparsers.add_parser('upgrade')parser.set_defaults(func=do_upgrade)parser.add_argument('version', nargs='?')parser = subparsers.add_parser('downgrade')parser.set_defaults(func=do_downgrade)parser.add_argument('version')parser = subparsers.add_parser('db_sync')parser.set_defaults(func=do_db_sync)parser.add_argument('version', nargs='?')parser.add_argument('current_version', nargs='?')command_opt = cfg.SubCommandOpt('command',title='Commands',help='Available commands',handler=add_command_parsers)def main():CONF.register_cli_opt(command_opt).....pass
如果哪位在使用oslo时,遇到其他问题了,比如DuplicateOptError,ArgsAlreadyParsedError等,欢迎留言,一起讨论之。

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐