novaclient代码解析之---通过nova show <server-id>命令解析Nova client与Nova API之间的调用关系

本文详细解析了通过novaclient执行nova show <server-id>命令时,客户端与Nova API之间的调用流程。从获取token开始,依次调用servers.Controller.index(), servers.Controller.show(), flavors.Controller.show()和images.Controller.show()。当不使用--minimal参数时,还会获取image和flavor信息。同时,文章提出疑问:未明确请求security-groups信息,为何在返回结果中出现,暗示了Nova API内部extension机制的作用,留待下篇博客解答。" 46968391,5108723,理解ACM中的邻接表结构,"['图论算法', '数据结构', 'ACM竞赛', '图的存储']

#nova–debug show <server-id>, (这里不讨论novaclient的认证过程)

可以client端得到的debug信息,调用过程如下:

1. 从服务器获取token
2. 调用servers.Controller.index()
3. 调用servers.Controller.show()
4. 调用flavors.Controller.show()
5. 调用images.Controller.show()

<pre name="code" class="python"><span style="font-size:14px;">REQ: curl -g -i --cacert "/opt/stack/data/ca-bundle.pem" -X GET http://9.115.122.54:35357/v3/auth/tokens -H "X-
Subject-Token: {SHA1}6b17daa3f28a43f6ce18863dfaa4374fbe59f6e0" -H "User-Agent: python-keystoneclient" -H "Accept: application/json" -H "X-Auth-Token: {SHA1}6bbfbc9a37c9
ab53696017541de0df5107e9ad35"

nova.api.openstack.wsgi: Calling method '<bound method Controller.index of <nova.api
.openstack.compute.servers.Controller object at 0x7fbd39a7b7d0>>' 

