novaclient的api调用流程与开发
novaclient的api调用流程与开发
http://blog.csdn.net/tpiperatgod/article/details/18375387?utm_source=tuicool
另一个地址:http://neuromancer.sinaapp.com/?p=64
从nova client的入口查看
cat /usr/bin/nova
- #!/usr/bin/python
# PBR Generated from 'console_scripts'import
fromimport
if:
- sys.exit(main())
其中导入了novaclient.shell这个文件中导入了main方法,进入novaclient.shell.py查看
- def
try
:])) - except
) - print"ERROR: %s"
)
- .cs = client.Client(options.os_compute_api_version, os_username,
- .extensions, service_type=service_type,
- cacert=cacert, timeout=timeout)
self.cs是从client中创建出的一个Client实例,进入novaclient.client.py查看这个实例的具体方法
- def
: ,
- : ,
- : ,
- try
except
.join(version_map.keys())))
- raise
return
def
return client_class(*args, **kwargs)
用的是v1_1这个版本的api,对应的是novaclient.v1_1.client.py里的Client类
- class
Top-level object to access the OpenStack Compute API.
- Create an instance with your creds::
- >>> client = Client(USERNAME, PASSWORD, PROJECT_ID, AUTH_URL)
- Then call methods on its managers::
- >>> client.servers.list()
- ...
- >>> client.flavors.list()
- ...
- """
注释里讲了怎么使用python命令行调用nova的client
client里给流入的指令分了很多类,以flavors为例,看nova flavor-list这个命令的流程
- self)
- class
Manage :class:`Flavor` resources.
- """
- def, detailed=, is_public=):
- Get a list of all flavors.
- :rtype: list of :class:`Flavor`.
- """
- ifnot
] = is_public - % urlutils.urlencode(qparams) ifelse<span " <="" span="">
- <span " <="" span="">
- if
- return._list( % (detail, query_string), )
self._list进入novaclient.base.py
- class
Managers interact with a particular type of API (servers, flavors, images,
- etc.) and provide CRUD operations for them.
- """
- def, api):
- .api = api
- def, url, response_key, obj_class=, body=):
- if
.api.client.post(url, body=body) - else
.api.client.get(url) - ifis:
- .resource_class
- if
try
] - except
pass.completion_cache(, obj_class, mode=):
- .completion_cache(, obj_class, mode=):
- return, res, loaded=)
- forinif res]
novaclient.v1_1.flavors.py里FlavorManager的resource_class = Flavor即class Flavor(base.Resource)
所以最后obj_class为Flavor
调用api的过程:
- if
.api.client.post(url, body=body) - else
.api.client.get(url)
- 通过.api到了nova的api里nova.api.openstack.compute.__init__.py
- ifis or in
.resources[] = flavors.create_resource() - , ,
- .resources[],
- : },
- : })
找到nova.api.openstack.flavors.py
- @wsgi
def, req): - ._get_flavors(req)
- return._view_builder.index(req, limited_flavors)
它最后会返回一个存放flavors信息的字典,这些原始数据经过提取和加工,最后在终端被打印出来
nova.api.openstack.compute.views.flavors.py
- def, func, request, flavors):
- ] forin
._get_collection_links(request, - ._collection_name,
- )
- if
] = flavors_links - return flavors_dict
添加一个新的client流程:
功能:快速备份虚拟机,三个参数,虚拟机uuid、备份的名字、备份的描述,调用地方和方法如下:
novaclient.shell.py
class OpenStackComputeShell(object) 的get_subcommand_parser 方法里指定了actions_module
转到novaclient.v1_1.shell.py
增加一个新的方法,装饰器里是需要的参数,有顺序,和执行时的参数顺序一致
- @utils'server', help=)
- @utils'displayname'
, - )
- @utils'description'
, - ,
- )
- def
args.description)
这个功能是加在servers部分里的,转到novaclient.v1_1.servers.py
在ServerManager类里添加
- def, server, backup_name, backup_description):
- Backup a server instance quickly.
- :param server: The :class:`Server` (or its ID) to share onto.
- :param backup_name: Name of the backup image
- :param backup_description: The backup description
- """
: backup_name, - : backup_description}
- return._create( % base.getid(server),
- )
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调用流程与开发的更多相关文章
- hbase远程api调用, 远程连接开发,环境构建相关问题总结
平时在开发的过程中,都是将hbase的环境装在虚拟机或者双系统上的,开发是直接在unix或者linux上进行的,这样对于使用上,有些繁琐. 下面我将介绍我在使用windows远程开发过程中的一些总结: ...
- 【Qt编程】基于Qt的词典开发系列<八>--用户登录及API调用的实现
在上一篇文章<调用网络API>中,我仅仅讲述了怎样直观的使用API接口以及调用API后返回的结果,本文则从程序实现的角度来实现API的调用.当然本程序的实现也是借助于扇贝网的API接口文档 ...
- 如何用Baas快速在腾讯云上开发小程序-系列3 :实现腾讯云COS API调用
版权声明:本文由贺嘉 原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/640268001487425627 来源:腾云阁 h ...
- ABP开发框架前后端开发系列---(10)Web API调用类的简化处理
在较早期的随笔<ABP开发框架前后端开发系列---(5)Web API调用类在Winform项目中的使用>已经介绍了Web API调用类的封装处理,虽然这些调用类我们可以使用代码生成工具快 ...
- ABP开发框架前后端开发系列---(5)Web API调用类在Winform项目中的使用
在前面几篇随笔介绍了我对ABP框架的改造,包括对ABP总体的介绍,以及对各个业务分层的简化,Web API 客户端封装层的设计,使得我们基于ABP框架的整体方案越来越清晰化, 也越来越接近实际的项目开 ...
- ABP开发框架前后端开发系列---(4)Web API调用类的封装和使用
在前面随笔介绍ABP应用框架的项目组织情况,以及项目中领域层各个类代码组织,以及简化了ABP框架的各个层的内容,使得我们项目结构更加清晰.上篇随笔已经介绍了字典模块中应用服务层接口的实现情况,并且通过 ...
- 【转】 Android的NDK开发(1)————Android JNI简介与调用流程
原文网址:http://blog.csdn.net/conowen/article/details/7521340 ****************************************** ...
- Android的NDK开发(1)————Android JNI简介与调用流程
1.JNI简介 JNI全称为Java Native Interface(Java本地调用).从Java1.1开始,JNI成为java平台的一部分,它允许Java代码和其他语言写的代码(如C&C ...
- Vue.js——使用$.ajax和vue-resource实现OAuth的注册、登录、注销和API调用
概述 上一篇我们介绍了如何使用vue resource处理HTTP请求,结合服务端的REST API,就能够很容易地构建一个增删查改应用.这个应用始终遗留了一个问题,Web App在访问REST AP ...
随机推荐
- Docker进阶之八:搭建LNMP网站平台实战
搭建LNMP网站平台实战 LNMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写.L指Linux,N指Nginx,M一般指MySQL,也可以指MariaDB,P一般指PHP,也可 ...
- 从PRISM开始学WPF(三)Prism-Region-更新至Prism7.1
[7.1update]在开始前,我们先看下版本7.1中在本实例中的改动. 首先,项目文件中没有了Bootstrapper.cs,在上一篇的末尾,我们说过了,在7.1中,不见推荐使用Bootstrapp ...
- 时间序列算法(平稳时间序列模型,AR(p),MA(q),ARMA(p,q)模型和非平稳时间序列模型,ARIMA(p,d,q)模型)的模型以及需要的概念基础学习笔记梳理
在做很多与时间序列有关的预测时,比如股票预测,餐厅菜品销量预测时常常会用到时间序列算法,之前在学习这方面的知识时发现这方面的知识讲解不多,所以自己对时间序列算法中的常用概念和模型进行梳理总结(但是为了 ...
- Sql万能分页代码
sql数据库中常用的分页 我做了一个万能的 用的上的小伙伴拿去耍吧 go ----万能分页代码create procedure [dbo].[sp_datapager] @pagesize int, ...
- mysql 存储ip地址
mysql提供了两个方法来处理ip地址: inet_aton 把ip转为无符号整型(4-8位) inet_ntoa 把整型的ip转为电地址 插入数据前,先用inet_aton把ip地址转为整型,可以节 ...
- Biorhythms(poj1006+中国剩余定理)
Biorhythms Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 117973 Accepted: 37026 Des ...
- Windows下创建ArcGIS Server站点
原创文章,转载须标明出处自: https://www.cnblogs.com/gisspace/p/8126261.html ------------------------------------- ...
- Cannot read property 'validate' of undefined
在使用element-UI表单验证中一直报错,'Error in event handler for “click”: “TypeError: Cannot read property ‘valida ...
- Linux(二)—— Unix&Linux 的基本概念
Linux(二)-- Unix&Linux 的基本概念 计算机 = 主机(host)+ 终端(terminal) 主机 = 内核 + 实用工具 内核(kernel) 当计算机启动时,计算机要经 ...
- lua os.date函数定义和示例
os.date函数定义 原型:os.date ([format [, time]]) 解释:返回一个按format格式化日期.时间的字串或表. lua源码中os.date的注释如下: --- --- ...