openstack client代码分析

声明:

本博客欢迎转发,但请保留原作者信息!

博客地址:http://blog.csdn.net/llg8212

内容系本人学习、研究和总结,如有雷同,不胜荣幸!


openstack client端代码的结构都一致,下面通过python-glanceclient来分析。

1,入口

客户端安装后,就可以接收外部的命令了。接收外部命令的文件为:glance,keystone,nova等,默认的安装目录为:/usr/local/bin/。glance的文件内容为:

import sys
from glanceclient.shell import main

if __name__ == "__main__":
    sys.exit(main())

从文件内容可知,我们在shell命令行输入glance,真正处理的main函数为:glanceclient.shell.main()


2,glanceclient.shell.main()

main函数定义如下:

def main():
    try:
        OpenStackImagesShell().main(map(strutils.safe_decode, sys.argv[1:]))           # 构造了 OpenStackImagesShell实例并调用其main方法
    except KeyboardInterrupt:
        print('... terminating glance client', file=sys.stderr)
        sys.exit(1)
    except Exception as e:
        print(utils.exception_to_str(e), file=sys.stderr)
        sys.exit(1)

注:map函数介绍参见http://my.oschina.net/zyzzy/blog/115096,这里使用map对传入的参数进行解码。


3,OpenStackImagesShell的main函数

# 解析参数选项
parser = self.get_base_parser()                               # 构造参数解析类ArgumentParser的实例parser,然后通过实例调用方法parser.add_argument增加一些固有的参数。其中_get_optional_kwargs会将传入的参数选项最左边的‘-’去掉并将中间的‘-’转换为‘_’。
(options, args) = parser.parse_known_args(argv)    # parse_known_args函数是将解析的参数按属性的方式存储到Namespace对象。到用setattr函数,参见http://my.oschina.net/DreamG/blog/138551


# 解析子命令,其中会根据版本号动态加载对应模块。函数import_versioned_module中的 module = 'glanceclient.v%s' % version

# 默认加载glanceclient.v1.shell.py,然后通过_find_actions调用,就将所有do_XXX函数加载到self.subcommands中了

subcommand_parser = self.get_subcommand_parser(api_version)
self.parser = subcommand_parser


# 再次解析,将传入的命令和函数关联起来。如传入image-list,返回的args.func为do_image_list

args = subcommand_parser.parse_args(argv)


#  最后就是执行这个函数了

try:
     args.func(client, args)
except exc.Unauthorized:
     raise exc.CommandError("Invalid OpenStack Identity credentials.")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值