MelangeAPIBase
Melange API 规范
目录
常规信息
Melange API 使用 RESTful Web 服务接口实现。
- 所有 GET /resources 接受 'limit' 和 'marker' 参数。如果未传递这些参数,则应用默认限制。
- 如果 POST 或 PUT 到资源时未发送强制参数,API 将返回 '400 Bad Request' 响应。
请求/响应类型
- Melange API 支持 JSON 和 XML 数据序列化格式。
- 请求格式使用 Content-Type 标头指定,并且是需要请求体的操作所必需的。
- 可以使用 Accept 标头或在请求 URI 中添加 .xml 或 .json 扩展来指定响应格式。
- 如果未指定响应格式,则默认使用 JSON。
- 如果同时使用 Accept 标头和查询扩展指定了冲突的格式,则查询扩展优先。
版本
列出版本
| 动词 | URI |
| GET | / |
参数
无
响应代码
正常响应代码:200
JSON 响应
{
"versions":
[
{"status": "CURRENT", "name": "v0.1", "links": [ {"href": "https://:9898/v0.1", "rel": "self"}]
}
]
}
扩展
Melange API 是可扩展的。API 扩展允许在不更改版本的情况下将新功能引入 API,并允许供应商特定的利基功能。API 扩展的工作方式类似于 nova 扩展。
列出扩展
| 动词 | URI |
| GET | /extensions |
参数
无
响应代码
正常响应代码:200
列出扩展详情
| 动词 | URI |
| GET | /extensions/{alias} |
参数
无
响应代码
正常响应代码:200
注意
以下所有 URL 均以 "/v0.1" 为前缀。
IP 块
列出租户的块
| 动词 | URI |
| GET | /ipam/tenants/{tenant_id}/ip_blocks |
参数
类型('public' 或 'private')
响应代码
正常响应代码:200
列出租户的子网
| 动词 | URI |
| GET | /ipam/tenants/{tenant_id}/ip_blocks/{ip_block_id}/subnets |
参数
无
响应代码
~+~-正常响应代码:200
错误 - 404 Not Found [当 IpBlock 不存在时]-~+~
获取租户 IP 块的详情
| 动词 | URI |
| GET | /ipam/tenants/{tenant_id}/ip_blocks/:(id) |
参数
无
响应代码
~+~-正常响应代码:200
错误 - 404 Not Found [当 IpBlock 不存在时]-~+~
创建租户的 IP 块
| 动词 | URI |
| POST | /ipam/tenants/{tenant_id}/ip_blocks |
参数
~+~-'type': 'public' 或 'private' [必需]
'cidr': IPv4 或 IPv6 cidr [必需]
'network_id': 可以是 uuid,任何字符串均可接受
'policy_id': 是一个 uuid,必须是现有的策略
'dns1': 主 DNS 服务器 IP 地址,默认为 Melange 中配置的 DNS
'dns2': 辅助 DNS 服务器 IP 地址,默认为 Melange 中配置的 DNS
'gateway': 任何有效的 IP 地址,默认为块的第二个 IP 地址-~+~
响应代码
~+~-正常响应代码:201
错误 - 400 Bad Request [当缺少强制参数或字段验证失败时]-~+~
创建租户的子网
| 动词 | URI |
| POST | /ipam/tenants/{tenant_id}/ip_blocks/{ip_block_id}/subnets |
参数
~+~-'cidr': IpV4 或 IpV6 cidr [必需]
'network_id' : 可以是 uuid,任何字符串均可接受
'policy_id' : 是一个 uuid,必须是现有的策略
'tenant_id' : 可以是 uuid,任何字符串均可接受,默认为父块的 tenant_id-~+~
响应代码
~+~-正常响应代码:201
错误 - 404 Not Found [当给定 ip_block_id 和 tenant_id 的 IpBlock 不存在时]
错误 - 400 Bad Request [当缺少强制参数或字段验证失败时]-~+~
更新租户的 IP 块
| 动词 | URI |
| PUT | /ipam/tenants/{tenant_id}/ip_blocks/:(id) |
参数
~+~-'network_id' : 可以是 uuid,任何字符串均可接受
'policy_id' : 是一个 uuid,必须是现有的策略-~+~
响应代码
~+~-正常响应代码:200
错误 - 404 Not Found [当给定 id 和 tenant_id 的 IpBlock 不存在时]
错误 - 400 Bad Request [当字段验证失败时]-~+~
删除租户的 IP 块
| 动词 | URI |
| DELETE | /ipam/tenants/{tenant_id}/ip_blocks/:(id) |
参数
无
响应代码
~+~-正常响应代码:200
错误 - 404 Not Found [当给定 id 和 tenant_id 的 IpBlock 不存在时]-~+~
来自租户 IP 块的 IP 地址
列出租户的地址
| 动词 | URI |
| GET | /ipam/tenants/{tenant_id}/ip_blocks/{ip_block_id}/ip_addresses |
参数
无
响应代码
~+~-正常响应代码:200
错误 - 404 Not Found (当给定 ip_block_id 和 tenant_id 的 IpBlock 未找到时)-~+~
列出租户已分配的地址
| 动词 | URI |
| GET | /ipam/tenants/{tenant_id}/allocated_ip_addresses |
参数
'used_by_device': 设备的 uuid,可以是任何字符串。如果给定,将过滤并返回分配给此设备的 IP。
响应代码
正常响应代码:200
列出云提供商已分配的地址
| 动词 | URI |
| GET | /ipam/allocated_ip_addresses |
参数
'used_by_device': 设备的 uuid,可以是任何字符串。如果给定,将过滤并返回分配给此设备的 IP。
响应代码
正常响应代码:200
获取地址详情
| 动词 | URI |
| GET | /ipam/tenants/{tenant_id}/ip_blocks/{ip_block_id}/ip_addresses/{address} |
参数
无
响应代码
~+~-正常响应代码:200
错误 - 404 Not Found (当给定 ip_block_id 和 tenant_id 的 IpBlock 未找到时,或者给定地址的 IpAddress 未找到时)-~+~
分配租户的地址
| 动词 | URI |
| POST | /ipam/tenants/{tenant_id}/ip_blocks/{ip_block_id}/ip_addresses |
参数
~+~-'address' : 用于分配此地址。如果未提供此地址,将分配下一个可用地址。
'interface_id' : 可以是 uuid,任何字符串均可接受。是配置 IP 的接口的 ID
'tenant_id' : 实际使用 IP 的“承租人”租户(与拥有块的租户相反)。默认为拥有块的租户。
'used_by_device' : 可以是 uuid,任何字符串均可接受。是使用 IP 的实例(或任何其他设备)的 ID。
'mac_address' : 任何有效的 mac_address,仅适用于生成 ipv6 地址,ipv6 块是必需的-~+~
响应代码
~+~-正常响应代码:201
错误 - 404 Not Found [当给定 ip_block_id 的 IpBlock 未找到时]
错误 - 422 Unprocessable Entity [如果无法从 IpBlock 分配任何新的 ip_address]
错误 - 409 Conflict [如果给定的地址已分配]
错误 - 400 Bad Request [当缺少强制参数或字段验证失败时]-~+~
释放租户的地址
| 动词 | URI |
| DELETE | /ipam/tenants/{tenant_id}/ip_blocks/{ip_block_id}/ip_addresses/{address} |
参数
无
响应代码
~+~-正常响应代码:200
错误 - 404 Not Found (当给定 id 和 tenant_id 的 ip_block 未找到时)-~+~
恢复租户的地址
| 动词 | URI |
| PUT | /ipam/tenants/{tenant_id}/ip_blocks/{ip_block_id}/ip_addresses/{address}/restore |
参数
无
响应代码
~+~-正常响应代码:200
错误 - 404 Not Found (当给定 id 和 tenant_id 的 IpBlock 未找到时,或者给定地址的 IpAddress 未找到时)-~+~
静态路由
列出 IpBlock 的所有静态路由
| 动词 | URI |
| GET | /ipam/tenants/{tenant_id}/ip_blocks/{ip_block_id}/ip_routes |
参数
无
响应代码
正常响应代码:200
获取静态路由的详情
| 动词 | URI |
| GET | /ipam/tenants/{tenant_id}/ip_blocks/{ip_block_id}/ip_routes/:(id) |
参数
无
响应代码
~+~-正常响应代码:200
错误 - 404 Not Found [当给定 ip_block_id 和 tenant_id 的 IpBlock 不存在时,或者给定 id 的 IpRoute 不存在时]-~+~
为 IpBlock 创建静态路由
| 动词 | URI |
| POST | /ipam/tenants/{tenant_id}/ip_blocks/{ip_block_id}/ip_routes |
参数
~+~-'destination' : [必需] IpAddress 或目标主机或网络的 Cidr。
'netmask : 目标网络的 netmask(如果适用)。
'gateway' : [必需] IpAddress 的网关。
响应代码
~+~-正常响应代码:201
错误 - 404 Not Found [当给定 ip_block_id 和 tenant_id 的 IpBlock 不存在时]
错误 - 400 Bad Request [当缺少必需的参数或字段验证失败时]-~+~
更新静态路由
| 动词 | URI |
| PUT | /ipam/tenants/{tenant_id}/ip_blocks/{ip_block_id}/ip_routes/:(id) |
参数
~+~-'destination' : IpAddress 或目标主机或网络的 Cidr。
'netmask : 目标网络的 netmask(如果适用)。
'gateway' : IpAddress 的网关。
响应代码
~+~-正常响应代码:200
错误 - 404 Not Found [当给定 ip_block_id 和 tenant_id 的 IpBlock 不存在时,或者给定 id 的静态路由不存在时]
错误 - 400 Bad Request [当字段验证失败时]-~+~
删除静态路由
| 动词 | URI |
| DELETE | /ipam/tenants/{tenant_id}/ip_blocks/{ip_block_id}/ip_routes/:(id) |
参数
无
响应代码
~+~-正常响应代码:200
错误 - 404 Not Found [当给定 ip_block_id 和 tenant_id 的 IpBlock 不存在时,或者给定 id 的静态路由不存在时]-~+~
网络中的 IP 分配
从租户网络分配地址
| 动词 | URI |
| POST | /ipam/tenants/{tenant_id}/networks/{network_id}/interfaces/{interface_id}/ip_allocations |
参数
~+~-'addresses' : 这些地址(可以是 ipv4 和/或 ipv6 地址的数组)用于分配。如果未提供,将从一个 IPv4 和一个 IPv6 块分配下一个可用地址。
'mac_address' : 将用于分配 IPv6 地址。如果网络具有 IPv6 块,则为必需项。
'tenant_id' : 实际使用 IP 的“承租人”租户(与拥有块的租户相反)。默认为拥有分配 IP 的块的租户。
'used_by_device' : 可以是 uuid,任何字符串均可接受。是配置 IP 的实例(或任何其他设备)的 ID。
响应代码
~+~-正常响应代码:201
错误 - 422 Unprocessable Entity [如果无法从网络分配 ip 地址]
错误 - 404 Not Found [当给定 network_id 和 tenant_id 的网络未找到时]
错误 - 409 Conflict [如果给定的地址已分配]-~+~
错误 - 400 Bad Request [当缺少必需的参数或字段验证失败时]-~+~
列出租户网络的已分配 IpAddresses
| 动词 | URI |
| GET | /ipam/tenants/{tenant_id}/networks/{network_id}/interfaces/{interface_id}/ip_allocations |
参数
无
响应代码
~+~-正常响应代码:200
错误 - 404 Not Found [当给定 network_id 和 tenant_id 的网络未找到时]-~+~
释放租户网络的全部 IpAddresses
| 动词 | URI |
| DELETE | /ipam/tenants/{tenant_id}/networks/{network_id}/interfaces/{interface_id}/ip_allocations |
参数
无
响应代码
~+~-正常响应代码:200
错误 - 404 Not Found [当给定 network_id 和 tenant_id 的网络未找到时]-~+~
NAT
跟踪 NAT 信息旨在协助实现和跟踪浮动 IP。
列出全局
| 动词 | URI |
| GET | /ipam/ip_blocks/{ip_block_id}/ip_addresses/{address}/inside_globals |
参数
无
响应代码
~+~-正常响应代码:200
错误 - 404 Not Found [当 IpBlock 的 ip 块 ID 或给定地址的 IP 地址未找到时]-~+~
列出本地
| 动词 | URI |
| GET | /ipam/ip_blocks/{ip_block_id}/ip_addresses/{address}/inside_locals |
参数
无
响应代码
~+~-正常响应代码:200
错误 - 404 Not Found [当 IP 块的 ip_block_id 或给定地址的 IpAddress 未找到时]-~+~
分配全局
| 动词 | URI |
| POST | /ipam/ip_blocks/{ip_block_id}/ip_addresses/{address}/inside_globals |
参数
{'ip_addresses':'[ { "ip_block_id" : "some_global_ip_block_id", "ip_address" : "some_global_ip_address" }, ..., {....} }
响应代码
~+~-正常响应代码:200
错误 - 400 Bad Request [当参数中缺少 ip_block_id 和 ip_address 的值时]-~+~
分配本地
| 动词 | URI |
| POST | /ipam/ip_blocks/{ip_block_id}/ip_addresses/{address}/inside_globals |
参数
{'ip_addresses':'[ { "ip_block_id" : "some_local_ip_block_id", "ip_address" : "some_local_ip_address" } ... {} }
响应代码
~+~-正常响应代码:200
错误 - 400 Bad Request [当参数中缺少 ip_block_id 和 ip_address 的值时]-~+~
移除全局
| 动词 | URI |
| DELETE | /ipam/ip_blocks/{ip_block_id}/ip_addresses/{address}/inside_globals/{inside_globals_address} |
参数
无
响应代码
~+~-正常响应代码:200
错误 - 404 Not Found [当 IpBlock 的 ip_block_id 或给定地址的 IpAddress 未找到时]-~+~
移除本地
| 动词 | URI |
| DELETE | /ipam/ip_blocks/{ip_block_id}/ip_addresses/{address}/inside_locals/{inside_locals_address} |
参数
无
响应代码
~+~-正常响应代码:200
错误 - 404 Not Found [当 IpBlock 的 ip_block_id 或给定地址的 IpAddress 未找到时]-~+~
移除所有全局
| 动词 | URI |
| DELETE | /ipam/ip_blocks/{ip_block_id}/ip_addresses/{address}/inside_locals/{address} |
参数
无
响应代码
~+~-正常响应代码:200
错误 - 404 Not Found [当 IpBlock 的 ip_block_id 或给定地址的 IpAddress 未找到时]-~+~
移除所有本地
| 动词 | URI |
| DELETE | /ipam/ip_blocks/{ip_block_id}/ip_addresses/{address}/inside_locals |
参数
无
响应代码
~+~-正常响应代码:200
错误 - 404 Not Found [当 IpBlock 的 ip_block_id 或给定地址的 IpAddress 未找到时]-~+~
IP 策略
策略
列出所有租户的 IP 策略
| 动词 | URI |
| GET | /ipam/tenants/{tenant_id}/policies |
参数
无
响应代码
正常响应代码:200
获取租户 IP 策略的详情
| 动词 | URI |
| GET | /ipam/tenants/{tenant_id}/policies/:(id) |
参数
无
响应代码
~+~-正常响应代码:200
错误 - 404 Not Found [当给定 id 和 tenant_id 的策略不存在时]-~+~
为租户创建 IP 策略
| 动词 | URI |
| POST | /ipam/tenants/{tenant_id}/policies |
参数
~+~-'name' : [必需] 策略的名称。
'description' : 策略的简短描述。
响应代码
~+~-正常响应代码:201
错误 - 400 Bad Request [当缺少必需的参数或字段验证失败时]-~+~
更新租户的 IP 策略
| 动词 | URI |
| PUT | /ipam/tenants/{tenant_id}/policies/:(id) |
参数
~+~-'name' : 策略的名称。
'description' : 策略的简短描述。
响应代码
~+~-正常响应代码:200
错误 - 404 Not Found [当给定 id 和 tenant_id 的策略不存在时]
错误 - 400 Bad Request [当缺少必需的参数或字段验证失败时]-~+~
删除租户的 IP 策略
| 动词 | URI |
| DELETE | /ipam/tenants/{tenant_id}/policies/:(id) |
参数
无
响应代码
~+~-正常响应代码:200
错误 - 404 Not Found [当给定 id 和 tenant_id 的策略不存在时]-~+~
不可用 IP 范围
列出租户策略的所有不可用 IP 范围
| 动词 | URI |
| GET | /ipam/tenants/{tenant_id}/policies/{policy_id}/unusable_ip_ranges |
参数
无
响应代码
~+~-正常响应代码:200
错误 - 404 Not Found [当策略不存在时]-~+~
获取租户策略不可用 IP 范围的详情
| 动词 | URI |
| GET | /ipam/tenants/{tenant_id}/policies/{policy_id}/unusable_ip_ranges |
参数
无
响应代码
~+~-正常响应代码:200
错误 - 404 Not Found [当策略或 IP 范围不存在时]-~+~
在租户策略中创建不可用 IP 范围
| 动词 | URI |
| POST | /ipam/tenants/{tenant_id}/policies/{policy_id}/unusable_ip_ranges |
参数
~+~-'offset': 整数 [必需,可以是正数或负数整数]
'length' : 整数 [必需,应该是正数整数]-~+~
响应代码
~+~-正常响应代码:201
错误 - 404 未找到 [当策略不存在时]-~+~
更新租户策略的不可用 IP 地址范围
| 动词 | URI |
| PUT | /ipam/tenants/{tenant_id}/policies/{policy_id}/unusable_ip_ranges/:(id) |
参数
~+~-'offset': 整数 [可以是正数或负数整数]
'length' : 整数 [应该是正数整数]-~+~
响应代码
~+~-正常响应代码:200
错误 - 404 未找到 [当策略或 IP 地址范围不存在时]-~+~
删除租户策略的不可用 IP 地址范围
| 动词 | URI |
| DELETE | /ipam/tenants/{tenant_id}/policies/{policy_id}/unusable_ip_ranges/:(id) |
参数
无
响应代码
~+~-正常响应代码:200
错误 - 404 未找到 [当策略或 IP 地址范围不存在时]-~+~
租户策略不可用 IP 八位字节
列出租户策略的所有不可用 IP 八位字节
| 动词 | URI |
| GET | /ipam/tenants/{tenant_id}/policies/{policy_id}/unusable_ip_octets |
参数
无
响应代码
~+~-正常响应代码:200
错误 - 404 未找到 [当策略不存在时]-~+~
获取租户策略的不可用 IP 八位字节的详细信息
| 动词 | URI |
| GET | /ipam/tenants/{tenant_id}/policies/{policy_id}/unusable_ip_octets/:(id) |
参数
无
响应代码
~+~-正常响应代码:200
错误 - 404 未找到 [当策略或 IP 八位字节不存在时]-~+~
在租户策略中创建一个不可用的 IP 八位字节
| 动词 | URI |
| POST | /ipam/tenants/{tenant_id}/policies/{policy_id}/unusable_ip_octets |
参数
'octet': 整数 [必需,应该是 0-255]
响应代码
~+~-正常响应代码:201
错误 - 404 未找到 [当策略不存在时]-~+~
更新租户策略的不可用 IP 八位字节的详细信息。
| 动词 | URI |
| PUT | /ipam/tenants/{tenant_id}/policies/{policy_id}/unusable_ip_octets/:(id) |
参数
'octet': 整数 [应该是 0-255]
响应代码
~+~-正常响应代码:200
错误 - 404 未找到 [当策略或 IP 八位字节不存在时]-~+~
删除租户策略的不可用 IP 八位字节
| 动词 | URI |
| DELETE | /ipam/tenants/{tenant_id}/policies/{policy_id}/unusable_ip_octets/:(id) |
参数
无
响应代码
~+~-正常响应代码:200
错误 - 404 未找到 [当策略或 IP 八位字节不存在时]-~+~
待办事项
- 在资源详细信息中添加 'self' 和 'bookmark' 链接。
- 版本 Atom 订阅
- 通过 instance_id 列出所有 IP 的 API