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

[python] view plaincopy
  1. #!/usr/bin/python # PBR Generated from 'console_scripts' import fromimport if:
  2. sys.exit(main())

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

[python] view plaincopy
  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查看这个实例的具体方法

[python] view plaincopy
  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类

[python] view plaincopy
  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这个命令的流程

[python] view plaincopy
  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

[python] view plaincopy
  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的过程:

[python] view plaincopy
  1. if .api.client.post(url, body=body)
  2. else .api.client.get(url)
[python] view plaincopy
  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

[python] view plaincopy
  1. @wsgi def, req):
  2. ._get_flavors(req)
  3. return._view_builder.index(req, limited_flavors)

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

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

[python] view plaincopy
  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、备份的名字、备份的描述,调用地方和方法如下:

[plain] view plaincopy

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

转到novaclient.v1_1.shell.py

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

[python] view plaincopy
  1. @utils'server', help=)
  2. @utils'displayname' ,
  3. )
  4. @utils'description' ,
  5. ,
  6. )
  7. def                         args.description)

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

在ServerManager类里添加

[python] view plaincopy
  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>

转载于:https://www.cnblogs.com/zpaixx/p/10662403.html

novaclient的api调用流程与开发相关推荐

  1. 阿里云物联网平台python开发手册_阿里云物联网平台之云端API调用(即云端开发教程)...

    本文介绍如何调用物联网平台的云端API,很多时候控制台上操作不太方便,需要通过API调用来完成或者通过调用API封装接口,以做到二次开发等.如产品管理,设备管理,规则创建等.分别介绍通过common ...

  2. 腾讯(表格OCR)API调用流程

    目录 1.调用费用: 2.调用流程 1)腾讯云账号进行注册 2)开通文字识别服务 2)1)进入文字识别控制台:https://console.cloud.tencent.com/ocr/overvie ...

  3. 阿里云(表格OCR)API调用流程

    目录 1.调用费用 2.调用流程 1)注册阿里云账号 2)开通服务 3)获取accessKeyId.accessKeySecret 4)运行代码(当前输入图片格式为url) 3.本地文件生成URL 1 ...

  4. Glib2基本api调用流程(十五)

    ****************************************************************************** 一.Glib2基本api g_object ...

  5. 【网易云信】推流SDK API 调用流程

    SDK API 提供了C++封装的代码 本质是一个比较古老的c sdk nls_instance : 基于C API 创建了C++ 实例 给 用户 G:\CDN\PUSH\LiveStreaming_ ...

  6. RPC 笔记(01)— RPC概念、调用流程、RPC 与 Restful API 区别

    1. 基本概念 PRC 远程过程调用 Remote Procedure Call,其就是一个节点请求另外一个节点提供的服务.当两个物理分离的子系统需要建立逻辑上的关联时,RPC 是牵线搭桥的常见技术手 ...

  7. 工作流之Camunda开发记录(一)----常用API与流程

    它是什么 一种工作流引擎,是Activiti的变种,他怎么来的其他很多地方有介绍 我不怎么关心 做什么 我本次记录的是作为工作流引擎使用 进行二次封装开发 只用他的一个壳子 具体流程是:1.前端传他自 ...

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

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

  9. AGV调式之软件开发—API调用

    AGV调式之软件开发-API调用 1.登陆界面 2.构建一个REST API请求 ①REST API请求是由特定的动词和名词组成的句子. 如果你能和你的机器人说话,你可能会说"给我你的电池电 ...

最新文章

  1. Ubuntu 14.04 64bit上安装Scrapy
  2. 远望智库未来产业研究院与资本实验室联合发布《2021全球区块链应用市场报告》...
  3. JBoss关闭时报Failed to authenticate principal=null,...
  4. Choose unique values for the 'webAppRootKey' context-param in your web.xml files!
  5. centos6.8安装zabbix
  6. Framework Design Studio 发布了
  7. oracle虚拟用户是什么意思,lr脚本中oracle 2tier虚拟用户相关内容
  8. linux下文件编码的查看与转换(转)
  9. Xcode 12 to build a single binary with both 32-bit and 64-bit support
  10. ubuntu下C语言打开bmp图像文件并读取数据
  11. 【MATLAB】代码分享:matlab将word文档转为pdf输出
  12. 软件测试背景目的要点概述
  13. Python实现轮盘抽奖小程序(带界面)
  14. BUUCTF RSA题目全解1
  15. html简单歌词同步教程,HTML5实现歌词同步(示例代码)
  16. 蜜蜂采蜜最短路径c语言算法,S018 蜜蜂采蜜太辛苦了,编程实现还是很容易的
  17. JavaScript小记——Ajax异步请求
  18. ACM斗牛游戏算法JAVA实现
  19. 互联网金融平台功能分析及微服务架构设计
  20. 小米4C刷回原厂固件

热门文章

  1. Windows和Linux的编译理解
  2. Python之装饰器
  3. PHP+MySql获取自动增长字段的新添加记录ID值
  4. 01-01java概述 doc命令、jdk\jre下载安装、path、classpath配置、开发中常见小问题
  5. C++之typedef 小记
  6. 微软职位内部推荐-Software Engineer II-News
  7. 删除电脑里的空文件夹
  8. EX2010与EX2013共存迁移01-设计及说明
  9. 游标、事务并发和锁三者之间的那点事
  10. 新日光Q3收入亏损8400万美元缩水33.85%