novaclient的api调用流程与开发

2015年07月05日 19:27:17 qiushanjushi 阅读数:3915
 

http://blog.csdn.net/tpiperatgod/article/details/18375387?utm_source=tuicool

另一个地址:http://neuromancer.sinaapp.com/?p=64

从nova client的入口查看

cat /usr/bin/nova

  1. #!/usr/bin/python
    # PBR Generated from 'console_scripts'

    import

    fromimport

    if:

  2. sys.exit(main())

其中导入了novaclient.shell这个文件中导入了main方法,进入novaclient.shell.py查看

  1. def
    try
    :]))
  2. except
    )
  3. print"ERROR: %s"

    )

  4. .cs = client.Client(options.os_compute_api_version, os_username,
  5. .extensions, service_type=service_type,
  6. cacert=cacert, timeout=timeout)

self.cs是从client中创建出的一个Client实例,进入novaclient.client.py查看这个实例的具体方法

  1. def

    : ,

  2. : ,
  3. : ,
  4. try

    except

    .join(version_map.keys())))

  5. raise

    return

    def

    return client_class(*args, **kwargs)

用的是v1_1这个版本的api,对应的是novaclient.v1_1.client.py里的Client类

  1. class

    Top-level object to access the OpenStack Compute API.

  2. Create an instance with your creds::
  3. >>> client = Client(USERNAME, PASSWORD, PROJECT_ID, AUTH_URL)
  4. Then call methods on its managers::
  5. >>> client.servers.list()
  6. ...
  7. >>> client.flavors.list()
  8. ...
  9. """

注释里讲了怎么使用python命令行调用nova的client

client里给流入的指令分了很多类,以flavors为例,看nova flavor-list这个命令的流程

  1. self)
  2. class

    Manage :class:`Flavor` resources.

  3. """
  4. def, detailed=, is_public=):
  5. Get a list of all flavors.
  6. :rtype: list of :class:`Flavor`.
  7. """
  8. ifnot
    ] = is_public
  9. % urlutils.urlencode(qparams) ifelse<span "  <="" span="">
  10. <span "  <="" span="">
  11. if
  12. return._list( % (detail, query_string), )

self._list进入novaclient.base.py

  1. class

    Managers interact with a particular type of API (servers, flavors, images,

  2. etc.) and provide CRUD operations for them.
  3. """
  4. def, api):
  5. .api = api
  6. def, url, response_key, obj_class=, body=):
  7. if
    .api.client.post(url, body=body)
  8. else
    .api.client.get(url)
  9. ifis:
  10. .resource_class
  11. if
    try
    ]
  12. except
    pass

    .completion_cache(, obj_class, mode=):

  13. .completion_cache(, obj_class, mode=):
  14. return, res, loaded=)
  15. forinif res]

novaclient.v1_1.flavors.py里FlavorManager的resource_class = Flavor即class Flavor(base.Resource)
所以最后obj_class为Flavor

调用api的过程:

  1. if
    .api.client.post(url, body=body)
  2. else
    .api.client.get(url)
  1. 通过.api到了nova的api里nova.api.openstack.compute.__init__.py
  2. ifis or in
    .resources[] = flavors.create_resource()
  3. , ,
  4. .resources[],
  5. : },
  6. : })

找到nova.api.openstack.flavors.py

  1. @wsgi
    def, req):
  2. ._get_flavors(req)
  3. return._view_builder.index(req, limited_flavors)

它最后会返回一个存放flavors信息的字典,这些原始数据经过提取和加工,最后在终端被打印出来

nova.api.openstack.compute.views.flavors.py

  1. def, func, request, flavors):
  2. ] forin
    ._get_collection_links(request,
  3. ._collection_name,
  4. )
  5. if
    ] = flavors_links
  6. return flavors_dict

添加一个新的client流程:

功能:快速备份虚拟机,三个参数,虚拟机uuid、备份的名字、备份的描述,调用地方和方法如下:

novaclient.shell.py
class OpenStackComputeShell(object) 的get_subcommand_parser 方法里指定了actions_module

转到novaclient.v1_1.shell.py

增加一个新的方法,装饰器里是需要的参数,有顺序,和执行时的参数顺序一致

  1. @utils'server', help=)
  2. @utils'displayname'
    ,
  3. )
  4. @utils'description'
    ,
  5. ,
  6. )
  7. def

    args.description)

这个功能是加在servers部分里的,转到novaclient.v1_1.servers.py

