1. 学习思路
    1. 议程:代码结构-主干流程-分层架构-业务模型-数据库模型-消息模型

    2. 分布式架构:Api:横向扩展    rpc:纵向扩展
    3. 分层架构:Controller接口层、View/Manager逻辑层、DAO/Model数据库层
    4. Nova与其他组件交互

    5. 业务模型——数据库建模

    6. 消息模型

      rabbitmqctl list_queues,可以列出所有的消息队列

      或者通过web管理界面,使用guest/openstack登录可以浏览

    7.  
  2. Nova代码结构
    1. 提纲挈领式的掌握,知道怎么定制化,知道组件之间的调用关系
    2. setup.cfg看所有的功能
    3. etc配置文件模版、nova放各个组件代码、可以通过outline查看类代码结构

    4. model对应数据库表结构

    5. db-api为业务层封装

    6. schedule,过滤规则、weght规则。DiskFilter继承BaseHostFilter实现host_passes,返回True还是False。在nova的配置文件里面配置实用哪些filter。

    7. virt目录最终nova调用底层api干活

  3. nova主干流程
    1. 调用流程

      参考:

      http://ilearnstack.com/2013/04/26/request-flow-for-provisioning-instance-in-openstack/comment-page-1/

      http://www.google.com.hk/imgres?imgurl=http://3.bp.blogspot.com/-lgqcvaFG_ak/UyV_FNd1n_I/AAAAAAAAABU/76rpDd5Rzro/s1600/adhoc-nova-boot-havana-07192013.png&imgrefurl=http://bodenr.blogspot.com/2014/03/openstack-nova-boot-server-call-diagram.html&h=620&w=1210&tbnid=n9hgUX4EOVe52M:&zoom=1&docid=MODxLOTD5C3AIM&ei=01RtVYWxD5Dh8AWDzIPIAw&tbm=isch

    2. 虚拟机状态

    3. 虚拟机创建流程-代码-函数调用关系图示。先了解全景图,了解代码调用关系,必要的时候再去看代码细节。

    4.  
  4. Nova-api扩展
    1. 代码目录

    2. nova/api目录扩展

      nova/db目录建数据库

      nova/tests目录放测试代码

    3. 扩展方法
      1. 扩展代码部署在/nova/nova/api/openstack/compute/contrib下,如新增documents.py模块
      2. 模块需要定义Documents类,该类继承extensions.ExtensionDescriptor
      3. 修改该类的name、alias、namespace、updated属性
      4. 重写该类的get_resources方法,返回resources对象
      5. Resources对象的构造需要DocumentsController对象
      6. DocumentsController对象中定义了具体的api,实现增删改查方法,增删改查的函数名称需要按照约定进行

      参考:

      https://wiki.openstack.org/wiki/WritingRequestExtensions

      https://github.com/yongluo2013/osf-openstack-training/blob/master/code/nova-api/my-nova-api/nova/api/openstack/compute/contrib/documents.py

    4. 代码部署
      1. 拷贝代码到发布路径,不是源码路径。

        cp nova/api/openstack/compute/contrib/documents.py /usr/lib/python2.6/site-packages/nova/api/openstack/compute/contrib/

        或者不拷贝,重新安装nova,python setup.py install,自动拷贝到目标目录:

      2. 拷贝/usr/bin/nova-api到/root/openstack/nova/bin目录,方便使用eclipse进行调试。
    5. 测试
      1. Token-get:

        http://10.20.0.88:5000/v2.0/tokens

        POST

        Content-Type    application/json

      {

      "auth": {

      "tenantName": "admin",

      "passwordCredentials": {

      "username": "admin",

      "password": "admin"

      }

      }

      }

      获取得到token以及compute的endpoint

      http://controller0:8774/v2/3edbf8dbb5234ac29831d608aa824c7e

      1. 测试扩展api加载是否成功

        http://10.20.0.88:8774/v2/3edbf8dbb5234ac29831d608aa824c7e/extensions/os-documents

        GET

        X-Auth-Token XXXXXXXXXXXX

        返回结果如下:

        {

        "extension" : {

        "updated" : "2014-10-19T00:00:00+00:00",

        "name" : "documents",

        "links" : [ ],

        "namespace" : "www.doc.com",

        "alias" : "os-documents",

        "description" : "Documents ExtensionDescriptor implementation"

        }

        }

        说明加载成功!

      2. 接口测试

        Index:

        http://10.20.0.88:8774/v2/3edbf8dbb5234ac29831d608aa824c7e/os-documents

        GET

        X-Auth-Token XXXXXXXXXXXX

        返回:{"documents": [{"id": "1001", "name": "docs1"}, {"id": "1002", "name": "docs2"}, {"id": "1003", "name": "docs3"}]}

        show:

        http://10.20.0.88:8774/v2/3edbf8dbb5234ac29831d608aa824c7e/os-documents/1002

        GET

        X-Auth-Token XXXXXXXXXXXX

        返回:{"id": "1002", "name": "docs2"}

        Create:

        http://10.20.0.88:8774/v2/3edbf8dbb5234ac29831d608aa824c7e/os-documents

        POST

        X-Auth-Token XXXXXXXXXXXX

        Content-Type    application/json

        {"document":{"id": "1004", "name": "docs4"}}

        返回:{"id": "1004", "name": "docs4"}

        再次查询,已经更新。

        Update:

        http://10.20.0.88:8774/v2/3edbf8dbb5234ac29831d608aa824c7e/os-documents/1004

        PUT

        X-Auth-Token XXXXXXXXXXXX

        Content-Type    application/json

        {"document":{"id": "1004", "name": "docs4_MOD"}}

        返回:{"id": "1004", "name": "docs4_MOD"}

        再次查询,已经更新。

        Delete:

        http://10.20.0.88:8774/v2/3edbf8dbb5234ac29831d608aa824c7e/os-documents/1004

        DELETE

        X-Auth-Token XXXXXXXXXXXX

        Content-Type    application/json

        返回:HTTP/1.1 202 Accepted

        再次查询,已经删除。

      3.  
    6.  

