在虚拟接口列表 API 响应中添加 VIF net-id¶
https://blueprints.launchpad.net/nova/+spec/add-vif-net-id-in-vif-list
v2 和 v2.1 的虚拟接口 API 响应之间存在差异。VIF net_id 未包含在 v2.1 响应中。本规范建议将 VIF net_id 作为微版本添加到 v2.1 API 中。
问题描述¶
V2 API 具有虚拟接口的扩展 ‘OS-EXT-VIF-NET’,它在虚拟接口列表响应中添加了 “OS-EXT-VIF-NET:net_id”。但在将 v2 扩展移植到 v2.1 时,此扩展被遗漏了。因此,虚拟接口 API 的 v2 和 v2.1 响应之间存在差异。
v2 列出虚拟接口的响应(启用所有扩展)
{
"virtual_interfaces": [
{
"id": "%(id)s",
"mac_address": "%(mac_addr)s",
"OS-EXT-VIF-NET:net_id": "%(id)s"
}
]
}
v2.1 列出虚拟接口的响应
{
"virtual_interfaces": [
{
"id": "%(id)s",
"mac_address": "%(mac_addr)s"
}
]
}
在 v2.1 中缺少属性 “OS-EXT-VIF-NET:net_id”。需要 VIF 的 net_id 的用户将无法从 v2.1 获取它。
这是 v2.1 基本 API 中的一个错误 [1],但无法将其作为错误修复,因为 v2.1 已在 kilo 中发布,并且根据 API 合同,在 v2.1 基本 API 中修复此错误为时已晚。
另一个问题是,v2.1 扩展列表也返回 ‘OS-EXT-VIF-NET’ 扩展,这给用户带来了错误的提示,即该扩展也已加载到 v2.1 中,而实际上并非如此,这是由于上述问题造成的。应在 v2.1 基本 API 中删除此扩展,并回溯到稳定的 kilo 分支,如 [2] 中建议的那样。
用例¶
需要 VIF 的 net_id 信息的用户,并且从 v2 API 获取相同信息,也应该能够从 v2.1 API 获取。
通过添加此信息,用户可以确定 vif 插入到哪个网络中。
项目优先级¶
无。
提议的变更¶
本规范建议通过在虚拟接口列表响应中添加 VIF net-id 信息来修复此错误,作为微版本。
v2.1 列出虚拟接口的响应
当前
{
"virtual_interfaces": [
{
"id": "%(id)s",
"mac_address": "%(mac_addr)s"
}
]
}
之后
{
"virtual_interfaces": [
{
"id": "%(id)s",
"mac_address": "%(mac_addr)s",
"net_id": "%(id)s"
}
]
}
将在响应中添加属性 “net_id”。
注意 - 属性名称 “OS-EXT-VIF-NET:net_id”(在 v2 中)已更改为 “net_id”。因为此属性作为微版本添加,并且根据指南 [3],我们不应像在 v2 中作为扩展添加时那样,在新属性名称中添加命名空间。
备选方案¶
作为替代方案,我们可以将其作为 v2.1 基本 API 中的错误进行修复,而无需使用微版本,以便 v2.1 与 v2 完全相同。但这会破坏 API 合同,因为 v2.1 已经发布。
数据模型影响¶
无。
REST API 影响¶
新的属性 VIF net-id 将作为微版本添加。
方法的规范
描述
API 虚拟接口列表
方法类型
GET
正常的 HTTP 响应代码
200,响应代码无变化
预期的错误 http 响应代码
错误代码无变化
资源的 URL
‘servers/<server_uuid>/os-virtual-interfaces’
如果允许,则为 body 数据定义 JSON schema
不允许请求体。
如果存在,则为响应数据定义 JSON schema
{
'status_code': [200],
'response_body': {
'type': 'object',
'properties': {
'virtual_interfaces': {
'type': 'array',
'items': {
'type': 'object',
'properties': {
'id': {'type': 'string'},
'mac_address': {'type': 'string'},
'net_id': {'type': 'string'}
}
'required': ['id', 'mac_address', 'net_id']
}
}
}
'required': ['virtual_interfaces']
}
}
安全影响¶
无。
通知影响¶
无。
其他最终用户影响¶
需要更新 python-novaclient,以便在 v2.1 + 微版本的相应命令中显示 VIF ‘net_id’。
性能影响¶
无。
其他部署者影响¶
无。
开发人员影响¶
无。
实现¶
负责人¶
- 主要负责人
gmann
- 其他贡献者
无
工作项¶
在虚拟接口列表响应中添加 ‘net_id’。
相应地修改示例和单元测试。
依赖项¶
无。
测试¶
目前 Nova 功能测试将涵盖这些更改的测试。在 Tempest 中讨论微版本测试后,可以相应地测试这些更改。
文档影响¶
将相应地更新虚拟接口 GET API 文档。