nova.compute.api: Searching by: {'deleted': False, 'project_id': u'ecb571eb456242f1a
f7e37c5190382bd', u'name': u'vm1'} 
nova.osapi_compute.wsgi.server: localhost "GET /v2/ecb571eb456242f1af7e37c5190382b
d/servers?name=vm1 HTTP/1.1" status: 200 len: 553 time: 0.1614599

nova.api.openstack.wsgi: Calling method '<bound method Controller.show of <nova.api.
openstack.compute.servers.Controller object at 0x7fbd39a7b7d0>>'
nova.osapi_compute.wsgi.server: localhost "GET /v2/ecb571eb456242f1af7e37c5190382bd/servers/33b937f9-2785-4fe0-8f88-6474ff50f7bb HTTP/1.1" status: 200 len: 1892 time: 0.0848639

nova.api.openstack.wsgi: Calling method '<bound method Controller.show of <nova.api.openstack.compute.flavors.Controller object at 0x7fbd39a0b910>>' 
nova.osapi_compute.wsgi.server:localhost "GET /v2/ecb571eb456242f1af7e37c5190382bd/flavors/42 HTTP/1.1" status: 200 len: 621 time: 0.0289028

nova.api.openstack.wsgi:Calling method '<bound method Controller.show of <nova.api.openstack.compute.images.Controller object at 0x7fbd399f0bd0>>' 
nova.osapi_compute.wsgi.server: localhost "GET /v2/ecb571eb456242f1af7e37c5190382bd/images/16f62e95-57b0-4ddd-88ee-2b063ce5f1e3 HTTP/1.1" status: 
<think>嗯,用户这次明确要求提供OpenStack Nova API调用示例,并且引用了站内资料。从对话历史看,我之前已经解释过Nova的多领域含义,用户现在聚焦在IT领域的OpenStack组件上。 用户引用的资料很有价值:引用[1]说明了Nova其他核心组件的关系,引用[2]提到API版本控制机制,引用[3]给出了官方文档入口,而引用[4]展示了一个具体API调用地址。这些恰好能组成完整的API调用知识链。 用户可能正在搭建私有云环境,需要实操指导。ta特意强调"调用示例",说明需要可复用的代码片段而非理论说明。考虑到OpenStack API调用涉及身份认证和端点发现,应该提供完整流程: 首先需要解决认证问题。根据引用[3],必须从Keystone获取token,这个步骤容易被新手忽略。示例要包含curl命令-H参数设置,明确展示X-Auth-Token的用法。 其次要突出API版本控制。引用[2]提到Nova使用X-OpenStack-Nova-API-Version头,这点很关键。不同版本的OpenStack API差异较大,必须明确标注示例适用的版本。 最后要关联组件协作。引用[1]指出Glance提供镜像、Cinder提供存储,所以创建虚拟机示例需要包含这些参数。可以设计一个包含多服务交互的完整调用链。 安全方面要注意提醒用户替换敏感信息,比如示例中的密码和项目ID。另外建议用户优先使用openstack-client工具,比直接调用API更安全便捷——这个补充提示能体现专业性。 用户可能下一步会问API错误排查,可以在相关问题里埋个伏笔。另外二手车价格和游戏角色的问题明显当前上下文无关,应该忽略。</think>以下是OpenStack Nova API的完整调用示例及关键步骤说明,结合您提供的引用资料整理: --- ### 一、核心调用流程 1. **身份认证(Keystone)** 获取Token(引用[3]): ```bash curl -i -X POST http://<keystone_ip>:5000/v3/auth/tokens \ -H "Content-Type: application/json" \ -d '{ "auth": { "identity": { "methods": ["password"], "password": { "user": { "name": "admin", "domain": {"name": "Default"}, "password": "secret" } } }, "scope": { "project": { "name": "admin", "domain": {"name": "Default"} } } } }' ``` ✅ 响应头`X-Subject-Token`即为所需Token(有效期24小时)[^3]。 2. **调用Nova API(需携带Token)** **示例1:列出虚拟机(引用[4])** ```bash curl -X GET http://<nova_ip>:8774/v2.1/<project_id>/servers \ -H "X-Auth-Token: <your_token>" \ -H "X-OpenStack-Nova-API-Version: 2.1" # 微版本控制(引用[2]) ``` **示例2:创建虚拟机(集成Glance/Cinder)** ```bash curl -X POST http://<nova_ip>:8774/v2.1/<project_id>/servers \ -H "Content-Type: application/json" \ -H "X-Auth-Token: <your_token>" \ -d '{ "server": { "name": "my-vm", "imageRef": "glance_image_id", # Glance提供镜像(引用[1]) "flavorRef": "flavor_id", "networks": [{"uuid": "neutron_net_id"}], # Neutron提供网络(引用[1]) "block_device_mapping_v2": [{ # Cinder提供块存储(引用[1]) "boot_index": 0, "uuid": "cinder_volume_id", "source_type": "volume", "destination_type": "volume" }] } }' ``` --- ### 二、关键参数说明 | 参数 | 作用 | 来源组件 | |---------------------|-------------------------------|------------| | `<project_id>` | 项目UUID(`openstack project list`获取) | Keystone | | `glance_image_id` | 系统镜像ID (`openstack image list`) | Glance | | `neutron_net_id` | 网络ID (`openstack network list`) | Neutron | | `cinder_volume_id` | 云硬盘ID (`openstack volume list`) | Cinder | --- ### 三、最佳实践 1. **API版本控制** 始终通过`X-OpenStack-Nova-API-Version`头指定微版本(如`2.1`),确保兼容性(引用[2])[^2]。 2. **端点发现** 通过Keystone服务目录获取Nova端点: ```bash openstack catalog show compute ``` 3. **官方文档参考** [OpenStack API Quick Start](https://developer.openstack.org/api-guide/quick-start/) 包含全量API规范(引用[3])[^3]。 --- ### 四、调试技巧 ```bash # 查看Nova API版本支持范围 curl -X GET http://<nova_ip>:8774/v2.1/ \ -H "X-OpenStack-Nova-API-Version: 2.1" # 响应示例 { "versions": [ { "status": "SUPPORTED", "min_version": "2.1", "version": "2.42", # 当前最大版本 "id": "v2.1" } ] } ``` > ⚠️ **注意**:生产环境建议使用OpenStack SDK(Python)或`openstack-client`命令行工具,避免直接操作原始API---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值