附录:

012.openstack 学习导图

012.request-flow1:

012.request-flow2:

012.虚拟机创建流程-代码:

012.虚拟机创建流程-整体:

【OpenStack】OpenStack系列13之Nova源码解析与API扩展的更多相关文章

  1. 老生常谈系列之Aop--Spring Aop源码解析(二)

    老生常谈系列之Aop--Spring Aop源码解析(二) 前言 上一篇文章老生常谈系列之Aop--Spring Aop源码解析(一)已经介绍完Spring Aop获取advice切面增强方法的逻辑, ...

  2. 老生常谈系列之Aop--Spring Aop源码解析(一)

    老生常谈系列之Aop--Spring Aop源码解析(一) 前言 上一篇文章老生常谈系列之Aop--Spring Aop原理浅析大概阐述了动态代理的相关知识,并且最后的图给了一个Spring Aop实 ...

  3. Java 集合系列Stack详细介绍(源码解析)和使用示例

    Stack简介 Stack是栈.它的特性是:先进后出(FILO, First In Last Out). java工具包中的Stack是继承于Vector(矢量队列)的,由于Vector是通过数组实现 ...

  4. 小学徒成长系列—StringBuilder & StringBuffer关键源码解析

    在前面的博文<小学徒成长系列—String关键源码解析>和<小学徒进阶系列—JVM对String的处理>中,我们讲到了关于String的常用方法以及JVM对字符串常量Strin ...

  5. ThreadPoolExecutor系列<三、ThreadPoolExecutor 源码解析>

    本文系作者原创,转载请注明出处:http://www.cnblogs.com/further-further-further/p/7681826.html 在源码解析前,需要先理清线程池控制的运行状态 ...

  6. openstack nova 源码解析 — Nova API 执行过程从(novaclient到Action)

    目录 目录 Nova API Nova API 的执行过程 novaclient 将 Commands 转换为标准的HTTP请求 PasteDeploy 将 HTTP 请求路由到具体的 WSGI Ap ...

  7. jquery源码解析:jQuery扩展方法extend的详解

    jQuery中要扩展方法或者属性都是通过extend方法实现的.所谓的jQuery插件也是通过extend方法实现的. jQuery.extend扩展的是工具方法,也就是静态方法.jQuery.fn. ...

  8. TiKV 源码解析系列 - Raft 的优化

    本系列文章主要面向 TiKV 社区开发者,重点介绍 TiKV 的系统架构,源码结构,流程解析.目的是使得开发者阅读之后,能对 TiKV 项目有一个初步了解,更好的参与进入 TiKV 的开发中.本文是本 ...

  9. [源码解析] PyTorch 分布式之弹性训练(6)---监控/容错

    [源码解析] PyTorch 分布式之弹性训练(6)---监控/容错 目录 [源码解析] PyTorch 分布式之弹性训练(6)---监控/容错 0x00 摘要 0x01 总体逻辑 1.1 Node集 ...

随机推荐

  1. 每天一个linux命令(37):free 命令

    free命令可以显示Linux系统中空闲的.已用的物理内存及swap内存,及被内核使用的buffer.在Linux系统监控的工具中,free命令是最经常使用的命令之一. 1.命令格式: free [参 ...

  2. iOS开发小技巧--利用苹果官方API播放视频(方法已经过时,了解一下)

  3. C#中相对路径转换为绝对路径的方法

    第一种方法:使用System.Web类,System.Web.HttpContext.Current.Server.MapPath('相对路径');它还可以写成下面这种先声明空间,然后再使用函数的方式 ...

  4. Html-Css-div半透明

    源码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.o ...

  5. Windows Server 2008系统如何取消登录时要按Ctrl+Alt+Delete组合键

    1.点桌面任务栏的“开始-->运行”在弹出的窗口中输入gpedit.msc . 2.输入gpedit.msc后,点击确定即打开了组策略编辑器.在组策略编辑器的左框内依次序展开(点前面的“+”号) ...

  6. poj3207 2-SAT入门

    一开始题意没读懂 = = 题意:比如说对于表盘上a到b.c到d都要连边,这两个边不能交叉.这两个边要么都在圆内要么都在圆外,而且可以是曲线= = 比如这种情况:(Reference:http://bl ...

  7. 使用Jquery+EasyUI 进行框架项目开发案例讲解之四 组织机构管理源码分享

    http://www.cnblogs.com/huyong/p/3404647.html 在上三篇文章  <使用Jquery+EasyUI进行框架项目开发案例讲解之一---员工管理源码分享> ...

  8. 详细解读MySQL中的权限

    一.前言 很多文章中会说,数据库的权限按最小权限为原则,这句话本身没有错,但是却是一句空话.因为最小权限,这个东西太抽象,很多时候你并弄不清楚具体他需要哪 些权限. 现在很多mysql用着root账户 ...

  9. File类的创建,删除文件

    File.Create(@"C:\Users\shuai\Desktop\new.txt"); Console.WriteLine("创建成功"); Conso ...

  10. tp三大自动

    ThinkPHP三大自动 (2012-03-21 10:48:56) 转载▼ 标签: thinkphp 三大自动 自动验证 自动完成 自动填充 自动映射 字段映射 杂谈 分类: php 一.自动验证 ...