删除资源提供商的所有库存

https://blueprints.launchpad.net/nova/+spec/delete-inventories-placement-api

这是一个小的功能请求:为资源提供商的所有库存实现 DELETE 方法。目前可以一次删除单个库存,但没有办法一次性删除所有库存。

问题描述

目前(Placement API 的 1.4 版本或更早版本),为了删除资源提供商的所有库存,必须调用 PUT /resource_providers/{uuid}/inventories 并传递以下请求负载

{
  'generation': <int>,
  'resources': {}
}

支持 DELETE /resource_providers/{uuid}/inventories,不带请求负载,并在成功时返回 204 No Content,将会更容易和更直观。

下面引用了删除单个库存的现有方法

'DELETE': inventory.delete_inventory

https://github.com/openstack/nova/blob/15.0.0/nova/api/openstack/placement/handler.py#L88

用例

作为操作员或开发人员,我希望使用 placement api 通过 DELETE 方法删除资源提供商的所有库存。

提议的变更

添加 DELETE /resource_providers/{uuid}/inventories,并在成功时返回 204 no content。更改包括

  • /nova/api/openstack/placement/handlers/inventory.py,delete_inventories(req)

  • 一篇发布说明,宣传额外的 placement REST API 微版本和功能

inventory.py 的处理程序文件应该只是调用 DELETE /resource_providers/{uuid}/inventories,并构造一个对 ResourceProvider.set_inventory() 的调用,传递一个空的 InventoryList() 对象。

我们仍然希望 DELETE /resource_providers/{uuid}/inventories 调用在库存被使用或存在并发更新库存尝试时返回 409。因此,尽可能地重用 nova.objects.ResourceProvider.set_inventory()。

不需要修改 nova/objects/resource_provider.py 中的任何内容。

备选方案

  • 继续通过 PUT 方法,在请求负载中包含空的资源来删除所有库存(这种方法不直观)。

  • 另一种方法是从资源提供商处获取所有库存,然后逐个使用 DELETE 方法删除。

这些方法既难看,又需要一个新的微版本,其中包含一个新的方法,用于一次性删除资源提供商的所有库存,该方法应该报告适当的返回代码。

数据模型影响

REST API 影响

新的 API 方法:DELETE /resource_providers/{uuid}/inventories

空的请求负载。

成功时返回 204 No Content

在以下错误情况下返回 409 Conflict

  • 资源生成不同步

  • 库存被使用

安全影响

通知影响

其他最终用户影响

性能影响

其他部署者影响

开发人员影响

实现

负责人

主要负责人

Rafael Folco <rfolco@br.ibm.com>

其他贡献者

Jay Pipes <jaypipes@gmail.com>

Chris Dent <cdent@anticdent.org>

工作项

  • 添加一篇 Reno,其中包含 REST API 的更改

  • 向 /resource_providers/{uuid}/inventories 添加一个新的 DELETE 方法

  • 支持新的 DELETE 方法

依赖项

无。这项工作的大部分基础已经在 Generic Resource Pools 蓝图中完成。

测试

新的 API 测试(使用 DELETE 方法)将被添加到 nova/tests/functional/api/openstack/placement/gabbits/inventory.yaml。

文档影响

树内 API 参考将更新 placement REST API 文档。

参考资料

https://bugs.launchpad.net/nova/+bug/1653122

历史

修订版

发布名称

描述

Pike

引入