你好,游客 登录 注册 搜索
背景:
阅读新闻

当你输入 nova boot时,client做了什么?

[日期:2016-08-11] 来源:Linux社区  作者:houzhe_adore [字体: ]

这里写图片描述
当你输入上图命令后,会发生什么?

导读:本博文以nova boot为例分析nova创建虚拟机时, nova client的工作流程。 在之后的博文中会分析 nova 创建虚拟机的后续流程。

基础简介:
nova boot –image 89b959c5-ac9f-4f7e-9094-0a17cd6d78cf –flavor 1 my_instance
该命令为nova创建虚拟机,用到的虚拟机镜像 ID 为image,虚拟机配合用的是内置套餐1(最mini型),虚拟机名字叫做 my_instance。

正文:
就像所有的程序都有main函数一样,我们nova的main函数定义在
/usr/bin/nova.py
代码可谓简洁明了

 import sys
 from novaclient.shell import main
 if __name__ == "__main__":
     sys.exit(main())                

看来真正的main函数被指向了 novaclient.shell.py中
那么问题来了,novaclient在哪?不同的系统安装环境不一样,这里介绍一种小技巧寻找代码位置,如图所示:
这里写图片描述

UML 图:

找到novaclient代码位置后,我们就来查看它的目录结构:
这里写图片描述

目录结构简洁明了,novaclient使用两种api,分别是V1_1和V3,我们这里主要使用V1_1。


回归到代码主线

  1. /usr/bin/nova.py main() —> /novaclient/shell.py main() #简单调用,传递用户输入参数。
  2. shell.py main() —> shell.py OpenStackComputeShell类中main() #使用一个map()函数将用户输入的参数递归解析出来传入。
  3. 类中main()中主要做三件事,(1)根据传进来参数给各种变量赋值。(2)验证身份合法性。(3)创建一个client的实例中创建client代码如下。(4)创建一个HttpClient。这里写图片描述

  4. client.Client定义在 /novaclient/client.py中,其根据version参数确定使用api的版本号,并返回一个指定版本的实例。这里返回的是v1_1版本的实例。

  5. v1_1实例定义在/novaclient/v1_1/client.py中。在该类中调用nova命令的方法。这里写图片描述
    我们创建虚拟机用的函数就在servers.ServerManager()中。
  6. /novaclient/v1_1/server.py 我们来看 ServerManager class。里面封装的函数有
    create,start,pause,lock等等若干对虚拟机的操作。我们追溯一下ServerManager的父类,可以看到这样的继承关系:ServerManager->base.BootingManagerWithFind->base.ManagerWithFind->base.Manager。ServerManager中create中调用的是base.Manager类中的 _create()函数。
  7. base路径为/novaclient/base.py 看一下Manager类中_create()函数,这里面根据参数封装了http请求,使用ipdb调试工具查看一下输出如图:
    这里写图片描述
    8._create()中api.client.post()方法发送http请求,并返回结果。api.client.post()在/novaclient/openstack/common/apiclient/client.py 其中client_request()该函数发送http请求。
    9._create函数执行完,返回至/novaclient/v1_1/server.py中的_boot(),然后再回到create(),再返回至/novaclient/v1_1/shell.py中的do_boot()。这里写图片描述
    通过_print_server()打印信息。
    这里写图片描述

粗略分析了一下novaclient 命令流程,其他命令可参考该过程,大同小异。后续会分析nova创建虚拟机过程。
如有错误不足,欢迎指出^_^

本文永久更新链接地址http://www.linuxidc.com/Linux/2016-08/134169.htm

linux
相关资讯       nova boot 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款