ironic client look into

来源:互联网 发布:python退出程序 exit 编辑:程序博客网 时间:2024/06/05 02:03

前面讲的都是用curl调用,直接call 到ironic的 rest 响应server上,是查看ironic源码得到,如果要自己实现新的模块,往往需要实现对应client端,屏蔽掉直接的url和

繁琐的传入参数,方法,token等等,或者有时候我们会添加自己的client端命令(有些rest api并没有通过client端暴漏出来),看看ironic client是怎么玩儿的,事实上,

就像ironic本身即便采用了pecan的框架,但是和openstack的其他核心模块在调用方式上很类似,ironic client也和其他的client很类似。


ironic client和ironic的service不一样,ironic的service作为wsgi的server或者一个python的线程启动service,是可以用systemctl 启动停止服务的, ironic不一样,

我们查看/usr/bin/ironic(ironicclient的入口),可以发现调用的是ironicclient.shell.main()函数,

在main函数中除了argparser的大量使用,最主要的两句是:

 client = iroclient.Client(api_version, endpoint, **kwargs)
args.func(client, args)

其中,client是一个http client,封装了很多http call 相关的方法和参数传递方式,是可以单独拿出来到其他模块使用的,

args.func(client, args)是比较困惑的,翻看代码找到了调用关系如下:

1.main()

2.subcommand_parser = self.get_subcommand_parser(api_version)

3.submodule.enhance_parser(parser, subparsers, self.subcommands)

4. for command_module in COMMAND_MODULES:
        utils.define_commands_from_module(subparsers, command_module, cmd_mapper)

其中COMMAND_MODULES包括chassis_shell,node_shell, port_shell,driver_shell

5. define_command(subparsers, command, callback, cmd_mapper)(只添加command module中以“do”开头的方法)

6.subparser.set_defaults(func=callback)


到这里,当我们看到args.func(client, args)时候,对于ironic node-show xxx,命令时便知道是执行了command modules中对应的方法do_node_show(命令参数和名称的转换

在源码中也可以找到),然后调用http的request进行请求并返回响应


0 0
原创粉丝点击