Placement API¶
这是 OpenStack Placement API 的参考。要了解有关 OpenStack Placement API 概念的更多信息,请参阅Placement 简介。
Placement API 使用 JSON 进行数据交换。因此,发送数据负载到请求体中的 API(即 PUT 和 POST)的 Content-Type 头部必须设置为 application/json,除非另有说明。
请求 ID¶
默认情况下,系统上的所有日志都包含全局请求 ID 和本地请求 ID(如果可用)。本地请求 ID 是每个服务本地生成的唯一 ID,因此在该操作中涉及的每个服务(Nova、Cinder、Glance、Neutron 等)都不同。格式为 req- + UUID (UUID4)。全局请求 ID 是用户指定的请求 ID,用作所有服务的通用标识符。此请求 ID 在该操作中涉及的所有服务中都相同。格式为 req- + UUID (UUID4)。这允许管理员跟踪 API 请求的处理,因为它在所有不同的 nova 服务之间或在 Nova 和 Nova 在该请求中调用的其他组件服务之间进行转换。
即使在请求中指定了全局请求 ID,用户始终会收到一个本地请求 ID 作为响应。
有关请求 ID 的更多详细信息,请参考:错误(它不适用于 Placement API,但有一些共同点。)
请求
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
X-Openstack-Request-Id (可选) |
标头 |
字符串 |
全局请求 ID,它是 OpenStack 组件中用于跟踪每个请求的唯一通用 ID。全局请求 ID 的格式必须是 |
响应
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
X-Openstack-Request-Id |
标头 |
字符串 |
本地请求 ID,它是自动生成的唯一 ID,用于跟踪每个对 placement 的请求。它与请求关联并出现在该请求的日志行中。默认情况下,中间件配置确保本地请求 ID 出现在日志文件中。 |
错误¶
当与 placement API 交互时发生错误,响应将包含一些不同的信号来指示哪里出了问题,包括状态头部和响应体中的信息。JSON 错误响应体的结构由 OpenStack 错误指南定义。
- HTTP 状态码
响应的
Status头部将包含一个代码,由RFC 7231 第 6 节定义,该代码提供了问题的总体概述。此值也出现在响应体的status属性中。- 详细信息
错误情况的文本描述,位于
detail属性中。该值通常是服务内部发生的任何异常关联的消息。- 错误代码
当微版本为
>=1.23时,响应还将包含JSON主体中的code属性。这些将在下面进行记录。如果响应未使用特定代码,则显示placement.undefined_code。
注意
在某些情况下,例如当使用 keystone 且请求中未提供身份验证信息(导致 401 响应)时,错误响应的结构将与上述不符,因为错误是由 placement 服务之外的代码产生的。
错误代码¶
定义的错误是
代码 |
含义 |
|---|---|
|
当未定义或不需要特定代码时使用的默认代码。 |
|
已尝试删除或缩减正在使用的容量的库存。 |
|
另一个操作已同时发出了一个请求,该请求涉及此请求中引用的一项或多项相同资源,从而改变了状态。应检索当前状态以确定是否应重试所需的 операции。 |
|
此类型的资源已存在同名,不允许重复名称。 |
|
尝试删除资源提供者,但其库存存在分配。 |
|
尝试删除资源提供者,但其拥有一项或多项子提供者。必须先删除它们才能删除此提供者。 |
|
在涉及多个资源提供者的操作(例如Reshaper)中提及的资源提供者不存在。 |
|
请求中包含了只能指定一次的查询参数的多个实例。 |
|
请求中的值符合 schema,但语义验证失败。 |
|
请求中缺少必需的查询参数。 |
资源提供者和消费者代¶
Placement 通过为资源提供者和消费者维护一个代来处理针对同一实体的并发请求。代是一个不透明的值,每次其实体在服务器上成功更改时都会更新。
在适当的微版本中,代在涉及资源提供者和/或消费者(分配)的响应中返回,并且必须包含在对这些实体进行更改的请求中。服务器会检查以确保请求中指定的代与内部值匹配。不匹配表示在中间有另一个请求成功更新了该实体,从而改变了其代。这将导致 HTTP 409 Conflict 响应,并带错误代码 placement.concurrent_update。
根据使用场景,对这种错误的一种适当反应可能是重新 GET 相关的实体,重新评估并进行适当更新,然后使用新的负载重新提交请求。
以下伪代码是说明如何确保在资源提供者上设置一个特性的简单示例。
注意
这不是生产代码。除了不是任何特定编程语言的有效语法外,它故意忽略了详细信息和良好的编程实践,例如错误检查、重试限制等。它纯粹是为了说明目的。
function _is_concurrent_update(resp) {
if(resp.status_code != 409) return False
return(resp.json()["errors"][0]["code"] == "placement.concurrent_update")
}
function ensure_trait_on_provider(provider_uuid, trait) {
do {
path = "/resource_providers/" + provider_uuid + "/traits"
get_resp = placement.GET(path)
payload = get_resp.json()
if(trait in payload["traits"]) return
payload["traits"].append(trait)
put_resp = placement.PUT(path, payload)
} while _is_concurrent_update(put_resp)
}
API 版本¶
为了随着时间的推移为用户带来新功能,Placement API 支持微版本化。微版本允许通过 OpenStack-API-Version 头部按请求使用某些功能。例如,要请求微版本 1.10,请指定头部
OpenStack-API-Version: placement 1.10
有关微版本的更多详细信息,请参考:微版本规范
注意
每个版本支持的最大微版本各不相同。请参考:REST API 版本历史以获取 API 微版本历史详细信息。
获取有关 Placement API 所有已知主要版本的信息,包括有关最小和最大微版本的信息。
注意
目前,Placement API 只有一个主要版本:版本 1.0。
正常响应代码:200
响应¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
versions |
body |
数组 |
一个描述可用 API 版本的版本对象列表。 |
id |
body |
字符串 |
正在描述的版本的通用名称。仅供参考。 |
min_version |
body |
字符串 |
支持的最小微版本。 |
max_version |
body |
字符串 |
支持的最大微版本。 |
status |
body |
字符串 |
正在描述的版本的状态。在 placement 中,这是“CURRENT”。 |
links |
body |
数组 |
与此版本相关的链接列表。 |
响应示例¶
{
"versions" : [
{
"min_version" : "1.0",
"id" : "v1.0",
"max_version" : "1.28",
"status": "CURRENT",
"links": [
{
"href": "",
"rel": "self"
}
]
}
]
}
资源提供者¶
资源提供者是提供一种或多种资源类别(例如磁盘或内存)的可消耗库存的实体。它们可以被列出(带过滤器)、创建、更新和删除。
列出可选过滤的资源提供者集合。
正常响应代码:200
错误响应代码:badRequest(400)
如果在 resources 请求参数中指定的资源类别不存在,则会返回 400 BadRequest 响应代码。
请求¶
可以使用多个查询参数来过滤返回的资源提供者列表。如果提供了多个不同的参数,则所有过滤器的结果将通过布尔 AND 合并。
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
name (可选) |
查询 |
字符串 |
用于过滤列表的资源提供者名称。 |
uuid (可选) |
查询 |
字符串 |
资源提供者的 UUID。 |
member_of (可选) |
查询 |
字符串 |
表示聚合 UUID 的字符串;或前缀 member_of=5e08ea53-c4c6-448e-9334-ac4953de3cfa
member_of=in:42896e0d-205d-4fe3-bd1e-100924931787,5e08ea53-c4c6-448e-9334-ac4953de3cfa
从微版本 1.24 开始,可以指定多个 member_of=AGGA_UUID&member_of=in:AGGB_UUID,AGGC_UUID
从微版本 1.32 开始, member_of=AGGA_UUID&member_of=!AGGB_UUID
在逻辑上将翻译为“候选资源提供者必须在 AGGA 中,并且不在 AGGB 中。”我们不支持 member_of=!in:AGGA_UUID,AGGB_UUID,AGGC_UUID
member_of=!AGGA_UUID&member_of=!AGGB_UUID&member_of=!AGGC_UUID
我们不检查同一个聚合 UUID 是否同时存在于肯定和否定表达式中,以返回 400 BadRequest。在这种情况下,我们仍然返回 200。例如 member_of=AGGA_UUID&member_of=!AGGA_UUID
将返回一个空列表的 member_of=in:AGGA_UUID,AGGB_UUID&member_of=!AGGA_UUID
将返回不在AGGA中但在AGGB中的资源提供者。 1.3 版中的新功能 |
resources (可选) |
查询 |
字符串 |
逗号分隔的字符串列表,指示提供者必须具有容量和可用性以提供指定类别的资源数量 resources=VCPU:4,DISK_GB:64,MEMORY_MB:2048
请注意,该数量必须是大于 0 的整数。 1.4 版中的新功能 |
in_tree (可选) |
查询 |
字符串 |
资源提供者的 UUID。返回的资源提供者将位于与指定提供者相同的“提供者树”中。 1.14 版中的新功能 |
required (可选) |
查询 |
字符串 |
逗号分隔的字符串特性名称列表。结果将进行过滤,只包含具有所有指定特性的资源提供者。从微版本 1.22 开始,可以通过在特性前加上 从微版本 1.39 开始, required=T1,!T2&required=T3
表示 T1 且非 T2 且 T3。 此外,从微版本 1.39 开始, required=in:T1,T2,T3
这意味着 T1 或 T2 或 T3。 不支持将禁止特性混入 required=in:T3,T4&required=T1,!T2
受支持,它表示 T1 且非 T2 且 (T3 或 T4)。 1.18 版中的新功能 |
响应¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
resource_providers |
body |
数组 |
一个 |
generation |
body |
整数 |
一种一致性标记,有助于管理并发资源提供程序更新。 |
uuid |
body |
字符串 |
资源提供者的 UUID。 |
links |
body |
数组 |
与一个资源提供者相关联的链接列表。 注意 聚合关系链接从版本 1.1 开始可用。特性关系链接从版本 1.6 开始可用。分配关系链接从版本 1.11 开始可用。 |
name |
body |
字符串 |
一个资源提供者的名称。 |
parent_provider_uuid |
body |
字符串 |
资源提供者直接父级的 UUID。 1.14 版中的新功能 |
root_provider_uuid |
body |
字符串 |
此提供者树中最高级提供者的只读 UUID。 1.14 版中的新功能 |
响应示例¶
{
"resource_providers": [
{
"generation": 1,
"uuid": "99c09379-6e52-4ef8-9a95-b9ce6f68452e",
"links": [
{
"href": "/resource_providers/99c09379-6e52-4ef8-9a95-b9ce6f68452e",
"rel": "self"
},
{
"href": "/resource_providers/99c09379-6e52-4ef8-9a95-b9ce6f68452e/aggregates",
"rel": "aggregates"
},
{
"href": "/resource_providers/99c09379-6e52-4ef8-9a95-b9ce6f68452e/inventories",
"rel": "inventories"
},
{
"href": "/resource_providers/99c09379-6e52-4ef8-9a95-b9ce6f68452e/usages",
"rel": "usages"
},
{
"href": "/resource_providers/99c09379-6e52-4ef8-9a95-b9ce6f68452e/traits",
"rel": "traits"
},
{
"href": "/resource_providers/99c09379-6e52-4ef8-9a95-b9ce6f68452e/allocations",
"rel": "allocations"
}
],
"name": "vgr.localdomain",
"parent_provider_uuid": "542df8ed-9be2-49b9-b4db-6d3183ff8ec8",
"root_provider_uuid": "542df8ed-9be2-49b9-b4db-6d3183ff8ec8"
},
{
"generation": 2,
"uuid": "d0b381e9-8761-42de-8e6c-bba99a96d5f5",
"links": [
{
"href": "/resource_providers/d0b381e9-8761-42de-8e6c-bba99a96d5f5",
"rel": "self"
},
{
"href": "/resource_providers/d0b381e9-8761-42de-8e6c-bba99a96d5f5/aggregates",
"rel": "aggregates"
},
{
"href": "/resource_providers/d0b381e9-8761-42de-8e6c-bba99a96d5f5/inventories",
"rel": "inventories"
},
{
"href": "/resource_providers/d0b381e9-8761-42de-8e6c-bba99a96d5f5/usages",
"rel": "usages"
},
{
"href": "/resource_providers/d0b381e9-8761-42de-8e6c-bba99a96d5f5/traits",
"rel": "traits"
},
{
"href": "/resource_providers/d0b381e9-8761-42de-8e6c-bba99a96d5f5/allocations",
"rel": "allocations"
}
],
"name": "pony1",
"parent_provider_uuid": null,
"root_provider_uuid": "d0b381e9-8761-42de-8e6c-bba99a96d5f5"
}
]
}
创建一个新的资源提供者。
正常响应代码:201(微版本 1.0 - 1.19),200(微版本 1.20 - )
错误响应代码:conflict(409)
如果存在另一个具有所提供名称或 UUID 的资源提供者,则将返回 409 Conflict 响应代码。
请求¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
name |
body |
字符串 |
一个资源提供者的名称。 |
uuid (可选) |
body |
字符串 |
资源提供者的 UUID。 |
parent_provider_uuid (可选) |
body |
字符串 |
资源提供者直接父级的 UUID。
1.14 版中的新功能 |
请求示例¶
{
"name": "NFS Share",
"uuid": "7d2590ae-fb85-4080-9306-058b4c915e3f",
"parent_provider_uuid": "542df8ed-9be2-49b9-b4db-6d3183ff8ec8"
}
响应(微版本 1.0 - 1.19)¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
位置 |
标头 |
字符串 |
将返回创建资源的位置 URL,HTTP 头部“Location: <Location URL>”。 |
成功 POST 后不返回任何主体内容。
响应(微版本 1.20 - )¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
位置 |
标头 |
字符串 |
将返回创建资源的位置 URL,HTTP 头部“Location: <Location URL>”。 |
generation |
body |
整数 |
一种一致性标记,有助于管理并发资源提供程序更新。 |
uuid |
body |
字符串 |
资源提供者的 UUID。 |
links |
body |
数组 |
与资源提供者关联的链接列表。 |
name |
body |
字符串 |
一个资源提供者的名称。 |
parent_provider_uuid |
body |
字符串 |
资源提供者直接父级的 UUID。 |
root_provider_uuid |
body |
字符串 |
此提供者树中最高级提供者的 UUID。 |
响应示例(微版本 1.20 - )¶
{
"generation": 0,
"links": [
{
"href": "/placement/resource_providers/7d2590ae-fb85-4080-9306-058b4c915e3f",
"rel": "self"
},
{
"href": "/placement/resource_providers/7d2590ae-fb85-4080-9306-058b4c915e3f/aggregates",
"rel": "aggregates"
},
{
"href": "/placement/resource_providers/7d2590ae-fb85-4080-9306-058b4c915e3f/inventories",
"rel": "inventories"
},
{
"href": "/placement/resource_providers/7d2590ae-fb85-4080-9306-058b4c915e3f/usages",
"rel": "usages"
},
{
"href": "/placement/resource_providers/7d2590ae-fb85-4080-9306-058b4c915e3f/traits",
"rel": "traits"
},
{
"href": "/placement/resource_providers/7d2590ae-fb85-4080-9306-058b4c915e3f/allocations",
"rel": "allocations"
}
],
"name": "NFS Share",
"uuid": "7d2590ae-fb85-4080-9306-058b4c915e3f",
"parent_provider_uuid": "542df8ed-9be2-49b9-b4db-6d3183ff8ec8",
"root_provider_uuid": "542df8ed-9be2-49b9-b4db-6d3183ff8ec8"
}
资源提供者¶
有关描述,请参阅资源提供者。这组 API 调用使用由 uuid 标识的单个资源提供者。一个资源提供者可以被列出、更新和删除。
返回由 {uuid} 标识的资源提供者的表示。
正常响应代码:200
错误响应代码:itemNotFound(404)
请求¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
uuid |
路径 |
字符串 |
资源提供者的 UUID。 |
响应¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
generation |
body |
整数 |
一种一致性标记,有助于管理并发资源提供程序更新。 |
uuid |
body |
字符串 |
资源提供者的 UUID。 |
links |
body |
数组 |
与一个资源提供者相关联的链接列表。 注意 聚合关系链接从版本 1.1 开始可用。特性关系链接从版本 1.6 开始可用。分配关系链接从版本 1.11 开始可用。 |
name |
body |
字符串 |
一个资源提供者的名称。 |
parent_provider_uuid |
body |
字符串 |
资源提供者直接父级的 UUID。 1.14 版中的新功能 |
root_provider_uuid |
body |
字符串 |
此提供者树中最高级提供者的只读 UUID。 1.14 版中的新功能 |
响应示例¶
{
"generation": 0,
"links": [
{
"href": "/placement/resource_providers/3b4005be-d64b-456f-ba36-0ffd02718868",
"rel": "self"
},
{
"href": "/placement/resource_providers/3b4005be-d64b-456f-ba36-0ffd02718868/aggregates",
"rel": "aggregates"
},
{
"href": "/placement/resource_providers/3b4005be-d64b-456f-ba36-0ffd02718868/inventories",
"rel": "inventories"
},
{
"href": "/placement/resource_providers/3b4005be-d64b-456f-ba36-0ffd02718868/usages",
"rel": "usages"
},
{
"href": "/placement/resource_providers/3b4005be-d64b-456f-ba36-0ffd02718868/traits",
"rel": "traits"
},
{
"href": "/placement/resource_providers/3b4005be-d64b-456f-ba36-0ffd02718868/allocations",
"rel": "allocations"
}
],
"name": "Ceph Storage Pool",
"uuid": "3b4005be-d64b-456f-ba36-0ffd02718868",
"parent_provider_uuid": "542df8ed-9be2-49b9-b4db-6d3183ff8ec8",
"root_provider_uuid": "542df8ed-9be2-49b9-b4db-6d3183ff8ec8"
}
更新由 {uuid} 标识的资源提供者的名称。
正常响应代码:200
错误响应代码:badRequest(400), itemNotFound(404), conflict(409)
如果存在另一个具有所提供名称的资源提供者,则将返回 409 Conflict 响应代码。
请求¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
uuid |
路径 |
字符串 |
资源提供者的 UUID。 |
name |
body |
字符串 |
一个资源提供者的名称。 |
parent_provider_uuid (可选) |
body |
字符串 |
资源提供者直接父级的 UUID。
1.14 版中的新功能 |
请求示例¶
{
"name": "Shared storage",
"parent_provider_uuid": "542df8ed-9be2-49b9-b4db-6d3183ff8ec8"
}
响应¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
generation |
body |
整数 |
一种一致性标记,有助于管理并发资源提供程序更新。 |
uuid |
body |
字符串 |
资源提供者的 UUID。 |
links |
body |
数组 |
与一个资源提供者相关联的链接列表。 注意 聚合关系链接从版本 1.1 开始可用。特性关系链接从版本 1.6 开始可用。分配关系链接从版本 1.11 开始可用。 |
name |
body |
字符串 |
一个资源提供者的名称。 |
parent_provider_uuid |
body |
字符串 |
资源提供者直接父级的 UUID。 1.14 版中的新功能 |
root_provider_uuid |
body |
字符串 |
此提供者树中最高级提供者的只读 UUID。 1.14 版中的新功能 |
响应示例¶
{
"generation": 0,
"links": [
{
"href": "/placement/resource_providers/33f26ae0-dbf2-485b-a24a-244d8280e29f",
"rel": "self"
},
{
"href": "/placement/resource_providers/33f26ae0-dbf2-485b-a24a-244d8280e29f/aggregates",
"rel": "aggregates"
},
{
"href": "/placement/resource_providers/33f26ae0-dbf2-485b-a24a-244d8280e29f/inventories",
"rel": "inventories"
},
{
"href": "/placement/resource_providers/33f26ae0-dbf2-485b-a24a-244d8280e29f/usages",
"rel": "usages"
},
{
"href": "/placement/resource_providers/33f26ae0-dbf2-485b-a24a-244d8280e29f/traits",
"rel": "traits"
},
{
"href": "/placement/resource_providers/33f26ae0-dbf2-485b-a24a-244d8280e29f/allocations",
"rel": "allocations"
}
],
"name": "Shared storage",
"uuid": "33f26ae0-dbf2-485b-a24a-244d8280e29f",
"parent_provider_uuid": "542df8ed-9be2-49b9-b4db-6d3183ff8ec8",
"root_provider_uuid": "d0b381e9-8761-42de-8e6c-bba99a96d5f5"
}
删除由 {uuid} 标识的资源提供者。此操作还将取消关联聚合并删除库存。
正常响应代码:204
错误响应代码:itemNotFound(404), conflict(409)
如果由于删除资源提供者而将删除的任何库存存在分配记录,则将返回 409 Conflict 响应代码。
如果要删除的父资源提供者下存在子资源提供者,也将返回此错误代码。
请求¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
uuid |
路径 |
字符串 |
资源提供者的 UUID。 |
响应¶
成功删除后不返回正文内容。
资源类别¶
资源类别是表示资源提供者可以提供的标准或部署者特定资源的实体。
注意
资源类别 API 调用从版本 1.2 开始可用。
返回所有资源类的列表。
正常响应代码:200
Response¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
resource_classes |
body |
数组 |
一个 |
links |
body |
数组 |
与一个资源类别关联的链接列表。 |
name |
body |
字符串 |
一个资源类别的名称。 |
响应示例¶
{
"resource_classes": [
{
"links": [
{
"href": "/placement/resource_classes/VCPU",
"rel": "self"
}
],
"name": "VCPU"
},
{
"links": [
{
"href": "/placement/resource_classes/MEMORY_MB",
"rel": "self"
}
],
"name": "MEMORY_MB"
},
{
"links": [
{
"href": "/placement/resource_classes/DISK_GB",
"rel": "self"
}
],
"name": "DISK_GB"
},
{
"links": [
{
"href": "/placement/resource_classes/PCI_DEVICE",
"rel": "self"
}
],
"name": "PCI_DEVICE"
},
{
"links": [
{
"href": "/placement/resource_classes/SRIOV_NET_VF",
"rel": "self"
}
],
"name": "SRIOV_NET_VF"
},
{
"links": [
{
"href": "/placement/resource_classes/NUMA_SOCKET",
"rel": "self"
}
],
"name": "NUMA_SOCKET"
},
{
"links": [
{
"href": "/placement/resource_classes/NUMA_CORE",
"rel": "self"
}
],
"name": "NUMA_CORE"
},
{
"links": [
{
"href": "/placement/resource_classes/NUMA_THREAD",
"rel": "self"
}
],
"name": "NUMA_THREAD"
},
{
"links": [
{
"href": "/placement/resource_classes/NUMA_MEMORY_MB",
"rel": "self"
}
],
"name": "NUMA_MEMORY_MB"
},
{
"links": [
{
"href": "/placement/resource_classes/IPV4_ADDRESS",
"rel": "self"
}
],
"name": "IPV4_ADDRESS"
}
]
}
创建一个新的资源类别。新类别必须是自定义资源类别,以 CUSTOM_ 为前缀,并与标准资源类别不同。
正常响应代码:201
错误响应代码:badRequest(400), conflict(409)
如果资源类别没有前缀 CUSTOM_,则返回 400 BadRequest 响应代码。
如果存在另一个具有所提供名称的资源类别,则将返回 409 Conflict 响应代码。
请求¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
name |
body |
字符串 |
一个资源类别的名称。名称必须以 |
请求示例¶
{"name": "CUSTOM_FPGA"}
响应¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
位置 |
标头 |
字符串 |
将返回创建资源的位置 URL,HTTP 头部“Location: <Location URL>”。 |
成功 POST 后不返回任何主体内容。
资源类别¶
有关描述,请参阅资源类别。这组 API 调用使用由 name 标识的单个资源类别。一个资源类别可以被列出、更新和删除。
注意
资源类别 API 调用从版本 1.2 开始可用。
返回由 {name} 标识的资源类别的表示。
正常响应代码:200
错误响应代码:itemNotFound(404)
请求¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
name |
路径 |
字符串 |
一个资源类别的名称。 |
响应¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
name |
body |
字符串 |
一个资源类别的名称。 |
links |
body |
数组 |
与一个资源类别关联的链接列表。 |
响应示例¶
{
"links": [
{
"href": "/placement/resource_classes/CUSTOM_FPGA",
"rel": "self"
}
],
"name": "CUSTOM_FPGA"
}
创建或验证由 {name} 标识的单个资源类别的存在。
注意
该方法从版本 1.7 开始可用。
正常响应代码:201, 204
如果新资源类别成功创建,则返回 201 Created 响应代码。如果资源类别已存在,则返回 204 No Content 响应代码。
错误响应代码:badRequest(400)
Request¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
name |
路径 |
字符串 |
一个资源类别的名称。名称必须以 |
响应¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
位置 |
标头 |
字符串 |
将返回创建资源的位置 URL,HTTP 头部“Location: <Location URL>”。 |
成功 PUT 后不返回任何主体内容。
警告
强烈不建议使用 <1.7 微版本更改资源类别名称。
更新由 {name} 标识的资源类别的名称。
正常响应代码:200
错误响应代码:badRequest(400), itemNotFound(404), conflict(409)
如果存在另一个具有所提供名称的资源类别,则将返回 409 Conflict 响应代码。
Request¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
name |
路径 |
字符串 |
一个资源类别的名称。 |
name |
body |
字符串 |
一个资源类别的名称。名称必须以 |
请求示例¶
{"name": "CUSTOM_FPGA_V2"}
响应¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
name |
body |
字符串 |
一个资源类别的名称。 |
links |
body |
数组 |
与一个资源类别关联的链接列表。 |
响应示例¶
{
"links": [
{
"href": "/placement/resource_classes/CUSTOM_FPGA_V2",
"rel": "self"
}
],
"name": "CUSTOM_FPGA_V2"
}
删除由 {name} 标识的资源类别。
正常响应代码:204
错误响应代码:badRequest(400), itemNotFound(404), conflict(409)
如果尝试删除标准资源类别,则返回 400 BadRequest 响应代码。
如果该资源类别存在库存,则返回 409 Conflict 响应代码。
请求¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
name |
路径 |
字符串 |
一个资源类别的名称。 |
Response¶
成功删除后不返回正文内容。
资源提供者库存¶
每个资源提供者都拥有一种或多种资源类别的库存记录。库存记录包含有关资源的总量和保留量以及该资源对提供者的任何消耗约束的信息。
正常响应代码:200
错误响应代码:itemNotFound(404)
请求¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
uuid |
路径 |
字符串 |
资源提供者的 UUID。 |
响应¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
inventories |
body |
对象 |
一个以资源类别为键的库存字典。 |
resource_provider_generation |
body |
整数 |
一种一致性标记,有助于管理并发资源提供程序更新。 |
allocation_ratio |
body |
float |
它用于确定提供者的资源消耗是否可以超过物理约束。 例如,对于 vCPU 资源,如果 allocation_ratio = 16.0
total = 8
总容量等于 128 vCPU。 |
max_unit |
body |
整数 |
库存可以拥有的最大分配量。 |
min_unit |
body |
整数 |
库存可以拥有的最小分配量。 |
reserved |
body |
整数 |
提供程序为其自身用途保留的资源的量。 |
step_size |
body |
整数 |
可以请求的资源的整除量表示。例如,step_size = 5 表示只能请求可被 5 整除的值(5、10、15 等)。 |
total |
body |
整数 |
提供程序可以容纳的资源的实际量。 |
响应示例¶
{
"inventories": {
"DISK_GB": {
"allocation_ratio": 1.0,
"max_unit": 35,
"min_unit": 1,
"reserved": 0,
"step_size": 1,
"total": 35
},
"MEMORY_MB": {
"allocation_ratio": 1.5,
"max_unit": 5825,
"min_unit": 1,
"reserved": 512,
"step_size": 1,
"total": 5825
},
"VCPU": {
"allocation_ratio": 16.0,
"max_unit": 4,
"min_unit": 1,
"reserved": 0,
"step_size": 1,
"total": 4
}
},
"resource_provider_generation": 7
}
替换由 {uuid} 标识的资源提供者的库存记录集。
正常响应代码:200
错误响应代码:badRequest(400), itemNotFound(404), conflict(409)
请求¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
uuid |
路径 |
字符串 |
资源提供者的 UUID。 |
resource_provider_generation |
body |
整数 |
一种一致性标记,有助于管理并发资源提供程序更新。 |
inventories |
body |
对象 |
一个以资源类别为键的库存字典。 |
total |
body |
整数 |
提供程序可以容纳的资源的实际量。 |
allocation_ratio (可选) |
body |
float |
它用于确定提供者的资源消耗是否可以超过物理约束。 例如,对于 vCPU 资源,如果 allocation_ratio = 16.0
total = 8
总容量等于 128 vCPU。 |
max_unit (可选) |
body |
整数 |
库存可以拥有的最大分配量。 |
min_unit (可选) |
body |
整数 |
库存可以拥有的最小分配量。 |
reserved (可选) |
body |
整数 |
提供者为其自身使用保留的资源数量。在微版本 1.25 之前,此值必须小于 |
step_size (可选) |
body |
整数 |
可以请求的资源的整除量表示。例如,step_size = 5 表示只能请求可被 5 整除的值(5、10、15 等)。 |
请求示例¶
{
"inventories": {
"MEMORY_MB": {
"allocation_ratio": 2.0,
"max_unit": 16,
"step_size": 4,
"total": 128
},
"VCPU": {
"allocation_ratio": 10.0,
"reserved": 2,
"total": 64
}
},
"resource_provider_generation": 1
}
响应¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
resource_provider_generation |
body |
整数 |
一种一致性标记,有助于管理并发资源提供程序更新。 |
inventories |
body |
对象 |
一个以资源类别为键的库存字典。 |
allocation_ratio |
body |
float |
它用于确定提供者的资源消耗是否可以超过物理约束。 例如,对于 vCPU 资源,如果 allocation_ratio = 16.0
total = 8
总容量等于 128 vCPU。 |
max_unit |
body |
整数 |
库存可以拥有的最大分配量。 |
min_unit |
body |
整数 |
库存可以拥有的最小分配量。 |
reserved |
body |
整数 |
提供程序为其自身用途保留的资源的量。 |
step_size |
body |
整数 |
可以请求的资源的整除量表示。例如,step_size = 5 表示只能请求可被 5 整除的值(5、10、15 等)。 |
total |
body |
整数 |
提供程序可以容纳的资源的实际量。 |
响应示例¶
{
"inventories": {
"MEMORY_MB": {
"allocation_ratio": 2.0,
"max_unit": 16,
"min_unit": 1,
"reserved": 0,
"step_size": 4,
"total": 128
},
"VCPU": {
"allocation_ratio": 10.0,
"max_unit": 2147483647,
"min_unit": 1,
"reserved": 2,
"step_size": 1,
"total": 64
}
},
"resource_provider_generation": 2
}
删除由 {uuid} 标识的资源提供者的所有库存记录。
故障排除
当对提供者存在分配时,或者在尝试操作时提供者的库存被另一个线程更新时,请求返回 HTTP 409。
注意
该方法从版本 1.5 开始可用。
正常响应代码:204
错误响应代码:itemNotFound(404), conflict(409)
注意
由于此请求不接受资源提供者代,因此在多个线程管理单个提供者的库存时使用不安全。在这种情况下,请使用 PUT /resource_providers/{uuid}/inventories API,并带有一个空的 inventories 字典。
请求¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
uuid |
路径 |
字符串 |
资源提供者的 UUID。 |
响应¶
成功删除后不返回正文内容。
资源提供者库存¶
有关描述,请参阅资源提供者库存。
这组 API 调用使用由 resource_class 标识的单个库存。每个调用可以列出、创建、更新和删除一个库存。
正常响应代码:200
错误响应代码:itemNotFound(404)
请求¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
uuid |
路径 |
字符串 |
资源提供者的 UUID。 |
resource_class |
路径 |
字符串 |
一个资源类别的名称。 |
响应¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
resource_provider_generation |
body |
整数 |
一种一致性标记,有助于管理并发资源提供程序更新。 |
allocation_ratio |
body |
float |
它用于确定提供者的资源消耗是否可以超过物理约束。 例如,对于 vCPU 资源,如果 allocation_ratio = 16.0
total = 8
总容量等于 128 vCPU。 |
max_unit |
body |
整数 |
库存可以拥有的最大分配量。 |
min_unit |
body |
整数 |
库存可以拥有的最小分配量。 |
reserved |
body |
整数 |
提供程序为其自身用途保留的资源的量。 |
step_size |
body |
整数 |
可以请求的资源的整除量表示。例如,step_size = 5 表示只能请求可被 5 整除的值(5、10、15 等)。 |
total |
body |
整数 |
提供程序可以容纳的资源的实际量。 |
响应示例¶
{
"allocation_ratio": 16.0,
"max_unit": 4,
"min_unit": 1,
"reserved": 0,
"resource_provider_generation": 9,
"step_size": 1,
"total": 4
}
替换由 {uuid} 标识的资源提供者的 {resource_class} 库存记录。
正常响应代码:200
错误响应代码:badRequest(400), itemNotFound(404), conflict(409)
请求¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
uuid |
路径 |
字符串 |
资源提供者的 UUID。 |
resource_class |
路径 |
字符串 |
一个资源类别的名称。 |
resource_provider_generation |
body |
整数 |
一种一致性标记,有助于管理并发资源提供程序更新。 |
total |
body |
整数 |
提供程序可以容纳的资源的实际量。 |
allocation_ratio (可选) |
body |
float |
它用于确定提供者的资源消耗是否可以超过物理约束。 例如,对于 vCPU 资源,如果 allocation_ratio = 16.0
total = 8
总容量等于 128 vCPU。 |
max_unit (可选) |
body |
整数 |
库存可以拥有的最大分配量。 |
min_unit (可选) |
body |
整数 |
库存可以拥有的最小分配量。 |
reserved (可选) |
body |
整数 |
提供者为其自身使用保留的资源数量。在微版本 1.25 之前,此值必须小于 |
step_size (可选) |
body |
整数 |
可以请求的资源的整除量表示。例如,step_size = 5 表示只能请求可被 5 整除的值(5、10、15 等)。 |
请求示例¶
{
"resource_provider_generation": 7,
"total": 50
}
响应¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
resource_provider_generation |
body |
整数 |
一种一致性标记,有助于管理并发资源提供程序更新。 |
allocation_ratio |
body |
float |
它用于确定提供者的资源消耗是否可以超过物理约束。 例如,对于 vCPU 资源,如果 allocation_ratio = 16.0
total = 8
总容量等于 128 vCPU。 |
max_unit |
body |
整数 |
库存可以拥有的最大分配量。 |
min_unit |
body |
整数 |
库存可以拥有的最小分配量。 |
reserved |
body |
整数 |
提供程序为其自身用途保留的资源的量。 |
step_size |
body |
整数 |
可以请求的资源的整除量表示。例如,step_size = 5 表示只能请求可被 5 整除的值(5、10、15 等)。 |
total |
body |
整数 |
提供程序可以容纳的资源的实际量。 |
响应示例¶
{
"allocation_ratio": 1.0,
"max_unit": 2147483647,
"min_unit": 1,
"reserved": 0,
"resource_provider_generation": 8,
"step_size": 1,
"total": 50
}
删除由 {uuid} 标识的资源提供者的 {resource_class} 库存记录。
请参阅 Delete resource provider inventories 中的故障排除部分以获取描述。此外,当存在针对指定资源提供者和资源类别的分配时,请求返回 HTTP 409。
正常响应代码:204
错误响应代码:itemNotFound(404), conflict(409)
请求¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
uuid |
路径 |
字符串 |
资源提供者的 UUID。 |
resource_class |
路径 |
字符串 |
一个资源类别的名称。 |
响应¶
成功删除后不返回正文内容。
资源提供者聚合¶
每个资源提供者可以与一个或多个其他资源提供者在称为聚合的组中关联。本节中的 API 调用用于列出和更新与一个资源提供者关联的聚合。
提供者聚合用于建模提供者之间的关系。示例可能包括
一个共享存储池向提供 VCPU 和 MEMORY_MB 资源的计算节点提供者提供 DISK_GB 资源。
亲和/反亲和关系,例如物理位置、断电域或其他可靠性/可用性结构。
计算主机提供者分组对应于 Nova 主机聚合或可用性区域。
注意
Placement 聚合与 Nova 主机聚合不相同,不应视为等效。
Nova 的主机聚合和 placement 聚合之间的主要区别如下
在 Nova 中,主机聚合将nova-compute 服务与其他 nova-compute 服务关联起来。Placement 聚合不特定于 nova-compute 服务,实际上根本不是计算特定的。Placement API 中的资源提供者是通用的,placement 聚合只是通用资源提供者组。这是一个重要的区别,特别是对于 Ironic,当与 Nova 一起使用时,许多 Ironic 裸机节点连接到单个 nova-compute 服务。在 Placement API 中,每个 Ironic 裸机节点都是自己的资源提供者,因此可以通过 placement 聚合关联与其他 Ironic 裸机节点关联。
在 Nova 中,主机聚合可能附有元数据键/值对。与 Nova 主机聚合关联的所有 nova-compute 服务共享相同的元数据。Placement 聚合没有这样的元数据,因为 placement 聚合只代表资源提供者的分组。在 Placement API 中,资源提供者被单独修饰有特性,提供有关资源提供者的定性信息。
在 Nova 中,主机聚合决定了一个或多个 nova-compute 服务所在的可用性区域。虽然 placement 聚合可以用于建模可用性区域,但它们没有固有的此概念。
注意
聚合 API 请求从版本 1.1 开始可用。
返回与由 {uuid} 标识的资源提供者关联的聚合列表。
正常响应代码:200
错误响应代码:如果提供者不存在,则为 itemNotFound(404)。(如果提供者没有聚合,则结果为 200,并带有一个空聚合列表。)
请求¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
uuid |
路径 |
字符串 |
资源提供者的 UUID。 |
响应(微版本 1.1 - 1.18)¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
aggregates |
body |
数组 |
聚合 UUID 列表。以前不存在的聚合将自动创建。 |
响应示例(微版本 1.1 - 1.18)¶
{
"aggregates": [
"42896e0d-205d-4fe3-bd1e-100924931787",
"5e08ea53-c4c6-448e-9334-ac4953de3cfa"
]
}
响应(微版本 1.19 - )¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
aggregates |
body |
数组 |
聚合 UUID 列表。以前不存在的聚合将自动创建。 |
resource_provider_generation |
body |
整数 |
一种一致性标记,有助于管理并发资源提供程序更新。 |
响应示例(微版本 1.19 - )¶
{
"aggregates": [
"42896e0d-205d-4fe3-bd1e-100924931787",
"5e08ea53-c4c6-448e-9334-ac4953de3cfa"
],
"resource_provider_generation": 8
}
将聚合列表与由 {uuid} 标识的资源提供者关联起来。
正常响应代码:200
错误响应代码:badRequest(400), itemNotFound(404), conflict(409)
请求(微版本 1.1 - 1.18)¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
uuid |
路径 |
字符串 |
资源提供者的 UUID。 |
aggregates |
body |
数组 |
聚合 UUID 列表。以前不存在的聚合将自动创建。 |
请求示例(微版本 1.1 - 1.18)¶
[
"42896e0d-205d-4fe3-bd1e-100924931787",
"5e08ea53-c4c6-448e-9334-ac4953de3cfa"
]
请求(微版本 1.19 - )¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
uuid |
路径 |
字符串 |
资源提供者的 UUID。 |
aggregates |
body |
数组 |
聚合 UUID 列表。以前不存在的聚合将自动创建。 |
resource_provider_generation |
body |
整数 |
一种一致性标记,有助于管理并发资源提供程序更新。 |
请求示例(微版本 1.19 - )¶
{
"aggregates": [
"42896e0d-205d-4fe3-bd1e-100924931787",
"5e08ea53-c4c6-448e-9334-ac4953de3cfa"
],
"resource_provider_generation": 9
}
响应(微版本 1.1 - )¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
aggregates |
body |
数组 |
聚合 UUID 列表。以前不存在的聚合将自动创建。 |
resource_provider_generation |
body |
整数 |
一种一致性标记,有助于管理并发资源提供程序更新。 1.19 版中的新功能 |
响应示例(微版本 1.1 - 1.18)¶
{
"aggregates": [
"42896e0d-205d-4fe3-bd1e-100924931787",
"5e08ea53-c4c6-448e-9334-ac4953de3cfa"
]
}
响应示例(微版本 1.19 - )¶
{
"aggregates": [
"42896e0d-205d-4fe3-bd1e-100924931787",
"5e08ea53-c4c6-448e-9334-ac4953de3cfa"
],
"resource_provider_generation": 9
}
特性¶
特性是资源提供者的定性特征。特性的经典例子是请求不同提供者的磁盘:用户可以请求一个实例的 80GiB 磁盘空间(定量),但也可以期望磁盘是 SSD 而不是旋转磁盘(定性)。特性提供了一种方法来标记存储提供者是 SSD 还是旋转磁盘。
注意
特性 API 请求从版本 1.6 开始可用。
根据指定的参数返回有效的特性字符串列表。
正常响应代码:200
请求¶
可以使用多个查询参数来过滤返回的特性列表。如果提供了多个不同的参数,则所有过滤器的结果将通过布尔 AND 合并。
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
name (可选) |
查询 |
字符串 |
用于过滤特性的字符串。以下选项可用 startswith 运算符过滤名称以特定前缀开头的特性,例如 name=startswith:CUSTOM, in 运算符过滤名称在指定列表中的特性,例如 name=in:HW_CPU_X86_AVX,HW_CPU_X86_SSE,HW_CPU_X86_INVALID_FEATURE。 |
associated (可选) |
查询 |
字符串 |
如果此参数为 true,则返回的特性将是至少与一个资源提供者关联的特性。参数的可用值为 true 和 false。 |
响应¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
traits |
body |
数组 |
特性列表。 |
响应示例¶
{
"traits": [
"CUSTOM_HW_FPGA_CLASS1",
"CUSTOM_HW_FPGA_CLASS2",
"CUSTOM_HW_FPGA_CLASS3"
]
}
检查特性名称是否存在于此云中。
正常响应代码:204
错误响应代码:itemNotFound(404)
请求¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
name |
路径 |
字符串 |
特性的名称。 |
响应¶
成功 GET 后不返回任何主体内容。
插入一个新的自定义特性。如果特性已存在,则返回 204。
特性有两种:标准特性和自定义特性。标准特性可在不同的 OpenStack 云部署之间互操作。标准特性的定义来自 os-traits 库。标准特性在 placement API 中是只读的,这意味着用户无法通过 API 修改任何标准特性。自定义特性由管理员用户用于管理资源提供者的非标准定性信息。
正常响应代码:201, 204
错误响应代码:badRequest(400)
如果特性名称没有前缀 CUSTOM_,则为 400 BadRequest。
请求¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
name |
路径 |
字符串 |
特性的名称。 |
响应¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
位置 |
标头 |
字符串 |
将返回创建资源的位置 URL,HTTP 头部“Location: <Location URL>”。 |
成功 PUT 后不返回任何主体内容。
删除由 {name} 指定的特性。请注意,只能删除自定义特性。
正常响应代码:204
错误响应代码:badRequest(400), itemNotFound(404), conflict(409)
如果要删除的名称是标准特性,则为 400 BadRequest。
如果不存在此类特性,则为 404 Not Found。
如果删除的名称与任何 ResourceProvider 存在关联,则为 409 Conflict。
请求¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
name |
路径 |
字符串 |
特性的名称。 |
响应¶
成功删除后不返回正文内容。
资源提供者特性¶
有关描述,请参阅特性。这组 API 请求查询/编辑特性与资源提供者之间的关联。
注意
特性 API 请求从版本 1.6 开始可用。
返回由 {uuid} 标识的资源提供者的特性列表。
正常响应代码:200
错误响应代码:itemNotFound(404)
请求¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
uuid |
路径 |
字符串 |
资源提供者的 UUID。 |
响应¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
traits |
body |
数组 |
特性列表。 |
resource_provider_generation |
body |
整数 |
一种一致性标记,有助于管理并发资源提供程序更新。 |
响应示例¶
{
"resource_provider_generation": 1,
"traits": [
"CUSTOM_HW_FPGA_CLASS1",
"CUSTOM_HW_FPGA_CLASS3"
]
}
将特性与由 {uuid} 标识的资源提供者关联起来。所有关联的特性将被请求体中指定的特性替换。
正常响应代码:200
错误响应代码:badRequest(400), itemNotFound(404), conflict(409)
如果任何指定的特性无效,则为 400 Bad Request。有效特性可通过 GET /traits 查询。
如果 resource_provider_generation 与服务器端不匹配,则为 409 Conflict。
请求¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
uuid |
路径 |
字符串 |
资源提供者的 UUID。 |
traits |
body |
数组 |
特性列表。 |
resource_provider_generation |
body |
整数 |
一种一致性标记,有助于管理并发资源提供程序更新。 |
请求示例¶
{
"resource_provider_generation": 0,
"traits": [
"CUSTOM_HW_FPGA_CLASS1",
"CUSTOM_HW_FPGA_CLASS3"
]
}
响应¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
traits |
body |
数组 |
特性列表。 |
resource_provider_generation |
body |
整数 |
一种一致性标记,有助于管理并发资源提供程序更新。 |
响应示例¶
{
"resource_provider_generation": 1,
"traits": [
"CUSTOM_HW_FPGA_CLASS1",
"CUSTOM_HW_FPGA_CLASS3"
]
}
解除所有特性与由 {uuid} 标识的资源提供者的关联。
正常响应代码:204
错误响应代码:itemNotFound(404), conflict(409)
如果在尝试操作时提供者的特性被另一个线程更新,则为 409 Conflict。
注意
由于此请求不接受资源提供者代,因此在多个线程管理单个提供者的特性时使用不安全。在这种情况下,请使用 PUT /resource_providers/{uuid}/traits API,并带有一个空的 traits 列表。
请求¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
uuid |
路径 |
字符串 |
资源提供者的 UUID。 |
响应¶
成功删除后不返回正文内容。
分配¶
分配是表示资源已被某些资源消费者分配和使用的记录。它们指示从特定资源提供者分配给给定资源消费者的特定资源数量。
在单个请求中为多个消费者创建、更新或删除分配。这允许客户端原子地设置或交换多个消费者的分配,这可能在迁移或移动类型操作期间需要。
通过将 allocations 设置为空对象(参见下面的示例),可以删除请求中提及的单个消费者 uuid 的分配。
从微版本 1.13 开始可用。
正常响应代码:204
错误响应代码:badRequest(400), conflict(409)
如果任何指定的资源类别在任何资源提供者中都没有可用库存,则为 409 Conflict。
如果在尝试操作时库存被另一个请求更新,则为 409 Conflict,并带错误代码
placement.concurrent_update。请参阅资源提供者和消费者代。如果在尝试操作时指定消费者的分配被另一个请求创建、更新或删除,则在微版本 1.28 或更高版本中为 409 Conflict,并带错误代码
placement.concurrent_update。请参阅资源提供者和消费者代。
请求¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
消费者 UUID |
body |
字符串 |
消费者的 UUID。 |
consumer_generation |
body |
整数 |
消费者的代。当指示调用方期望消费者尚不存在时,应设置为 1.28 版中的新功能 |
consumer_type |
body |
字符串 |
一个由数字、 1.38 版中的新功能 |
project_id |
body |
字符串 |
项目的 UUID。 |
user_id |
body |
字符串 |
用户的 UUID。 |
allocations |
body |
对象 |
一个以资源提供者 UUID 为键的资源分配字典。如果这是一个空对象,则将删除此消费者的分配。 |
generation (可选) |
body |
整数 |
一个一致的视图标记,用于协助管理并发资源提供者更新。该值被忽略;它的存在是为了保持读写表示之间的对称性。 |
resources |
body |
对象 |
一个以资源类别名称为键的资源记录字典。 |
mappings (可选) |
body |
对象 |
一个字典,将请求组后缀与标识满足每个组的资源提供者 UUID 列表关联起来。空字符串和 1.34 版中的新功能 |
请求示例(微版本 1.38 - )¶
{
"30328d13-e299-4a93-a102-61e4ccabe474": {
"consumer_generation": 1,
"project_id": "131d4efb-abc0-4872-9b92-8c8b9dc4320f",
"user_id": "131d4efb-abc0-4872-9b92-8c8b9dc4320f",
"allocations": {
"e10927c4-8bc9-465d-ac60-d2f79f7e4a00": {
"resources": {
"VCPU": 2,
"MEMORY_MB": 3
},
"generation": 4
}
},
"consumer_type": "INSTANCE"
},
"71921e4e-1629-4c5b-bf8d-338d915d2ef3": {
"consumer_generation": 1,
"project_id": "131d4efb-abc0-4872-9b92-8c8b9dc4320f",
"user_id": "131d4efb-abc0-4872-9b92-8c8b9dc4320f",
"allocations": {},
"consumer_type": "MIGRATION"
},
"48c1d40f-45d8-4947-8d46-52b4e1326df8": {
"consumer_generation": 1,
"project_id": "131d4efb-abc0-4872-9b92-8c8b9dc4320f",
"user_id": "131d4efb-abc0-4872-9b92-8c8b9dc4320f",
"allocations": {
"e10927c4-8bc9-465d-ac60-d2f79f7e4a00": {
"resources": {
"VCPU": 4,
"MEMORY_MB": 5
},
"generation": 12
}
},
"consumer_type": "INSTANCE"
}
}
请求示例(微版本 1.28 - 1.36)¶
{
"30328d13-e299-4a93-a102-61e4ccabe474": {
"consumer_generation": 1,
"project_id": "131d4efb-abc0-4872-9b92-8c8b9dc4320f",
"user_id": "131d4efb-abc0-4872-9b92-8c8b9dc4320f",
"allocations": {
"e10927c4-8bc9-465d-ac60-d2f79f7e4a00": {
"resources": {
"VCPU": 2,
"MEMORY_MB": 3
},
"generation": 4
}
}
},
"71921e4e-1629-4c5b-bf8d-338d915d2ef3": {
"consumer_generation": 1,
"project_id": "131d4efb-abc0-4872-9b92-8c8b9dc4320f",
"user_id": "131d4efb-abc0-4872-9b92-8c8b9dc4320f",
"allocations": {}
},
"48c1d40f-45d8-4947-8d46-52b4e1326df8": {
"consumer_generation": 1,
"project_id": "131d4efb-abc0-4872-9b92-8c8b9dc4320f",
"user_id": "131d4efb-abc0-4872-9b92-8c8b9dc4320f",
"allocations": {
"e10927c4-8bc9-465d-ac60-d2f79f7e4a00": {
"resources": {
"VCPU": 4,
"MEMORY_MB": 5
},
"generation": 12
}
}
}
}
请求示例(微版本 1.13 - 1.27)¶
{
"30328d13-e299-4a93-a102-61e4ccabe474": {
"project_id": "131d4efb-abc0-4872-9b92-8c8b9dc4320f",
"user_id": "131d4efb-abc0-4872-9b92-8c8b9dc4320f",
"allocations": {
"e10927c4-8bc9-465d-ac60-d2f79f7e4a00": {
"resources": {
"VCPU": 2,
"MEMORY_MB": 3
}
}
}
},
"71921e4e-1629-4c5b-bf8d-338d915d2ef3": {
"project_id": "131d4efb-abc0-4872-9b92-8c8b9dc4320f",
"user_id": "131d4efb-abc0-4872-9b92-8c8b9dc4320f",
"allocations": {}
},
"48c1d40f-45d8-4947-8d46-52b4e1326df8": {
"project_id": "131d4efb-abc0-4872-9b92-8c8b9dc4320f",
"user_id": "131d4efb-abc0-4872-9b92-8c8b9dc4320f",
"allocations": {
"e10927c4-8bc9-465d-ac60-d2f79f7e4a00": {
"resources": {
"VCPU": 4,
"MEMORY_MB": 5
}
}
}
}
}
响应¶
成功请求后不返回任何主体内容
列出由 {consumer_uuid} 标识的消费者在所有消耗的资源提供者上的所有分配记录。
注意
当列出没有分配的消费者 UUID 的分配时,返回一个带有空值的字典 {"allocations": {}}。
正常响应代码:200
请求¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
消费者 UUID |
路径 |
字符串 |
消费者的 UUID。 |
响应¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
allocations |
body |
对象 |
一个以资源提供者 UUID 为键的分配字典。 |
generation |
body |
整数 |
一种一致性标记,有助于管理并发资源提供程序更新。 |
resources |
body |
对象 |
一个以资源类别名称为键的资源记录字典。 |
consumer_generation |
body |
整数 |
消费者的代。当列出没有分配的消费者 UUID 的分配时将不存在。 1.28 版中的新功能 |
consumer_type |
body |
字符串 |
一个由数字、 1.38 版中的新功能 |
project_id |
body |
字符串 |
项目的 UUID。当列出没有分配的消费者 UUID 的分配时将不存在。 1.12 版中的新功能 |
user_id |
body |
字符串 |
用户的 UUID。当列出没有分配的消费者 UUID 的分配时将不存在。 1.12 版中的新功能 |
响应示例(1.38 - )¶
{
"allocations": {
"92637880-2d79-43c6-afab-d860886c6391": {
"generation": 2,
"resources": {
"DISK_GB": 5
}
},
"ba8e1ef8-7fa3-41a4-9bb4-d7cb2019899b": {
"generation": 8,
"resources": {
"MEMORY_MB": 512,
"VCPU": 2
}
}
},
"consumer_generation": 1,
"project_id": "7e67cbf7-7c38-4a32-b85b-0739c690991a",
"user_id": "067f691e-725a-451a-83e2-5c3d13e1dffc",
"consumer_type": "INSTANCE"
}
响应示例(1.28 - 1.36)¶
{
"allocations": {
"92637880-2d79-43c6-afab-d860886c6391": {
"generation": 2,
"resources": {
"DISK_GB": 5
}
},
"ba8e1ef8-7fa3-41a4-9bb4-d7cb2019899b": {
"generation": 8,
"resources": {
"MEMORY_MB": 512,
"VCPU": 2
}
}
},
"consumer_generation": 1,
"project_id": "7e67cbf7-7c38-4a32-b85b-0739c690991a",
"user_id": "067f691e-725a-451a-83e2-5c3d13e1dffc"
}
响应示例(1.12 - 1.27)¶
{
"allocations": {
"92637880-2d79-43c6-afab-d860886c6391": {
"generation": 2,
"resources": {
"DISK_GB": 5
}
},
"ba8e1ef8-7fa3-41a4-9bb4-d7cb2019899b": {
"generation": 8,
"resources": {
"MEMORY_MB": 512,
"VCPU": 2
}
}
},
"project_id": "7e67cbf7-7c38-4a32-b85b-0739c690991a",
"user_id": "067f691e-725a-451a-83e2-5c3d13e1dffc"
}
创建或更新一个或多个分配记录,表示由 {consumer_uuid} 标识的消费者从一个或多个资源提供者消耗一个或多个类别的资源。如果此消费者已存在分配,则会替换它们。
正常响应代码:204
错误响应代码:badRequest(400), itemNotFound(404), conflict(409)
如果任何指定的资源类别在任何资源提供者中都没有可用库存,则为 409 Conflict。
如果在尝试操作时库存被另一个请求更新,则为 409 Conflict,并带错误代码
placement.concurrent_update。请参阅资源提供者和消费者代。如果在尝试操作时指定消费者的分配被另一个请求创建、更新或删除,则在微版本 1.28 或更高版本中为 409 Conflict,并带错误代码
placement.concurrent_update。请参阅资源提供者和消费者代。
请求(微版本 1.12 - )¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
消费者 UUID |
路径 |
字符串 |
消费者的 UUID。 |
allocations |
body |
对象 |
一个以资源提供者 UUID 为键的资源分配字典。 |
resources |
body |
对象 |
一个以资源类别名称为键的资源记录字典。 |
consumer_generation |
body |
整数 |
消费者的代。当指示调用方期望消费者尚不存在时,应设置为 1.28 版中的新功能 |
consumer_type |
body |
字符串 |
一个由数字、 1.38 版中的新功能 |
project_id |
body |
字符串 |
项目的 UUID。 |
user_id |
body |
字符串 |
用户的 UUID。 |
generation (可选) |
body |
整数 |
一个一致的视图标记,用于协助管理并发资源提供者更新。该值被忽略;它的存在是为了保持读写表示之间的对称性。 |
mappings (可选) |
body |
对象 |
一个字典,将请求组后缀与标识满足每个组的资源提供者 UUID 列表关联起来。空字符串和 1.34 版中的新功能 |
请求示例(微版本 1.38 - )¶
{
"allocations": {
"4e061c03-611e-4caa-bf26-999dcff4284e": {
"resources": {
"DISK_GB": 20
}
},
"89873422-1373-46e5-b467-f0c5e6acf08f": {
"resources": {
"MEMORY_MB": 1024,
"VCPU": 1
}
}
},
"consumer_generation": 1,
"user_id": "66cb2f29-c86d-47c3-8af5-69ae7b778c70",
"project_id": "42a32c07-3eeb-4401-9373-68a8cdca6784",
"consumer_type": "INSTANCE"
}
请求示例(微版本 1.28 - 1.36)¶
{
"allocations": {
"4e061c03-611e-4caa-bf26-999dcff4284e": {
"resources": {
"DISK_GB": 20
}
},
"89873422-1373-46e5-b467-f0c5e6acf08f": {
"resources": {
"MEMORY_MB": 1024,
"VCPU": 1
}
}
},
"consumer_generation": 1,
"user_id": "66cb2f29-c86d-47c3-8af5-69ae7b778c70",
"project_id": "42a32c07-3eeb-4401-9373-68a8cdca6784"
}
请求示例(微版本 1.12 - 1.27)¶
{
"allocations": {
"4e061c03-611e-4caa-bf26-999dcff4284e": {
"resources": {
"DISK_GB": 20
}
},
"89873422-1373-46e5-b467-f0c5e6acf08f": {
"resources": {
"MEMORY_MB": 1024,
"VCPU": 1
}
}
},
"user_id": "66cb2f29-c86d-47c3-8af5-69ae7b778c70",
"project_id": "42a32c07-3eeb-4401-9373-68a8cdca6784"
}
请求(微版本 1.0 - 1.11)¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
消费者 UUID |
路径 |
字符串 |
消费者的 UUID。 |
allocations |
body |
数组 |
字典列表。 |
resources |
body |
对象 |
一个以资源类别名称为键的资源记录字典。 |
resource_provider |
body |
对象 |
包含资源提供者 UUID 的字典。 |
uuid |
body |
字符串 |
资源提供者的 UUID。 |
project_id |
body |
字符串 |
项目的 UUID。 1.8 版中的新功能 |
user_id |
body |
字符串 |
用户的 UUID。 1.8 版中的新功能 |
请求示例(微版本 1.0 - 1.11)¶
{
"allocations": [
{
"resource_provider": {
"uuid": "844ac34d-620e-474c-833c-4c9921251353"
},
"resources": {
"MEMORY_MB": 512,
"VCPU": 2
}
},
{
"resource_provider": {
"uuid": "92637880-2d79-43c6-afab-d860886c6391"
},
"resources": {
"DISK_GB": 5
}
}
],
"project_id": "6e3b2ce9-9175-4830-a862-b9de690bdceb",
"user_id": "81c516e3-5e0e-4dcb-9a38-4473d229a950"
}
响应¶
成功 PUT 后不返回任何主体内容。
删除由 {consumer_uuid} 标识的消费者在所有资源提供者上的所有分配记录。
正常响应代码:204
错误响应代码:itemNotFound(404)
请求¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
消费者 UUID |
路径 |
字符串 |
消费者的 UUID。 |
响应¶
成功删除后不返回正文内容。
资源提供者分配¶
有关描述,请参阅分配。
返回对此资源提供者进行的所有分配的表示,以消费者 UUID 为键。每个分配包括一个或多个资源类别以及消耗的数量。
正常响应代码:200
错误响应代码:itemNotFound(404)
请求¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
uuid |
路径 |
字符串 |
资源提供者的 UUID。 |
响应¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
allocations |
body |
对象 |
一个以消费者 UUID 为键的分配记录字典。 |
resources |
body |
对象 |
一个以资源类别名称为键的资源记录字典。 |
resource_provider_generation |
body |
整数 |
一种一致性标记,有助于管理并发资源提供程序更新。 |
响应示例¶
{
"allocations": {
"56785a3f-6f1c-4fec-af0b-0faf075b1fcb": {
"resources": {
"MEMORY_MB": 256,
"VCPU": 1
}
},
"9afd5aeb-d6b9-4dea-a588-1e6327a91834": {
"resources": {
"MEMORY_MB": 512,
"VCPU": 2
}
},
"9d16a611-e7f9-4ef3-be26-c61ed01ecefb": {
"resources": {
"MEMORY_MB": 1024,
"VCPU": 1
}
}
},
"resource_provider_generation": 12
}
用法¶
表示项目和用户对资源的消耗。
注意
Usages API 请求从版本 1.9 开始可用。
返回与由 project_id 标识的项目和由 user_id 标识的用户关联的资源的使用信息报告。该值是一个资源类别字典,其中包含提供的参数的该资源类别的分配总和。
正常响应代码:200
错误响应代码:badRequest(400)
请求¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
project_id |
查询 |
字符串 |
项目的 UUID。 |
user_id (可选) |
查询 |
字符串 |
用户的 UUID。 |
consumer_type (可选) |
查询 |
字符串 |
一个由数字、 1.38 版中的新功能 |
响应(微版本 1.38 - )¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
usages.consumer_type |
body |
字符串 |
一个由数字、 1.38 版中的新功能 |
usages.consumer_type.consumer_count |
body |
整数 |
特定 1.38 版中的新功能 |
usages.consumer_type.RESOURCE_CLASS |
body |
整数 |
使用报告中消耗的资源类别数量。 |
响应示例(微版本 1.38 - )¶
{
"usages" : {
"INSTANCE" : {
"consumer_count" : 5,
"MEMORY_MB" : 512,
"VCPU" : 2,
"DISK_GB" : 5
},
"MIGRATION" : {
"DISK_GB" : 5,
"VCPU" : 2,
"consumer_count" : 2,
"MEMORY_MB" : 512
},
"unknown" : {
"VCPU" : 2,
"DISK_GB" : 5,
"consumer_count" : 1,
"MEMORY_MB" : 512
}
}
}
响应(微版本 1.9 - 1.36)¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
usages |
body |
对象 |
一个以资源类别名称为键的资源记录字典。 |
响应示例(微版本 1.9 - 1.36)¶
{
"usages": {
"DISK_GB": 5,
"MEMORY_MB": 512,
"VCPU": 2
}
}
资源提供者用量¶
以聚合形式显示资源提供者的资源消耗,即不包含特定消费者的信息。请参阅资源提供者分配。
返回与由 {uuid} 标识的资源提供者关联的资源的使用信息报告。该值是一个资源类别字典,其中包含此资源提供者的该资源类别的分配总和。
正常响应代码:200
错误响应代码:itemNotFound(404)
请求¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
uuid |
路径 |
字符串 |
资源提供者的 UUID。 |
响应¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
resource_provider_generation |
body |
整数 |
一种一致性标记,有助于管理并发资源提供程序更新。 |
usages |
body |
对象 |
资源提供者的使用摘要。这是一个字典,描述了此资源提供者上每种资源类别的消耗量。例如, |
响应示例¶
{
"resource_provider_generation": 1,
"usages": {
"DISK_GB": 1,
"MEMORY_MB": 512,
"VCPU": 1
}
}
分配候选¶
注意
分配候选 API 请求从版本 1.10 开始可用。
返回一个表示分配请求和资源提供者摘要集合的字典。每个分配请求都有信息来形成 PUT /allocations/{consumer_uuid} 请求,以针对一组相关资源提供者声明资源。可能需要额外的参数,请参阅更新分配。由于有几个分配请求可用,因此有必要选择一个。为了做出决定,提供了包含库存/容量信息的资源提供者摘要。例如,此信息被 nova-scheduler 的 FilterScheduler 用于决定在哪台计算主机上构建服务器。
您还可以在使用提供者树建模文档中找到请求参数的其他案例研究。
正常响应代码:200
错误响应代码:badRequest(400)
请求¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
resources (可选) |
查询 |
字符串 |
逗号分隔的字符串列表,指示每个分配请求中的提供者必须共同具备容量和可用性以提供指定类别的资源数量 resources=VCPU:4,DISK_GB:64,MEMORY_MB:2048
这些资源可以通过同一非共享树中或通过聚合关联的任何提供者来满足。 |
required (可选) |
查询 |
字符串 |
提供者必须拥有的逗号分隔特性列表 required=HW_CPU_X86_AVX,HW_CPU_X86_SSE
响应中的分配请求将针对具有所有请求资源容量的资源提供者,并且这些资源提供者的集合将共同包含所有必需的特性。这些特性可以通过同一非共享树中或通过聚合关联的任何提供者来满足,只要该提供者也为请求贡献资源。从微版本 1.22 开始,可以通过在特性前加上 从微版本 1.39 开始, required=T1,!T2&required=T3
表示 T1 且非 T2 且 T3。 此外,从微版本 1.39 开始, required=in:T1,T2,T3
这意味着 T1 或 T2 或 T3。 不支持将禁止特性混入 required=in:T3,T4&required=T1,!T2
受支持,它表示 T1 且非 T2 且 (T3 或 T4)。 1.17 版中的新功能 |
member_of (可选) |
查询 |
字符串 |
表示聚合 UUID 的字符串;或前缀 member_of=5e08ea53-c4c6-448e-9334-ac4953de3cfa
member_of=in:42896e0d-205d-4fe3-bd1e-100924931787,5e08ea53-c4c6-448e-9334-ac4953de3cfa
从微版本 1.24 开始,可以指定多个 member_of=AGGA_UUID&member_of=in:AGGB_UUID,AGGC_UUID
从微版本 1.32 开始, member_of=AGGA_UUID&member_of=!AGGB_UUID
在逻辑上将翻译为“候选资源提供者必须在 AGGA 中,并且不在 AGGB 中。”我们不支持 member_of=!in:AGGA_UUID,AGGB_UUID,AGGC_UUID
member_of=!AGGA_UUID&member_of=!AGGB_UUID&member_of=!AGGC_UUID
我们不检查同一个聚合 UUID 是否同时存在于肯定和否定表达式中,以返回 400 BadRequest。在这种情况下,我们仍然返回 200。例如 member_of=AGGA_UUID&member_of=!AGGA_UUID
将返回空的 member_of=in:AGGA_UUID,AGGB_UUID&member_of=!AGGA_UUID
将返回不在AGGA中但在AGGB中的资源提供者。 1.21 版中的新功能 |
in_tree (可选) |
查询 |
字符串 |
一个字符串,表示资源提供者 UUID。提供时,它将过滤返回的分配候选,仅限于与给定资源提供者在同一树中的资源提供者。 1.31 版中的新功能 |
resourcesN (可选) |
查询 |
字符串 |
一个逗号分隔的字符串列表,指示提供者必须有能力提供指定类别的资源数量 resources42=VCPU:4,DISK_GB:64,MEMORY_MB:2048
参数键是 在微版本 1.25 - 1.32 中,后缀是数字。 从微版本 1.33 开始,后缀是一个字符串,长度可以是 1-64 个字符,由数字、 不同的分组(带或不带后缀)可能由相同的提供者满足,也可能不满足,具体取决于 1.25 版中的新功能 |
requiredN (可选) |
查询 |
字符串 |
一个逗号分隔的特性列表,提供者必须具有(或如果前缀为 required42=HW_CPU_X86_AVX,HW_CPU_X86_SSE,!HW_CPU_X86_AVX2
参数键是 值格式与(非粒度的) 在微版本 1.25 - 1.32 中,后缀是数字。 从微版本 1.33 开始,后缀是一个字符串,长度可以是 1-64 个字符,由数字、 如果未指定相应的 从微版本 1.39 开始,粒度 requiredN=in:T3,T4&requiredN=T1,!T2
受支持,它表示 T1 且非 T2 且 (T3 或 T4)。 1.25 版中的新功能 |
member_ofN (可选) |
查询 |
字符串 |
表示聚合 UUID 的字符串;或前缀 1.25 版中的新功能 |
in_treeN (可选) |
查询 |
字符串 |
一个字符串,表示资源提供者 UUID。参数键是 1.31 版中的新功能 |
group_policy (可选) |
查询 |
字符串 |
当提供了多个 1.25 版中的新功能 |
limit (可选) |
查询 |
整数 |
一个正整数,用于限制响应中返回的最大分配候选数量。 1.16 版中的新功能 |
root_required (可选) |
查询 |
字符串 |
一个逗号分隔的特性要求列表,非共享树的根提供者必须满足这些要求 root_required=COMPUTE_SUPPORTS_MULTI_ATTACH,!CUSTOM_WINDOWS_LICENSED
响应中的分配请求将仅限于其(非共享)树的根提供者满足指定特性要求的请求。禁止的特性(根提供者必须不存在)通过在特性前加上 1.35 版中的新功能 |
same_subtree (可选) |
查询 |
字符串 |
一个逗号分隔的请求组后缀字符串列表 ($S)。每个后缀必须与请求中其他粒度组上的后缀完全匹配。重要的是,标识的请求组不需要 resources[$S]。如果提供了此参数,则满足指定请求组的至少一个资源提供者必须是其余提供者的祖先。 1.36 版中的新功能 |
响应(微版本 1.12 - )¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
allocation_requests |
body |
数组 |
一个对象列表,其中包含客户端随后可在调用 PUT /allocations/{consumer_uuid} 中使用的序列化 HTTP 正文,以针对一组相关资源提供者声明资源。 |
provider_summaries |
body |
对象 |
一个以资源提供者 UUID 为键的字典,包含在 |
allocations |
body |
对象 |
一个以资源提供者 UUID 为键的分配字典。 |
resources |
body |
对象 |
一个以资源类别名称为键的资源记录字典。 |
capacity |
body |
整数 |
提供者可容纳的资源量。 |
used |
body |
整数 |
已分配的资源量。 |
traits |
body |
数组 |
特性列表。 1.17 版中的新功能 |
parent_provider_uuid |
body |
字符串 |
资源提供者直接父级的 UUID。 1.29 版中的新功能 |
root_provider_uuid |
body |
字符串 |
此提供者树中最高级提供者的 UUID。 1.29 版中的新功能 |
mappings |
body |
对象 |
一个字典,将请求组后缀与标识满足每个组的资源提供者 UUID 列表关联起来。空字符串和 1.34 版中的新功能 |
响应示例 (微版本 1.34 - )¶
{
"allocation_requests": [
{
"allocations": {
"92e971c9-777a-48bf-a181-a2ca1105c015": {
"resources": {
"NET_BW_EGR_KILOBIT_PER_SEC": 10
}
},
"cefbdf54-05a8-4db4-ad2b-d6729e5a4de8": {
"resources": {
"NET_BW_EGR_KILOBIT_PER_SEC": 20
}
},
"9a9c6b0f-e8d1-4d16-b053-a2bfe8a76757": {
"resources": {
"VCPU": 1
}
}
},
"mappings": {
"_NET1": [
"92e971c9-777a-48bf-a181-a2ca1105c015"
],
"_NET2": [
"cefbdf54-05a8-4db4-ad2b-d6729e5a4de8"
],
"": [
"9a9c6b0f-e8d1-4d16-b053-a2bfe8a76757"
]
}
}
],
"provider_summaries": {
"be99627d-e848-44ef-8341-683e2e557c58": {
"resources": {},
"traits": [
"COMPUTE_VOLUME_MULTI_ATTACH"
],
"parent_provider_uuid": null,
"root_provider_uuid": "be99627d-e848-44ef-8341-683e2e557c58"
},
"9a9c6b0f-e8d1-4d16-b053-a2bfe8a76757": {
"resources": {
"VCPU": {
"capacity": 4,
"used": 0
},
"MEMORY_MB": {
"capacity": 2048,
"used": 0
}
},
"traits": [
"HW_NUMA_ROOT",
"CUSTOM_FOO"
],
"parent_provider_uuid": "be99627d-e848-44ef-8341-683e2e557c58",
"root_provider_uuid": "be99627d-e848-44ef-8341-683e2e557c58"
},
"ba415f98-1960-4488-b2ed-4518b77eaa60": {
"resources": {},
"traits": [
"CUSTOM_VNIC_TYPE_DIRECT"
],
"parent_provider_uuid": "be99627d-e848-44ef-8341-683e2e557c58",
"root_provider_uuid": "be99627d-e848-44ef-8341-683e2e557c58"
},
"92e971c9-777a-48bf-a181-a2ca1105c015": {
"resources": {
"NET_BW_EGR_KILOBIT_PER_SEC": {
"capacity": 10000,
"used": 0
}
},
"traits": [
"CUSTOM_PHYSNET1"
],
"parent_provider_uuid": "ba415f98-1960-4488-b2ed-4518b77eaa60",
"root_provider_uuid": "be99627d-e848-44ef-8341-683e2e557c58"
},
"cefbdf54-05a8-4db4-ad2b-d6729e5a4de8": {
"resources": {
"NET_BW_EGR_KILOBIT_PER_SEC": {
"capacity": 20000,
"used": 0
}
},
"traits": [
"CUSTOM_PHYSNET2"
],
"parent_provider_uuid": "ba415f98-1960-4488-b2ed-4518b77eaa60",
"root_provider_uuid": "be99627d-e848-44ef-8341-683e2e557c58"
}
}
}
响应示例 (微版本 1.29 - 1.33)¶
{
"allocation_requests": [
{
"allocations": {
"a99bad54-a275-4c4f-a8a3-ac00d57e5c64": {
"resources": {
"DISK_GB": 100
}
},
"35791f28-fb45-4717-9ea9-435b3ef7c3b3": {
"resources": {
"VCPU": 1,
"MEMORY_MB": 1024
}
}
}
},
{
"allocations": {
"a99bad54-a275-4c4f-a8a3-ac00d57e5c64": {
"resources": {
"DISK_GB": 100
}
},
"915ef8ed-9b91-4e38-8802-2e4224ad54cd": {
"resources": {
"VCPU": 1,
"MEMORY_MB": 1024
}
}
}
}
],
"provider_summaries": {
"a99bad54-a275-4c4f-a8a3-ac00d57e5c64": {
"resources": {
"DISK_GB": {
"used": 0,
"capacity": 1900
}
},
"traits": ["MISC_SHARES_VIA_AGGREGATE"],
"parent_provider_uuid": null,
"root_provider_uuid": "a99bad54-a275-4c4f-a8a3-ac00d57e5c64"
},
"35791f28-fb45-4717-9ea9-435b3ef7c3b3": {
"resources": {
"VCPU": {
"used": 0,
"capacity": 384
},
"MEMORY_MB": {
"used": 0,
"capacity": 196608
}
},
"traits": ["HW_CPU_X86_SSE2", "HW_CPU_X86_AVX2"],
"parent_provider_uuid": null,
"root_provider_uuid": "35791f28-fb45-4717-9ea9-435b3ef7c3b3"
},
"915ef8ed-9b91-4e38-8802-2e4224ad54cd": {
"resources": {
"VCPU": {
"used": 0,
"capacity": 384
},
"MEMORY_MB": {
"used": 0,
"capacity": 196608
}
},
"traits": ["HW_NIC_SRIOV"],
"parent_provider_uuid": null,
"root_provider_uuid": "915ef8ed-9b91-4e38-8802-2e4224ad54cd"
},
"f5120cad-67d9-4f20-9210-3092a79a28cf": {
"resources": {
"SRIOV_NET_VF": {
"used": 0,
"capacity": 8
}
},
"traits": [],
"parent_provider_uuid": "915ef8ed-9b91-4e38-8802-2e4224ad54cd",
"root_provider_uuid": "915ef8ed-9b91-4e38-8802-2e4224ad54cd"
}
}
}
响应示例 (微版本 1.17 - 1.28)¶
{
"allocation_requests": [
{
"allocations": {
"a99bad54-a275-4c4f-a8a3-ac00d57e5c64": {
"resources": {
"DISK_GB": 100
}
},
"35791f28-fb45-4717-9ea9-435b3ef7c3b3": {
"resources": {
"VCPU": 1,
"MEMORY_MB": 1024
}
}
}
},
{
"allocations": {
"a99bad54-a275-4c4f-a8a3-ac00d57e5c64": {
"resources": {
"DISK_GB": 100
}
},
"915ef8ed-9b91-4e38-8802-2e4224ad54cd": {
"resources": {
"VCPU": 1,
"MEMORY_MB": 1024
}
}
}
}
],
"provider_summaries": {
"a99bad54-a275-4c4f-a8a3-ac00d57e5c64": {
"resources": {
"DISK_GB": {
"used": 0,
"capacity": 1900
}
},
"traits": ["HW_CPU_X86_SSE2", "HW_CPU_X86_AVX2"]
},
"915ef8ed-9b91-4e38-8802-2e4224ad54cd": {
"resources": {
"VCPU": {
"used": 0,
"capacity": 384
},
"MEMORY_MB": {
"used": 0,
"capacity": 196608
}
},
"traits": ["HW_NIC_SRIOV"]
},
"35791f28-fb45-4717-9ea9-435b3ef7c3b3": {
"resources": {
"VCPU": {
"used": 0,
"capacity": 384
},
"MEMORY_MB": {
"used": 0,
"capacity": 196608
}
},
"traits": []
}
}
}
响应示例 (微版本 1.12 - 1.16)¶
{
"allocation_requests": [
{
"allocations": {
"a99bad54-a275-4c4f-a8a3-ac00d57e5c64": {
"resources": {
"DISK_GB": 100
}
},
"35791f28-fb45-4717-9ea9-435b3ef7c3b3": {
"resources": {
"VCPU": 1,
"MEMORY_MB": 1024
}
}
}
},
{
"allocations": {
"a99bad54-a275-4c4f-a8a3-ac00d57e5c64": {
"resources": {
"DISK_GB": 100
}
},
"915ef8ed-9b91-4e38-8802-2e4224ad54cd": {
"resources": {
"VCPU": 1,
"MEMORY_MB": 1024
}
}
}
}
],
"provider_summaries": {
"a99bad54-a275-4c4f-a8a3-ac00d57e5c64": {
"resources": {
"DISK_GB": {
"used": 0,
"capacity": 1900
}
}
},
"915ef8ed-9b91-4e38-8802-2e4224ad54cd": {
"resources": {
"VCPU": {
"used": 0,
"capacity": 384
},
"MEMORY_MB": {
"used": 0,
"capacity": 196608
}
}
},
"35791f28-fb45-4717-9ea9-435b3ef7c3b3": {
"resources": {
"VCPU": {
"used": 0,
"capacity": 384
},
"MEMORY_MB": {
"used": 0,
"capacity": 196608
}
}
}
}
}
响应 (微版本 1.10 - 1.11)¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
allocation_requests |
body |
数组 |
一个对象列表,其中包含客户端随后可在调用 PUT /allocations/{consumer_uuid} 中使用的序列化 HTTP 正文,以针对一组相关资源提供者声明资源。 |
provider_summaries |
body |
对象 |
一个字典,键是包含在 |
allocations |
body |
数组 |
字典列表。 |
resource_provider |
body |
对象 |
包含资源提供者 UUID 的字典。 |
uuid |
body |
字符串 |
资源提供者的 UUID。 |
resources |
body |
对象 |
一个以资源类别名称为键的资源记录字典。 |
capacity |
body |
整数 |
提供者可容纳的资源量。 |
used |
body |
整数 |
已分配的资源量。 |
响应示例 (微版本 1.10 - 1.11)¶
{
"allocation_requests": [
{
"allocations": [
{
"resource_provider": {
"uuid": "30742363-f65e-4012-a60a-43e0bec38f0e"
},
"resources": {
"MEMORY_MB": 512
}
}
]
}
],
"provider_summaries": {
"30742363-f65e-4012-a60a-43e0bec38f0e": {
"resources": {
"DISK_GB": {
"capacity": 77,
"used": 0
},
"MEMORY_MB": {
"capacity": 11206,
"used": 256
},
"VCPU": {
"capacity": 64,
"used": 0
}
}
}
}
}
重塑器¶
注意
重塑器请求从版本 1.30 开始可用。
原子性地迁移资源提供者库存和相关分配。当某些库存需要从一个资源提供者移动到另一个资源提供者时,例如当一类库存从父级提供者移动到新的子级提供者时,会使用此操作。
注意
这是一个特殊操作,仅在资源提供者拓扑结构发生变化且库存正在使用中的罕见情况下使用。仅在您非常确定自己在做什么的情况下才使用此操作。
正常响应代码:204
错误响应代码:badRequest(400),conflict(409)
请求¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
inventories |
body |
对象 |
一个包含多个库存的字典,以资源提供者 UUID 为键。每个库存描述了每个资源提供者的所需完整库存。一个空字典表示删除该提供者的库存。 |
inventories.{resource_provider_uuid}.resource_provider_generation |
body |
整数 |
一种一致性标记,有助于管理并发资源提供程序更新。 |
inventories.{resource_provider_uuid}.inventories |
body |
对象 |
一个以资源类别为键的库存字典。 |
allocations |
body |
对象 |
一个包含多个分配的字典,以消费者 UUID 为键。每个分配集合描述了每个消费者的完整分配集。每个消费者分配字典本身都是一个以资源提供者 UUID 为键的资源分配字典。一个空字典表示现有分配没有变化,而消费者字典**内**的空 |
allocations.{consumer_uuid}.allocations |
body |
对象 |
一个以资源提供者 UUID 为键的资源分配字典。如果这是一个空对象,则将删除此消费者的分配。 |
allocations.{consumer_uuid}.allocations.{resource_provider_uuid}.resources |
body |
对象 |
一个以资源类别名称为键的资源记录字典。 |
allocations.{consumer_uuid}.project_id |
body |
字符串 |
项目的 UUID。 |
allocations.{consumer_uuid}.user_id |
body |
字符串 |
用户的 UUID。 |
allocations.{consumer_uuid}.mappings |
body |
对象 |
一个字典,将请求组后缀与标识满足每个组的资源提供者 UUID 列表关联起来。空字符串和 1.34 版中的新功能 |
allocations.{consumer_uuid}.consumer_generation |
body |
整数 |
消费者的代。当指示调用方期望消费者尚不存在时,应设置为 |
allocations.{consumer_uuid}.consumer_type |
body |
字符串 |
一个由数字、 1.38 版中的新功能 |
请求示例¶
{
"allocations": {
"9ae60315-80c2-48a0-a168-ca4f27c307e1": {
"allocations": {
"a7466641-cd72-499b-b6c9-c208eacecb3d": {
"resources": {
"DISK_GB": 1000
}
}
},
"project_id": "2f0c4ffc-4c4d-407a-b334-56297b871b7f",
"user_id": "cc8a0fe0-2b7c-4392-ae51-747bc73cf473",
"consumer_generation": 1,
"consumer_type": "INSTANCE"
},
"4a6444e5-10d6-43f6-9a0b-8acce9309ac9": {
"allocations": {
"c4ddddbb-01ee-4814-85c9-f57a962c22ba": {
"resources": {
"VCPU": 1
}
},
"a7466641-cd72-499b-b6c9-c208eacecb3d": {
"resources": {
"DISK_GB": 20
}
}
},
"project_id": "2f0c4ffc-4c4d-407a-b334-56297b871b7f",
"user_id": "406e1095-71cb-47b9-9b3c-aedb7f663f5a",
"consumer_generation": 1,
"consumer_type": "INSTANCE"
},
"e10e7ca0-2ac5-4c98-bad9-51c95b1930ed": {
"allocations": {
"c4ddddbb-01ee-4814-85c9-f57a962c22ba": {
"resources": {
"VCPU": 8
}
}
},
"project_id": "2f0c4ffc-4c4d-407a-b334-56297b871b7f",
"user_id": "cc8a0fe0-2b7c-4392-ae51-747bc73cf473",
"consumer_generation": 1,
"consumer_type": "INSTANCE"
}
},
"inventories": {
"c4ddddbb-01ee-4814-85c9-f57a962c22ba": {
"inventories": {
"VCPU": {
"max_unit": 8,
"total": 10
}
},
"resource_provider_generation": null
},
"a7466641-cd72-499b-b6c9-c208eacecb3d": {
"inventories": {
"DISK_GB": {
"min_unit": 10,
"total": 2048,
"max_unit": 1200,
"step_size": 10
}
},
"resource_provider_generation": 5
}
}
}
成功 POST 后不返回任何主体内容。