在ServerManager类里添加

  1. def, server, backup_name, backup_description):
  2. Backup a server instance quickly.
  3. :param server: The :class:`Server` (or its ID) to share onto.
  4. :param backup_name: Name of the backup image
  5. :param backup_description: The backup description
  6. """
    : backup_name,
  7. : backup_description}
  8. return._create( % base.getid(server),
  9. )

response_key是指返回数据里的key,这里返回的数据是{'id': "*****"},所以response_key = "id"

因为这个api返回的是一个json字符串,不能通过novaclient.base.py里Manager类里的方法把数据提取出来(它需要字典),于是把return_raw这个参数设置为True

然后就可以在nova的命令行里看到这个新的功能了:nova
backup-instance;使用方法:nova backup-instance <server_id>
<bak_name> <bak_description>

novaclient的api调用流程与开发的更多相关文章

  1. hbase远程api调用, 远程连接开发,环境构建相关问题总结

    平时在开发的过程中,都是将hbase的环境装在虚拟机或者双系统上的,开发是直接在unix或者linux上进行的,这样对于使用上,有些繁琐. 下面我将介绍我在使用windows远程开发过程中的一些总结: ...

  2. 【Qt编程】基于Qt的词典开发系列&lt;八&gt;--用户登录及API调用的实现

    在上一篇文章<调用网络API>中,我仅仅讲述了怎样直观的使用API接口以及调用API后返回的结果,本文则从程序实现的角度来实现API的调用.当然本程序的实现也是借助于扇贝网的API接口文档 ...

  3. 如何用Baas快速在腾讯云上开发小程序-系列3 :实现腾讯云COS API调用

    版权声明:本文由贺嘉 原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/640268001487425627 来源:腾云阁 h ...

  4. ABP开发框架前后端开发系列---(10)Web API调用类的简化处理

    在较早期的随笔<ABP开发框架前后端开发系列---(5)Web API调用类在Winform项目中的使用>已经介绍了Web API调用类的封装处理,虽然这些调用类我们可以使用代码生成工具快 ...

  5. ABP开发框架前后端开发系列---(5)Web API调用类在Winform项目中的使用

    在前面几篇随笔介绍了我对ABP框架的改造,包括对ABP总体的介绍,以及对各个业务分层的简化,Web API 客户端封装层的设计,使得我们基于ABP框架的整体方案越来越清晰化, 也越来越接近实际的项目开 ...

  6. ABP开发框架前后端开发系列---(4)Web API调用类的封装和使用

    在前面随笔介绍ABP应用框架的项目组织情况,以及项目中领域层各个类代码组织,以及简化了ABP框架的各个层的内容,使得我们项目结构更加清晰.上篇随笔已经介绍了字典模块中应用服务层接口的实现情况,并且通过 ...

  7. 【转】 Android的NDK开发(1)————Android JNI简介与调用流程

    原文网址:http://blog.csdn.net/conowen/article/details/7521340 ****************************************** ...

  8. Android的NDK开发(1)————Android JNI简介与调用流程

    1.JNI简介 JNI全称为Java Native Interface(Java本地调用).从Java1.1开始,JNI成为java平台的一部分,它允许Java代码和其他语言写的代码(如C&C ...

  9. Vue.js——使用$.ajax和vue-resource实现OAuth的注册、登录、注销和API调用

    概述 上一篇我们介绍了如何使用vue resource处理HTTP请求,结合服务端的REST API,就能够很容易地构建一个增删查改应用.这个应用始终遗留了一个问题,Web App在访问REST AP ...

随机推荐

  1. [翻译]Protocol Buffer 基础: C++

    目录 Protocol Buffer Basics: C++ 为什么使用 Protocol Buffers 在哪可以找到示例代码 定义你的协议格式 编译你的 Protocol Buffers Prot ...

  2. 【Javascript】JS的异步操作,浏览器的多线程间的协作

    遇到的问题,引发了思考 今天看了一个例子,强烈引发了我对于浏览器多线程之间的操作机制.同步与异步.回调函数的兴致,代码如下: <html> <head> <title&g ...

  3. 几分钟搞定redis存储session共享——设计实现

    前面我们写过C#在redis中存储常用的5种数据类型demo,没看过的可以点击电梯直达:https://www.cnblogs.com/xiongze520/p/10267804.html 我们上一篇 ...

  4. 清理dns缓存

    dns缓存是什么? DNS缓存指DNS返回了正确的IP之后,系统就会将这个结果临时储存起来.并且它会为缓存设定一个失效时间 (例如N小时),在这N小时之内,当你再次访问这个网站时,系统就会直接从你电脑 ...

  5. OpenCV 初体验

    个人博客原文链接 个人掘金链接 本文简单地介绍计算机图形处理的一些基本概念,以及一些有趣的例子和对应的Open CV的代码操作. 顺便说一句,恭喜IG夺冠! 一.图片存储原理 1.颜色空间RGB (1 ...

  6. ThinkPHP 5.0/5.1 自定义404界面的配置

    ★ 背景还要啥背景,就是觉得不可能用框架自带的 404 界面呗.可能跟之前的版本配置方法有点区别,在此做一下简单的笔记 框架:ThinkPHP 5.1,ThinkPHP5.0.20 ★ 配置过程♩. ...

  7. Web前端新学

    本人大学时学的是网络工程,那时候只是大概学了一点HTML和CSS.毕业后没有找IT方面的工作,所以对专业知识忘得差不多了.然由于生活现状,终是决心重新好好学习IT,刚入学的一周学习了C#语言的一些知识 ...

  8. SAP 没有激活HUM功能照常可以使用Handling Unit

    SAP 没有激活HUM功能照常可以使用Handling Unit 笔者所在的项目上的公司间STO的流程里,发货公司在做PGI之后系统自动触发收货公司的inbound delivery单据,发货公司发出 ...

  9. Unity 2D 效应器与来回移动的实现

    1.效应器 Point Effector 2D: 点效应器.进入区域,吸引或排斥物体 Area Effector 2D: 区域效应器,可以用来做马里奥的管道移动效果 Surface Effector ...

  10. quartz定时任务cron表达式

    cron 表达式格式:秒 分 时 日 月 周 年(可选) 子表达式范围 字段名 字段解释 值范围 特殊字符 Seconds 秒 0~59 , - * / Minutes 分 0~59 , - * / ...